Ich habe mich gefragt, wie ich einen Befehl als ein anderer Benutzer aus einem Skript ausführen soll.
Ich habe den Eigentümer des Skripts als root festgelegt. Ich habe auch den folgenden Befehl im Skript ausgeführt, um den Befehl als Hudson-Benutzer auszuführen:
su -c command hudson
Ist das die richtige Syntax?
sudo cat /etc/passwd | grep user-abc
. Wenn Sie so etwas sehen:user-abc:x:994:994::/home/user-abc:/bin/false
dann wird es nicht funktionieren. Das liegt daran, dass der letzte Teil "/bin/false
" bedeutet, dass es für diesen Benutzer keine Shell gibt.Antworten:
Ja. Hier ist der
--help
:Und einige Tests (ich habe
sudo
das Passwort für dennobody
Account verwendet, da ich es nicht kenne )Wenn Ihr Befehl Argumente akzeptiert, müssen Sie sie in Anführungszeichen setzen. Wenn Sie dies nicht tun, werden seltsame Dinge passieren. Hier bin ich als Root und versuche, ein Verzeichnis in / home / oli (als oli) zu erstellen, ohne den vollständigen Befehl anzugeben :
Es wird nur
mkdir
als Wert für das-c
Flag gelesen und versucht, es/home/oli/java
als Benutzername zu verwenden. Wenn wir es zitieren, funktioniert es einfach:quelle
Hinweis: "Ich habe den Eigentümer des Skripts als root festgelegt" führt keine Aktionen aus. Auch wenn Sie das setuid-Bit gesetzt haben, funktioniert es immer noch nicht
Angenommen, Sie führen das Skript tatsächlich als root aus, können Sie es jedoch verwenden
sudo
.su
dient in erster Linie dem Benutzerwechsel, währendsudo
Befehle wie andere Benutzer ausgeführt werden. Mit dem-u
Flag können Sie angeben, welcher Benutzer den Befehl ausführen soll:quelle
sudo
können Sie dies nur erhalten:root is not in the sudoers file
. Welches machtsu - <username> -c "command to run"
die einzige Option.sudo -u kilgore mv this that
)