Daten
- Ich möchte, dass Operator-Benutzer auf diesem Computer ihre eigenen CIF-Freigaben bereitstellen
- Die
sudoers
Datei enthält bereits den/bin/mount -t cifs //*/* /media/* -o username=*
Befehl für alle Operatoren - Ich möchte, dass die Benutzer eine
cifs
Freigabe über ein Skript bereitstellen, das das Kennwort nur einmal und nicht zweimal eingibt. - Das sudo-Passwort und das cifs-Passwort sind identisch.
Was ich schon habe
Dieses Skript funktioniert:
#!/bin/bash
sudo 'mount -t cifs //192.168.1.1/home /media/$USER/home -o username=$USER'
... aber die Benutzer müssen dasselbe Passwort zweimal eingeben!
- Einmal für
sudo
- Einmal für die Montierung selbst
Das würde auch funktionieren:
#!/bin/bash
echo -n Password:
read -s szPassword
echo $szPassword | sudo -S sh -c 'echo $szPassword | mount -t cifs //192.168.1.1/home /media/$USER/home -o username=$USER'
... aber dafür müsste ich allen Betreibern die Möglichkeit gebensudo sh
(schwerwiegendes Sicherheitsproblem)
Frage
Wie mounte ich eine CIF-Freigabe in bash¹, ohne sh
die sudoers
Datei einzufügen oder eine permanente / temporäre Datei zu erstellen?
Anmerkung 1: Kein Python, Perl, C, Go, ... bitte?
Hinweis 2: Ich weiß, dass ich das Passwort einfach durch die sudoers
Datei entfernen kann , aber ich versuche, die Sicherheit zu erhöhen, nicht zu lockern, ohne auf Bequemlichkeit zu verzichten ...
printf "%s\n" "$szPassword" "$szPassword" | sudo -S mount -t cifs / ...
?Antworten:
Sie sollten stattdessen den Benutzer veranlassen, sudo als zu verwenden
sudo script
. Überprüfen Sie einfach, ob das Skript als root ausgeführt wird, wenn Sie nicht danach fragenVersuchen Sie nicht, das Passwort Ihrer Benutzer zu erfassen.
quelle
sudo
und dann (nach erfolgreicher Authentifizierung) wieder vonmount
. In ihrem Anwendungsfall sind diese Passwörter identisch, so dass ich sehen kann, warum das OP möchte, dass der Benutzer dieses Passwort nur einmal eingeben muss. Ich glaube nicht, dass Ihre Lösung dabei hilft. Ich bin damit einverstanden, dass man keine Passwörter erfassen sollte.1>&2
), befindet sich im Autostart und war früher nur eine CIF-Freigabe, aber jetzt sind es drei, also wirklich ein Passwort wird gebraucht. (Dieser Test ist bereits enthalten, falls jemand anderes, der nicht Mitglied der Operatorengruppe ist, versucht, ihn auszuführen.)~/.smbcredentials
Hilfsprogramme, mit denen Sie das Kennwort einer CIFS / SMB-Freigabe sicher "merken" können ( z. B. beim Bearbeiten ), und zwar auch ohne sudo (wenn Sie gvfs, umount oder polkit verwenden).Ich bin dumm!
Das folgende Skript:
funktioniert einfach und:
quelle
<<<
könnte auch anstelle von verwendet werdenprintf
, aber ein besserer Ansatz wäre es, auf alles zuread
verzichten und einfachsudo --stdin
alles alleine zu verwenden. So etwas wie$ printf "Type out your password\n" && sudo --stdin apt-get update
Benutzer kann immer noch das sudo-Passwort eingeben. und das wird es nicht in die Prozessliste setzen. Aber natürlich gibt es unendlich viele andere mögliche Sicherheitsprobleme, wie Keylogger, potenzielle Sicherheitslücken insudo
und bla und bla und bla ins Unendlichesudo
Für die Ausführung dieses Befehls ist kein Kennwort erforderlich. Die Passwortabfrage fürmount
bleibt bestehen.In
sudoers
, schließen Sie etwas wie einNachdem Sie dies eingegeben haben,
sudo
werden Sie nicht mehr nach einem Kennwort für diesen bestimmten Befehl gefragt. Der Benutzer muss weiterhin ein Kennwort für denmount
Befehl angeben.Hinweis : Ich habe den Befehl wörtlich von dem übernommen, was Sie in der Frage angegeben haben. Ich habe nicht geprüft, ob die Platzhalter den Benutzern erlauben würden, etwas Böses zu tun. In der
sudoers
Manpage finden Sie Beispiele für üble Dinge. Beachten Sie insbesondere, dasssudoers
der Benutzer in dieser Zeile beliebig viele-o
Schalter oder andere Argumente hinzufügen kannmount
. Möglicherweise möchten Sie Ihren Ansatz überdenken, indem Sie z. B. ein Skript wie das von @Braiam vorgeschlagene hinzufügen und die Ausführungsudo
ohne zusätzliche Authentifizierung zulassen . Das Skript stellt dann sicher, dass Benutzer nur die bestimmte Form ausführen könnenmount
, die sie ausführen möchten.Anstatt dies für alle Benutzer zuzulassen, können Sie dies auch auf Mitglieder einer bestimmten Gruppe beschränken, z. B. eine Gruppe erstellen
cifsmount
und dann habenquelle
Eine allgemeine Lösung für diese Probleme besteht darin, die folgende Präambel an die Spitze Ihres Sudo zu setzen, für das Skripte erforderlich sind:
Dies hat natürlich den Nachteil, dass bei einigen Befehlen im Skript keine
sudo
unnötige Erhöhung der Berechtigungen erforderlich ist.Jedenfalls dachte ich, ich würde diesen kleinen Tipp teilen. Das Schönste daran ist, dass, wenn Sie bereits eine effektive UID-Wurzel haben (z. B. wenn Sie sie bereits unter sudo aufgerufen haben), sie anmutig das Richtige tut. Außerdem ist es weniger benutzerfreundlich, einen Fehler zu melden und Sie (mit sudo) zur erneuten Eingabe / Ausführung zu zwingen.
Möglicherweise möchten Sie auch die
timestamp_timeout
Variable auschecken, inman 5 sudoers
der angegeben wirdsudo
, dass Benutzeranmeldeinformationen für eine begrenzte Anzahl von Minuten gespeichert werden sollen (dies kann auch ein Bruchteil sein).quelle
#test if root: if not: bail out if [[ $EUID -ne 0 ]]; then echo "This script must be run as root, use sudo "$0" instead" 1>&2 exit 1 fi
Der Punkt ist, dass es auch mehrere Bereitstellungen mit demselben Kennwort enthält (erneut: entfernt), aber trotzdem danke ...