sudo su “nome de usuário” vs. su “nome de usuário”

5

Por favor, me explique qual é a diferença entre: sudo su "nome de usuário" vs. su "nome de usuário"

Qual tem privilégios mais altos? Se eu logar na raiz com sudo su "username" , eu sou root para um comando apenas? Então pode ser que o começo do script funcione bem, mas o resto não funciona? Então, neste caso, é sugerido su "username" , porque ele tem privilégios mais altos? Por favor, me explique a diferença entre os 2 comandos, obrigado.

    
por Peter 24.10.2014 / 18:32

1 resposta

9

Aqui estão as diferenças:

  • su <someuser> inicia um shell para o usuário someuser . A menos que você seja root, será solicitada a senha para someuser .
  • su (sem nome de usuário) inicia um shell para o usuário root (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> executa su com privilégios de root. Por isso, não pede a senha de someuser . 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.
por 24.10.2014 / 18:53

Tags