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, .profilee .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, .bashrcou .loginserão lidos e executados pelo shell.
sudo su vs. sudo -s
sudo suchama sudocom o comando su. O Bash é chamado como shell interativo sem logon. Então, bashapenas 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 -slê a $SHELLvariável e executa o conteúdo. Se $SHELLcontiver /bin/basha 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 bashele próprio lê. bashrcdo 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 -isinalizador foi adicionado sudoem 2004 , para fornecer uma função semelhante ao sudo su -, assim sudo su -como o modelo para sudo -ie 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 sudofoi 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, sudofoi ampliado com esses mecanismos, porque as pessoas ficaram irritadas com o porquê de usar sudona frente de cada comando.
Então o significado de sudofoi abusado. sudofoi criado para incentivar o usuário a minimizar o uso de privilégios de root.
O que temos agora é que sudose 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 sudopode 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 sudosempre 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 suserá preterido e será sudosubstituído sucompletamente.
Portanto, acho que será melhor usar sudoos mecanismos internos ( -s, -i) em vez de confiar em uma ferramenta antiga como su.
ubuntuque impedem os usuários do padrãosu -. Eles criaram um problema e agora há discussões intermináveis sobre como resolvê-lo.