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 raiz. Também tenho o seguinte comando sendo executado no script para executar o comando como o usuário hudson:
su -c command hudson
Essa é a sintaxe correta?
sudo cat /etc/passwd | grep user-abc
. Se vocêuser-abc:x:994:994::/home/user-abc:/bin/false
vir algo assim: não funcionará. Isso porque a última parte "/bin/false
" significa que não há shell para esse usuário.Respostas:
Sim. Aqui está o
--help
:E alguns testes (usei
sudo
como não sei a senha danobody
conta)Quando seu comando recebe argumentos, você precisa citá-lo. Caso contrário, coisas estranhas ocorrerão. Aqui estou eu - como root - tentando criar um diretório em / home / oli (como oli) sem citar o comando completo:
Ele é lido apenas
mkdir
como o valor do-c
sinalizador e está tentando usar/home/oli/java
como nome de usuário. Se citamos, simplesmente funciona:fonte
Nota: "Eu tenho o proprietário do script definido como raiz" não faz nada; mesmo se você tiver definido o bit setuid, ele ainda não funcionará
Supondo que você esteja executando o script como root, no entanto, você pode usá-lo
sudo
.su
é principalmente para alternar usuários, enquantosudo
para executar comandos como outros usuários. O-u
sinalizador permite especificar qual usuário executar o comando como:fonte
sudo
você pode simplesmente obter este:root is not in the sudoers file
. O que tornasu - <username> -c "command to run"
a única opção.sudo -u kilgore mv this that
)