Como você afirmou em sua pergunta, a principal diferença é o meio ambiente.
sudo su -
vs. sudo -i
No caso sudo su -
, é um shell de login, portanto /etc/profile
, .profile
e .bashrc
é executado e você se encontrará no diretório inicial do root com o ambiente do root.
sudo -i
é quase o mesmo que sudo su -
A opção -i
(simular login inicial) executa o shell especificado pela entrada do banco de dados de senha do usuário de destino como um shell de login. Isso significa que os arquivos de recursos específicos de login, como .profile
, .bashrc
ou .login
serão lidos e executados pelo shell.
sudo su
vs. sudo -s
sudo su
chama sudo
com o comando su
. O Bash é chamado como shell interativo sem logon. Então, bash
apenas executa .bashrc
. Você pode ver que, depois de mudar para o root, você ainda está no mesmo diretório:
user@host:~$ sudo su
root@host:/home/user#
sudo -s
lê a $SHELL
variável e executa o conteúdo. Se $SHELL
contiver /bin/bash
a chamada sudo /bin/bash
, o que significa que /bin/bash
é iniciado como um shell que não é de login, portanto, todos os arquivos de ponto não são executados, mas bash
ele próprio lê. bashrc
do usuário que está chamando. Seu ambiente permanece o mesmo. Sua casa não será a casa da raiz. Então você é root, mas no ambiente do usuário que está chamando.
Conclusão
O -i
sinalizador foi adicionado sudo
em 2004 , para fornecer uma função semelhante ao sudo su -
, assim sudo su -
como o modelo para sudo -i
e deveria funcionar como ele. Eu acho que realmente não importa qual você usa, a menos que o ambiente não seja importante.
Adição
Um ponto básico que deve ser mencionado aqui é que sudo
foi projetado para executar apenas um único comando com privilégios mais altos e, em seguida, soltar esses privilégios nos originais. Nunca foi feito para realmente mudar o usuário e deixar um shell raiz aberto. Ao longo do tempo, sudo
foi ampliado com esses mecanismos, porque as pessoas ficaram irritadas com o porquê de usar sudo
na frente de cada comando.
Então o significado de sudo
foi abusado. sudo
foi criado para incentivar o usuário a minimizar o uso de privilégios de root.
O que temos agora é que sudo
se torna cada vez mais popular. Está integrado em quase todas as distribuições Linux conhecidas. A ferramenta original para mudar para outra conta de usuário é su
. Para um veterano da velha escola * nix, algo como isso sudo
pode parecer desnecessário. Ele adiciona complexidade e se comporta mais provavelmente aos mecanismos que conhecemos da família OS da Microsofts e, portanto, contraria a filosofia de simplicidade dos sistemas * nix.
Eu não sou realmente um veterano, mas também na minha opinião sudo
sempre foi um espinho do meu lado, a partir do momento em que foi introduzido e sempre trabalhei em torno do uso sudo
, se possível. Eu sou muito relutante em usar sudo
. Em todos os meus sistemas, a conta root está ativada. Mas as coisas mudam, talvez chegue a hora, quando su
será preterido e será sudo
substituído su
completamente.
Portanto, acho que será melhor usar sudo
os mecanismos internos ( -s
, -i
) em vez de confiar em uma ferramenta antiga como su
.
ubuntu
que impedem os usuários do padrãosu -
. Eles criaram um problema e agora há discussões intermináveis sobre como resolvê-lo.