it-swarm.it

su options: esegue il comando come un altro utente

Mi chiedevo come eseguire un comando come un altro utente da uno script.

Ho il proprietario dello script impostato come root. Ho anche il seguente comando in esecuzione all'interno dello script per eseguire il comando come utente hudson:

su -c command hudson

È questa la sintassi corretta?

86
garbagecollector

Sì. Ecco il --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

E alcuni test (ho usato Sudo in quanto non conosco la password per l'account nobody)

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

Quando il tuo comando accetta argomenti, devi citarlo. In caso contrario, accadranno cose strane. Eccomi —come root— cercando di creare una directory in/home/oli (come oli) senza citando il comando completo:

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

Viene letto solo mkdir come valore per -c flag e sta tentando di utilizzare /home/oli/Java come nome utente. Se lo citiamo, funziona e basta:

# 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

Nota: "Ho il proprietario dello script impostato come root" non fa nulla; anche se hai impostato il bit setuid continua a non funzionare


Supponendo che tu stia effettivamente eseguendo lo script come root, tuttavia, puoi usare Sudo. su è principalmente per cambiare utente, mentre Sudo è per eseguire comandi come altri utenti. Il -u flag ti consente di specificare quale utente eseguire il comando come:

Sudo -u hudson command
58
Michael Mrozek