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

19

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.

chili555
fonte
Por favor, reconsidere sua escolha de respostas "aceitas". O menos votado é, na verdade, o único correto.
Kyle Strand

Respostas:

15

O sudo sucomando 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

Mitch
fonte
1
"O uso de su cria um problema de segurança e é essencialmente perigoso." O que?
Pare de prejudicar Monica
1
Se você executar, sudo suserá 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.
parar de prejudicar Monica
2
Não, não vai. sudoé executado sucomo root e o root pode supara qualquer usuário sem saber sua senha. Mal-entendidos fundamentais sobre como o sistema funciona merecem uma OMI com voto negativo.
Pare de prejudicar Monica
3
E excluir seus comentários apenas aumenta a confusão.
Pare de prejudicar Monica
1
Você não está melhorando muito. sudo -itambém não solicitará a senha do root, portanto não é relevante para a pergunta.
parar de prejudicar Monica
14

sudo sualtera 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 bobvocê será bob, mas no mesmo lugar. Depois que sudo -i -u bobvocê for bob, no diretório inicial de bob, com o shell padrão de bob e com bob .profilee qualquer outro script de login sendo executado.

Veja man sudopara mais detalhes do que -ifaz. 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 suo ambiente muda, depende da sua distribuição e configuração. Assim, sudo -iteoricamente, é mais portátil.

Pare de prejudicar Monica
fonte
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 PWDpermanece o mesmo?)
Kyle Strand
A verdadeira questão é: existe uma diferença entre sudo su -e sudo -i?
Kyle Strand
1
Você está claramente refletindo sobre isso e realmente fazendo alguns testes no shell, então peço desculpas pelo meu comentário "teste essas reivindicações". Dito isto, no meu sistema, observo que isso $PATHé alterado quando uso susem sudo(usando a senha root). De acordo com info su(que pode ser uma coisa melhor para vincular na sua resposta), de sufato, lê a entrada de senha do usuário que você está se tornando. Possivelmente a $PATHmudança que estou observando depende do sistema (estou no Debian 7).
Kyle Strand
1
Hummm. Meu man su(que é mais longo que o que você vinculou) diz que faz parte shadow-utils 4.1.5.1. Minha manpágina também diz que $PATHestá definido mesmo que --preserve-environmentseja usado. Então eu acho que é apenas uma diferença entre diferentes versões do su.
Kyle Strand
1
O comportamento também é afetado pela sua configuração do PAM. /etc/pam.d/sudoe /etc/pam.d/supode ser configurado para fazer coisas completamente diferentes ou exatamente as mesmas.
Pare de prejudicar Monica
7

O principal problema é uma das (não tão) configurações do ambiente são.

O uso sudo sudo novo shell obtém seu ambiente do usuário que emite o comando - o que pode ser problemático.

Com sudo -ivocê obtém um shell raiz limpo.

Veja notas especiais sobre sudo e conchas

Resta observar que raramente é necessário criar um shell raiz.

Guntbert
fonte
As "notas especiais" que você vincula para dizer que sudo -isão semelhantes às sudo su -que na verdade não obtêm seu ambiente do usuário que emite o comando.
Kyle Strand
@KyleStrand thx para apontar isto - era um erro de digitação, a questão é realmente sobre sudo suvs. sudo -i.
guntbert