Por que o sudo é melhor que o sudo su?

27

Eu tenho visto muitos comentários aqui no Ask Ubuntu em relação à preferência em usar sudo -s em vez de sudo su .

Para mim, esses dois comandos fazem exatamente o mesmo. Mas por que sudo -s deveria ser melhor?

    
por fitojb 04.10.2011 / 06:33

4 respostas

26

Acho que sudo -s não é "melhor", é apenas diferente.

sudo -s

mantém seu diretório $ HOME, então quando você inicia programas, eles usam seus arquivos de configuração (e não os de root) etc. Desvantagem: eles também podem alterar a propriedade de seus arquivos no diretório $ HOME, exemplo típico é o .Xauthority file, mas nunca experimentei um problema com isso.

sudo su ou sudo -i

os programas usarão o diretório pessoal da raiz e seus arquivos de configuração. Isso pode ser mais intuitivo, mas também significa que ele não usará qualquer configuração que você tenha configurado (aliases, bash history, ...).

    
por arrange 04.10.2011 / 11:33
13

Porque sudo -s não alterará suas variáveis ​​de ambiente, especialmente $HOME , que permanecerá HOME=/home/USER . Se você usar sudo su , isso mudará para HOME=/root , o que pode ter efeitos colaterais negativos quando os programas iniciados tentarem acessar o diretório pessoal do usuário.

Então, basicamente, é como sudo vs gksudo ao executar programas gráficos.

    
por htorque 04.10.2011 / 10:12
5

Além das diferenças já mencionadas com as variáveis ​​de ambiente, eu acho sudo su bobo e esbanjador porque você está pedindo que sudo execute su como root, e peça para ele executar um shell como root. Por que pedir a um programa que peça a um programa que lhe forneça um shell de root, quando você pode simplesmente ter o primeiro programa dando a você esse shell? Isso importa em algum sentido prático? Não, sou apenas pedante.

    
por psusi 04.10.2011 / 20:26
3

Eu discordaria de outras respostas ao considerar os casos em que você deseja efetuar login como um usuário que não possui um shell. Esse é um caso muito comum com usuários atribuídos a serviços.

Usar "sudo su" iniciará o shell especificado pelo usuário. No entanto, no caso de um usuário atribuído ao processo do servidor, o shell é / usr / bin / false e o log falhará. Em vez disso, você deve entrar como:

sudo -sHu <server-user>

que você vai entrar e cd para o seu caminho de casa, mesmo se o usuário não tiver um shell atribuído

    
por SystematicFrank 09.11.2012 / 13:48