it-swarm.com.de

su options - Befehl als anderer Benutzer ausführen

Ich habe mich gefragt, wie ich einen Befehl als anderer Benutzer über ein Skript ausführen kann.

Ich habe den Besitzer 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?

86

Ja. Hier ist der --help:

$ su --help
Usage: su [options] [LOGIN]

Options:
  -c, --command COMMAND         pass COMMAND to the invoked Shell
  -h, --help                    display this help message and exit
  -, -l, --login                make the Shell a login Shell
  -m, -p,
  --preserve-environment        do not reset environment variables, and
                                keep the same Shell
  -s, --Shell SHELL             use Shell instead of the default in passwd

Und einige Tests (ich habe Sudo verwendet, da ich das Passwort für das Konto nobody nicht kenne)

$ Sudo su -c whoami nobody
[Sudo] password for oli: 
nobody

Wenn Ihr Befehl Argumente akzeptiert, müssen Sie ihn zitieren. Wenn Sie dies nicht tun, werden seltsame Dinge auftreten. Hier versuche ich - als root - ein Verzeichnis in/home/oli (als oli) zu erstellen ohne unter Angabe des vollständigen Befehls:

# su -c mkdir /home/oli/Java oli
No passwd entry for user '/home/oli/Java'

Es wird nur mkdir als Wert für das Flag -c Gelesen und es wird versucht, /home/oli/Java Als Benutzernamen zu verwenden. Wenn wir es zitieren, funktioniert es einfach:

# su -c "mkdir /home/oli/Java" oli
# stat /home/oli/Java
  File: ‘/home/oli/Java’
  Size: 4096        Blocks: 8          IO Block: 4096   directory
Device: 811h/2065d  Inode: 5817025     Links: 2
Access: (0775/drwxrwxr-x)  Uid: ( 1000/     oli)   Gid: ( 1000/     oli)
Access: 2016-02-16 10:49:15.467375905 +0000
Modify: 2016-02-16 10:49:15.467375905 +0000
Change: 2016-02-16 10:49:15.467375905 +0000
 Birth: -
89
Oli

Hinweis: "Ich habe den Eigentümer des Skripts als root festgelegt" führt nichts aus. auch wenn Sie das setuid-Bit gesetzt haben funktioniert immer noch nicht


Angenommen, Sie führen das Skript tatsächlich als Root aus, können Sie jedoch Sudo verwenden. su dient hauptsächlich zum Wechseln von Benutzern, während Sudo zum Ausführen von Befehlen als andere Benutzer dient. Mit dem Flag -u Können Sie angeben, welcher Benutzer den Befehl ausführen soll:

Sudo -u hudson command
58
Michael Mrozek