su opções - executando o comando como outro usuário

54

Eu queria saber como executar um comando como outro usuário a partir de um script.

Eu tenho o proprietário do script definido como root. Eu também tenho o seguinte comando sendo executado dentro do script para executar o comando como o usuário hudson:

su -c command hudson

Esta é a sintaxe correta?

    
por garbagecollector 23.08.2010 / 17:42

2 respostas

61

Sim. Aqui está o --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 alguns testes (usei sudo porque não sei a senha da conta nobody )

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

Quando seu comando recebe argumentos, é necessário citá-lo. Se você não fizer isso, coisas estranhas ocorrerão. Aqui estou - como root - tentando criar um diretório em / home / oli (como oli) sem citando o comando completo:

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

Ele só lê mkdir como valor do sinal -c e está tentando usar /home/oli/java como o nome de usuário. Se citarmos, isso simplesmente funciona:

# 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: -
    
por 23.08.2010 / 17:46
36

Nota: "Eu tenho o proprietário do script definido como root" não faz nada; mesmo que você tenha o bit setuid definido, ainda não funciona

Supondo que você esteja realmente executando o script como root, no entanto, você pode usar sudo . su é principalmente para trocar usuários, enquanto sudo é para executar comandos como outros usuários. O -u flag permite que você especifique qual usuário executará o comando como:

sudo -u hudson command
    
por 23.08.2010 / 18:06