Ich schreibe ein Skript (eigentlich eine Kombination aus Skripten und Makefile), das externe Abhängigkeiten installiert: einige apt-get
Befehle, einige git
Klonen, Erstellen, Installieren, Hinzufügen von Benutzern zu Gruppen, ...
Einige der Vorgänge in diesen Skripten erfordern Superuser-Berechtigungen, andere nicht.
Bisher habe ich den gesamten make-Prozess mit sudo ausgeführt, aber er hat einige Nachteile:
git
repos, die ichroot
als Eigentümer bekomme , kann ich ohnesudo
oder nicht nachträglich ändernchown
- Die Skripte, die Benutzer zu Gruppen hinzufügen, wissen nicht, welchen Benutzer sie hinzufügen sollen, da sie
whoami
zurückgegeben werdenroot
Was ist die beste Möglichkeit, als Superuser nur die Befehle auszuführen, die dies erfordern? Im Idealfall würde der Vorgang weiterhin die Eingabe meines sudo
Kennworts erfordern , jedoch nur einmal zu Beginn des Installationsvorgangs. Es würde es dann ganz am Ende vergessen, aber es die ganze Zeit bis dahin behalten (es kann mehrere Stunden dauern).
Die Lösungen, die ich online gefunden habe, umfassen:
sudo -v
am anfang des skripts, aber wenn ich das richtig verstehe läuft das mal ab. Mein Skript könnte ein paar Stunden lang laufen- Ausführen des Skripts mit
sudo
, aber mit den Befehlen, die keinen Superuser benötigensudo -u $(logname) <command>
. Das ist, was ich jetzt mache, aber es fühlt sich so an, als sollte es umgekehrt sein.
Idealerweise möchte ich, dass mein Skript:
- Fragen Sie nach Superuser-Anmeldeinformationen
- Führen Sie normale Befehle als angemeldeter Benutzer aus
- Führen Sie sudo-Befehle mit den in Schritt 1 eingegebenen Anmeldeinformationen aus
sudo -k
um die Superuser-Sitzung zu schließen
su $SUDO_USER -c command
ausführen und für die Befehle als normaler Benutzer ausführen.
SUDO_USER
Umgebungsvariable überprüfen . Falls vorhanden, enthält es den Benutzernamen des Benutzers, der sudo aufruft. So können Sie (als root) $ SUDO_USER: $ SUDO_GID $ your_files chown. Ebenso können Sie diese Variablen überprüfen, damit Ihre adduser-Befehle wissen, welcher Benutzer hinzugefügt werden soll.