Gibt es eine Möglichkeit, einen Teil eines Skripts als ein anderer (Nicht-Root-) Benutzer auszuführen? Wenn dies hilft, wird der Teil, der als anderer Benutzer ausgeführt werden soll, am Ende des Skripts angezeigt
Edit:
OS -> Ubuntu 9.04
Gibt es eine Möglichkeit, einen Teil eines Skripts als ein anderer (Nicht-Root-) Benutzer auszuführen? Wenn dies hilft, wird der Teil, der als anderer Benutzer ausgeführt werden soll, am Ende des Skripts angezeigt
Edit:
OS -> Ubuntu 9.04
Antworten:
Verwenden Sie den Befehl sudo im Skript.
In der Form:
sudo -u username command
Der Befehl sudo führt den Befehl als Benutzernamen aus .
Wenn das Skript als root ausgeführt wird, werden Sie meines Erachtens nicht zur Eingabe eines Kennworts aufgefordert. Andernfalls wird in diesem Artikel die Verwendung von sudo mit Kennwort in einer Befehlszeile beschrieben. , und dieser Artikel beschreibt, wie man sudo ohne Passwort benutzt?
chmod +x script.sh
und dann einfachsudo -u username script.sh
i
Diese Antwort ist gut, aber der Hinweis zu Serverfehlern ist etwas gefährlich - kann jeder als root ausführen! Ich poste 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 erteilen. Tippe visudo
und füge 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 auch nicht verwenden:
username ALL=(ALL) NOPASSWD: ALL
oder Benutzername hostname = ALL
Die Sudoer-Manpage enthält viele wichtige Details
username
den Benutzernamen ersetzen, der den Befehl ausführen kann). Wenn die ausführbare Datei, die Sie ausführen möchten, nur von einem bestimmten Benutzer ausgeführt werden kann, ist dies auch in Ordnung - übergeben Sie diesen Benutzernamen einfach in der sudo -u username commandline
Zeile des Skripts.
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
# ./Lauf
1: root
2: nobody
3: root
Ich bin mir nicht sicher, aber wenn Sie möchten, dass NUR das Ende dieses Skripts als ein anderer Benutzer ausgeführt wird, können Sie dies su someuser
vor dem Ende des Skripts hinzufügen .
Vermisse ich etwas?
Hoffentlich hilft das,
Grüße
Auf diese Weise wird das Ende eines Skripts von einem anderen Benutzer (root) ausgeführt. Bitte beachten Sie die $[LINENO+2]
und exit $?
Anrufe. Diese sind erforderlich, damit das Ende des Skripts nur einmal ausgeführt wird und der Beendigungscode des sudo
Aufrufs erhalten bleibt .
#!/bin/bash
echo $USER
# pipe the rest of this script via a sudo call
tail -n +$[LINENO+2] $0 | exec sudo bash
exit $?
echo $USER
exit 1