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

17

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 chili555 10.08.2013 / 22:45

3 respostas

13

O comando sudo su 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 senhas do usuário de destino como um shell de login. Isso significa que 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 por meio da opção -c do shell. Se nenhum comando for especificado, um shell interativo será executado.

Fonte: ManPage

    
por Mitch 10.08.2013 / 23:01
13

sudo su apenas altera o usuário atual para root. Configurações de ambiente (como PATH) permanecem as mesmas.

sudo -i cria um ambiente novo como se o root tivesse acabado de se conectar.

A diferença é mais notável se você usar outros usuários. Depois de sudo su bob você será bob, mas no mesmo lugar. Depois de sudo -i -u bob você será bob, no diretório pessoal de bob, com o shell padrão de bob e com% bob_de% de bob e todos os outros scripts de login executados.

Veja .profile para mais detalhes sobre o que man sudo faz. Infelizmente, -i é leve em detalhes.

Encontrou uma versão do man su (do login-1: 4.1.4.2 + svn3283-3ubuntu5.1) que tem o seguinte para dizer:

% bl0ck_qu0te%

Assim, e em que medida man su altera o ambiente depende da sua distribuição e configuração. Assim, sudo su é teoricamente mais portável.

    
por OrangeDog 11.08.2013 / 00:02
6

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

Usando sudo su , o 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 shells

Continua a observar que raramente é necessário criar um shell de root.

    
por guntbert 10.08.2013 / 22:59