A execução de um script como usuário e a atualização das permissões para o root provavelmente é uma má ideia. Uma solução melhor seria executar o script como root e fazer o downgrade de suas permissões conforme necessário:
#!/bin/sh
UN=user
whoami
sudo -u $UN whoami
Quando executado como root (assumindo que user
é um usuário válido), a saída deve ser esta:
root
user
No entanto, se você realmente quiser ter um script executado como usuário e conseguir executar comandos como root, existem duas opções que eu conheço.
-
Use o sudo com a senha armazenada:
#!/bin/sh
whoami
sudo -S -p "" whoami <<EOF
mysuperpassword
EOF
Qual será a saída (quando executado como 'usuário'):
user
root
-
Use o sudo sem senha.
Adicione uma lista dos comandos que você deseja executar no arquivo /etc/sudoers
executando visudo
como root. Por exemplo, para permitir que user
execute os comandos apache2ctl
e whoami
, adicione o seguinte:
User_Alias SPECIAL = user
Cmnd_Alias SPECIAL_COMMANDS = /usr/sbin/apache2ctl, /usr/bin/whoami
SPECIAL ALL = NOPASSWD: SPECIAL_COMMANDS
Ou se você realmente confia em user
, se é você por exemplo, você pode permitir que o usuário execute qualquer comando sem uma senha:
user ALL=(ALL) NOPASSWD: ALL
Então, quando o script a seguir for executado por user
:
#!/bin/sh
whoami
sudo whoami
Será produzido:
user
root