Aqui estão as diferenças:
-
su <someuser>
inicia um shell para o usuáriosomeuser
. A menos que você seja root, será solicitada a senha parasomeuser
. -
su
(sem nome de usuário) inicia um shell para o usuárioroot
(após solicitar a senha root). -
sudo
pede sua senha e (supondo que você tenha direitos sudo) executa um comando com privilégios de root (sudo reboot
pede sua senha e reinicializa o computador). -
sudo su <somesuer>
executasu
com privilégios de root. Por isso, não pede a senha desomeuser
. No entanto, ele pedirá a senha para verificar seus direitos de sudo. Depois disso, ele iniciará um shell para o usuário someuser .
Em termos de privilégios , não há diferença para o shell que é aberto por sudo su <someuser>
ou por su <someuser>
. Este não é um problema de segurança, pois o processo do shell não pode escalar para os privilégios do processo pai.
Você pode ver a diferença se você observar a árvore de processos. sudo su <someuser>
mostra (assumindo o bash):
+───bash───su───bash
Enquanto su <someuser>
mostra:
+───bash───sudo───su───bash
Sua próxima pergunta provavelmente é como passar uma senha em um script autônomo, que não requer entrada do usuário. Eu acho que existem duas opções:
- Execute o script do cron (ou qualquer variante dele) e execute-o como root
- Execute o script a partir de sua própria conta e use a opção -S do sudo assim:
echo <yourpassword> | sudo -S su -l <someuser>
ou até melhor:echo <yourpassword> | sudo -S su -l <someuser> -c '<somecommand>'
. Certifique-se de que o script só possa ser lido por você mesmo, pois sua senha está nela. Mais indiretamente, você pode armazenar sua senha em um arquivo e enviá-la para o sudo. Então seu script pode ser lido, mas seu arquivo de senha não pode ser.