Como executar o script como outro usuário sem senha?

145

Eu tenho o script.sh que deve ser executado como usuário2. No entanto, esse script pode ser executado apenas em user1 no meu aplicativo.

Eu gostaria que o seguinte comando fosse executado:

su user2 -C script.sh

mas seja capaz de executar sem senha.

Também quero que isso seja muito restritivo, pois no user1 só é possível executar o script.sh no user2 e nada mais.

Eu tentei fazer isso com o arquivo sudoers e fiquei confuso sem parar depois de horas tentando.

Se alguém puder fornecer um exemplo explícito de como isso pode ser realizado (em vez de algo genérico como usar sudoers), isso seria muito apreciado.

user788171
fonte
15
Eu não particularmente com o fim. Esta é uma pergunta sobre como programar o sistema de uma maneira específica; como tal, trata-se de programação de shell e está dentro do escopo do SO, que é para perguntas sobre programação. É claro que várias pessoas não vêem isso tão fora de tópico que deve ser votado em baixa; a pergunta e as respostas têm um número considerável de votos positivos.
precisa

Respostas:

121

Ligue visudoe adicione isto:

user1 ALL=(user2) NOPASSWD: /home/user2/bin/test.sh

Os caminhos do comando devem ser absolutos ! Então chame sudo -u user2 /home/user2/bin/test.shde uma user1concha. Feito.

piroscópio
fonte
3
Há uma boa descrição do formato sudoers na ajuda do Ubuntu. A página de manual para sudoers é feia :(
Mifeet
então, como essa escala seria executada para todos os usuários como user2, em vez de apenas user1?
jiggunjer
193

tente executar:

su -c "Your command right here" -s /bin/sh username

Isso executará o comando como nome de usuário, desde que você tenha permissões para sudo como esse usuário.

Jeronimo Robles
fonte
17
Ele trabalhou como usuário normal com direitos sudo cheios como este:sudo su -c "Your command right here" -s /bin/sh otheruser
rubo77
5
Apenas uma nota para todos os usuários de Mac, aparentemente, a sintaxe é um pouco diferente: su username -c "command".
NHDaly
1
Se você está tentando iniciar screencomo outro usuário, isso pode ser útil - linuxquestions.org/questions/linux-software-2/…
Mint
2
se username(ou na pergunta user2) tiver uma senha, isso não permitirá ignorar a solicitação. a outra resposta: não é necessária senha, tanto user1 quanto user2.
phil294
1
`su -c "Your command right here" -s /bin/sh username`

O comando acima está correto, mas no Red Hat, se o selinux estiver aplicando, não permitirá que o cron execute scripts como outro usuário. exemplo; execl: couldn't exec /bin/sh execl: Permission denied

Eu tive que instalar o setroubleshoot e setools e execute o seguinte para permitir:

yum install setroubleshoot setools
sealert -a /var/log/audit/audit.log
grep crond /var/log/audit/audit.log | audit2allow -M mypol
semodule -i mypol.p
C Jaskoski
fonte