Verwenden Sie den sudo-Befehl im Skript.
In der Form:
sudo -u username command
Der sudo-Befehl führt Befehl aus als Benutzer Benutzername .
Wenn das Skript als root ausgeführt wird, wird es meines Erachtens nicht zur Eingabe eines Kennworts auffordern. Andernfalls behandelt dieser Artikel die Verwendung von sudo mit Kennwort in einer Befehlszeile?, und dieser Artikel erläutert die Verwendung von sudo ohne Kennwort?
Diese Antwort ist gut, aber der Serverfault-Ratschlag ist etwas gefährlich - würde jedem erlauben, alles als root auszuführen! Deshalb poste ich hier, weil ich den Kommentar nicht formatieren kann.
Ich würde empfehlen, visudo zu verwenden, um die erforderlichen Berechtigungen so genau wie möglich zu vergeben. Geben Sie visudo
ein und fügen Sie eine Zeile hinzu wie:
username hostname = NOPASSWD: /full/path/to/command1, full/path/to/command2
Wenn Sie dasselbe auf vielen Hosts ausführen müssen, können Sie es öffnen mit:
username ALL = NOPASSWD: /full/path/to/command1, full/path/to/command2
Aber ich würde beides **nicht* verwenden:
username ALL=(ALL) NOPASSWD: ALL
orusername hostname =ALL
Die Manpage von sudoer enthält viele blutige Details
# Ich=mag:
#test if running bash as a different user works
sudo -u nobody bash -c : && RUNAS="sudo -u nobody"
echo 1: $USER
#Runs bash with commands between '_' as nobody if possible
$RUNAS bash<<_
echo 2: \$USER
_
echo 3: $USER
# ./ausführen
1: root
2: nobody
3: root