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
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
Respostas:
Use o comando sudo no script.
Na forma:
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 o sudo com senha em uma linha de comando? , e este artigo descreve como usar o sudo sem senha?
chmod +x script.sh
e depois é sósudo -u username script.sh
i
opção se você deseja adquirir o ambiente do usuário
Esta resposta é boa, mas o aviso de falha no servidor é um pouco perigoso - permitiria que qualquer um executasse algo como root! Estou postando aqui porque não consigo formatar o comentário.
Eu recomendaria o uso do visudo para fornecer as permissões necessárias da maneira mais precisa 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 de manual do sudoer tem muitos detalhes sangrentos
username
pelo nome de usuário que deve poder executar o comando). Se o executável que você deseja executar for executável apenas por um usuário em particular, tudo bem - basta passar esse nome de usuário na sudo -u username commandline
linha do script.
# I = gosto:
#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
# ./corre
1: root
2: nobody
3: root
não tem tanta certeza disso, mas se você deseja que APENAS o final desse script seja executado como um usuário diferente, você pode adicionar su someuser
antes do final do script.
Estou esquecendo de algo?
Espero que ajude,
Saudações
Dessa forma, o final de um script será executado por um usuário diferente (root). Observe as chamadas $[LINENO+2]
e exit $?
. Isso é necessário para que o final do script seja executado apenas uma vez e para preservar o código de saída da sudo
chamada.
#!/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