Qual é a diferença entre sudo -i e sudo su -

Respostas:

30

Eles podem fornecer funcionalmente quase a mesma coisa, mas parece que 'sudo -i' é mais leve e mantém algumas referências práticas no seu ambiente.

Você pode ver os processos extras olhando para 'ps auxf' (f fornece uma visão da floresta)

sudo -i produz essa árvore de processos

jkrauska  4480  0.0  0.0  76828  1656 ?        S    23:38   0:00  |   \_ sshd: jkrauska@pts/0
jkrauska  4482  0.0  0.0  21008  3816 pts/0    Ss   23:38   0:00  |       \_ -bash
root      4675  0.6  0.0  19512  2260 pts/0    S+   23:42   0:00  |           \_ -bash

sudo su - produz essa árvore de processos

jkrauska  4480  0.0  0.0  76828  1656 ?        S    23:38   0:00  |   \_ sshd: jkrauska@pts/0
jkrauska  4482  0.0  0.0  21008  3816 pts/0    Ss   23:38   0:00  |       \_ -bash
root      4687  0.5  0.0  43256  1488 pts/0    S    23:42   0:00  |           \_ su -
root      4688  0.5  0.0  19508  2252 pts/0    S+   23:42   0:00  |               \_ -su

Observe que eles estão iniciando no mesmo processo bash pid, 4482, mas esse su - parece gerar outra etapa.)

Seu primeiro 'sudo' já está elevando seu nível de acesso à raiz. Executar su sem especificar um nome de usuário dentro do sudo altera o usuário atual para fazer root duas vezes.

Outra maneira de investigar isso é executando os dois comandos com strace -f.

strace -f -o sudoi sudo -i

vs

strace -f -o sudosu sudo su -

Se você diferenciar esses dois traços, verá mais exeve sendo executado pelo sudo su -.

Mais uma coisa.

O sudo -i mantém as variáveis ​​de ambiente extras definidas pelo SUDO.

SUDO_USER=jkrauska
SUDO_UID=1000
SUDO_COMMAND=/bin/bash
SUDO_GID=1000

sudo su-clobbers essas variáveis.

Joel K
fonte
Obrigado, votei em você como a resposta correta. Mais uma pergunta, então não faz sudo su -sentido?
Howard
Se você quisesse refutar as referências anteriores do SUDO, isso poderia ser útil. Portanto, não faz sentido nesse caso.
Joel K
Também existem grandes diferenças no tratamento de argumentos, no tratamento de variáveis ​​de ambiente e na segurança ao se tornar um usuário não raiz. Veja o que eu adicionei aqui: serverfault.com/q/601140/102814
Craig Ringer
1

Resposta: Não, eles não são os mesmos.

Resposta longa: sudo e su - são programas diferentes que realizam a mesma tarefa, elevando você a privilégios de root.

su costumava ser a maneira de fato de se tornar root nos sistemas Linux. No entanto, sempre houve a necessidade de separar privilégios e deixar algumas informações de auditoria para trás. Além disso, quando você faz su - tudo o que faz é feito como raiz e é perigoso ter tanto poder. Aqui é onde o sudo veio em socorro.

O sudo tem algumas características que o su não possui. O elemento chave no sudo é a capacidade de executar o comando "one" como root e, em seguida, largar privilégios para o usuário normal. Exemplo: Remova um arquivo pertencente à raiz.

sudo rm /root/someFile

Este comando apagará o arquivo porque o sudo o elevará para o root sempre que você usar o comando sudo antes de outro comando. O próximo comando que você executou será executado como um usuário normal (a menos que você acrescente o comando sudo no início). Isso permite realizar tarefas administrativas e eliminar privilégios imediatamente, ajudando a evitar condições perigosas.

O sudo também oferece outros benefícios, como restringir o conjunto de programas que um usuário pode executar, os comandos de logs executados no sudo e outras coisas. Para mais informações, sudo em poucas palavras

Quando você faz su - ou sudo -i, você faz a mesma coisa. Isso está se tornando raiz, mas lembre-se de que su e sudo são completamente diferentes e fornecem ferramentas diferentes como administrador do sistema. Pessoalmente, NUNCA corro su - e minha política de pam proíbe , permitindo que ninguém o corra. Nos meus sistemas, você sempre deve usar o sudo causa dos benefícios adicionais.

Mais informações: Usando e habilitando o sudo

Termiux
fonte
suTambém é possível executar apenas um único comando:su -c 'command ...'
Elias Kagan
A pergunta era sobre a diferença entre sudo -ie sudo su -, não entre sudoe su.
Alessio Gaeta