Respostas:
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.
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
su
Também é possível executar apenas um único comando:su -c 'command ...'
sudo -i
e sudo su -
, não entre sudo
e su
.
sudo su -
sentido?