Por que um prefere o outro neste exemplo?
sudo su
echo "options iwlwifi 11n_disable=1" >> /etc/modprobe.d/iwlwifi.conf
exit
Por favor, forneça links para a documentação do Ubuntu.
Por que um prefere o outro neste exemplo?
sudo su
echo "options iwlwifi 11n_disable=1" >> /etc/modprobe.d/iwlwifi.conf
exit
Por favor, forneça links para a documentação do Ubuntu.
Respostas:
O sudo su
comando significa "alternar usuário" e permite que você se torne outro usuário. Ele permite que um usuário permitido execute um comando como superusuário ou outro usuário, conforme especificado no arquivo sudoers.
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 ou .login, serão lidos pelo shell. Se um comando for especificado, ele será passado para o shell para execução através da opção –c do shell. Se nenhum comando for especificado, um shell interativo será executado.
Fonte: ManPage
sudo su
será solicitada sua senha, não a senha root. O usuário root nem precisa ter uma senha. Independentemente disso, se um administrador estiver usando a senha root, isso não implica que todos os usuários comuns a conheçam.
sudo
é executado su
como root e o root pode su
para qualquer usuário sem saber sua senha. Mal-entendidos fundamentais sobre como o sistema funciona merecem uma OMI com voto negativo.
sudo -i
também não solicitará a senha do root, portanto não é relevante para a pergunta.
sudo su
altera apenas o usuário atual para root. As configurações do ambiente (como PATH) permanecem as mesmas.
sudo -i
cria um ambiente novo como se o root tivesse acabado de fazer login.
A diferença é mais perceptível se você usar outros usuários. Depois sudo su bob
você será bob, mas no mesmo lugar. Depois que sudo -i -u bob
você for bob, no diretório inicial de bob, com o shell padrão de bob e com bob .profile
e qualquer outro script de login sendo executado.
Veja man sudo
para mais detalhes do que -i
faz. Infelizmente, man su
é leve nos detalhes.
Encontrou uma versão do man su
(do login-1: 4.1.4.2 + svn3283-3ubuntu5.1) que tem o seguinte a dizer:
$ PATH é redefinido de acordo com as opções /etc/login.defs ENV_PATH ou ENV_SUPATH (veja abaixo);
$ IFS redefinir para "<espaço> <guia> <nova linha>", se estiver definido.
Observe que o comportamento padrão para o ambiente é o seguinte:
As variáveis de ambiente $ HOME, $ SHELL, $ USER, $ LOGNAME, $ PATH e $ IFS são redefinidas.
Se --login não for usado, o ambiente será copiado, exceto pelas variáveis acima.
Se --login for usado, as variáveis de ambiente $ TERM, $ COLORTERM, $ DISPLAY e $ XAUTHORITY serão copiadas se estiverem definidas.
Outros ambientes podem ser configurados pelos módulos PAM.
Portanto, se e até que ponto sudo su
o ambiente muda, depende da sua distribuição e configuração. Assim, sudo -i
teoricamente, é mais portátil.
su
faz configurações de ambiente de mudança, e pode ser usado para simular um login usando -
ou -l
. Mesmo sem -l
, $PATH
é alterado. Teste essas afirmações antes de fazê-las! (Você quis dizer que PWD
permanece o mesmo?)
sudo su -
e sudo -i
?
$PATH
é alterado quando uso su
sem sudo
(usando a senha root). De acordo com info su
(que pode ser uma coisa melhor para vincular na sua resposta), de su
fato, lê a entrada de senha do usuário que você está se tornando. Possivelmente a $PATH
mudança que estou observando depende do sistema (estou no Debian 7).
man su
(que é mais longo que o que você vinculou) diz que faz parte shadow-utils 4.1.5.1
. Minha man
página também diz que $PATH
está definido mesmo que --preserve-environment
seja usado. Então eu acho que é apenas uma diferença entre diferentes versões do su
.
/etc/pam.d/sudo
e /etc/pam.d/su
pode ser configurado para fazer coisas completamente diferentes ou exatamente as mesmas.
O principal problema é uma das (não tão) configurações do ambiente são.
O uso sudo su
do novo shell obtém seu ambiente do usuário que emite o comando - o que pode ser problemático.
Com sudo -i
você obtém um shell raiz limpo.
Veja notas especiais sobre sudo e conchas
Resta observar que raramente é necessário criar um shell raiz.
sudo -i
são semelhantes às sudo su -
que na verdade não obtêm seu ambiente do usuário que emite o comando.
sudo su
vs. sudo -i
.