Executa parte de um script bash como um usuário diferente

28

Existe uma maneira de fazer parte de um script ser executado como um usuário diferente (não raiz)? Se ajudar, a parte a ser executada como um usuário diferente ocorre no final do script

Editar:
SO - > Ubuntu 9.04

    
por Manish Mathai 09.01.2010 / 05:46

6 respostas

32

Use o comando sudo no script.

No formulário:

sudo -u username command

o comando sudo executa o comando como o usuário nome de usuário .

Se o script estiver sendo executado como root, não acho que ele solicitará uma senha. Caso contrário, este artigo discute como usar sudo com senha em uma linha de comando? , e este artigo discute como usar sudo sem senha?

    
por 09.01.2010 / 05:53
6

Esta resposta é boa, mas o conselho do servidor é um pouco perigoso - permitiria que qualquer pessoa executasse qualquer coisa como root! Então estou postando aqui porque não posso formatar o comentário.

Eu recomendaria o uso do visudo para fornecer as permissões necessárias com a maior precisão possível. Digite visudo e adicione uma linha como:

username hostname = NOPASSWD: /full/path/to/command1, full/path/to/command2

Se você precisar executar a mesma coisa em muitos hosts, poderá abri-lo com:

username ALL = NOPASSWD: /full/path/to/command1, full/path/to/command2

Mas eu não ** usaria:

username ALL=(ALL) NOPASSWD: ALL

ou     nome de usuário hostname = ALL

A página man do sudoer tem muitos detalhes sangrentos

    
por 09.01.2010 / 07:33
5

# I = como:

#test if running bash as a different user works
sudo -u nobody bash -c : && RUNAS="sudo -u nobody"

echo 1: $USER

#Runs bash with commands between '_' as nobody if possible
$RUNAS bash<<_
echo 2: \$USER
_

echo 3: $USER

# ./run

1: root
2: nobody
3: root
    
por 28.03.2013 / 19:38
4

Para sonarqube:

sudo -u sonar /usr/bin/sonar start

em que sonar - nome do usuário que executa o comando /usr/bin/sonar start

    
por 08.10.2013 / 09:53
2

não tem tanta certeza, mas se você quiser SOMENTE o final desse script será executado como um usuário diferente, você pode adicionar su someuser antes do final do script.

Estou sentindo falta de algo?

Espero que ajude,

Atenciosamente

    
por 09.01.2010 / 22:37
1

Desta forma, o final de um script será executado por um usuário diferente (root). Observe as chamadas $[LINENO+2] e exit $? . Eles são necessários para que o fim do script seja executado apenas uma vez e preservar o código de saída da chamada sudo .

#!/bin/bash                                                                                                                                                                                                                                  
echo $USER                                                                                                                                                                                                                                      

# pipe the rest of this script via a sudo call                                                                                                                                                                                                                                         
tail -n +$[LINENO+2] $0 | exec sudo bash                                                                                                                                                                                                     
exit $?                                                                                                                                                                                                                                     
echo $USER
exit 1
    
por 29.11.2013 / 15:07

Tags