su significasse super user (super usuário), mas isso foi só pela preguiça de dar uma olhadinha no manual. Na verdade, su vem da própria descrição da finalidade do comando, que é executar algo como um usuário substituto, ou seja, "substituir usuário", sendo o usuário root, o "super usuário", apenas o usuário padrão do comando quando não especificamos nenhum outro.
Pode parecer bobagem, um mero detalhe, mas essa definição muda toda a compreensão de como o comando se comporta. O aspecto mais importante a observar quando usamos o
su, é que ele sempre irá alterar varáveis de ambiente, especialmente essas quatro:
HOME    - Caminho da pasta do usuário
SHELL   - Shell utilizado pelo usuário
USER    - Nome do usuário
LOGNAME - Nome do usuário que fez o login
Para entendermos melhor, observe a saída do comando abaixo:
Estes são os valores armazenados nessas variáveis para o meu usuário. Mas, se executarmos o comando
su sem argumentos, o resultado será esse:
Observe que a variável
HOME agora contém o caminho da pasta /root, mas USER e LOGNAME não foram alterados. No entanto, é o usuário root que está no cntrole agora, o que pode ser confirmado com o comando whoami...
Outro detalhe aqui, é que a varável
HOME mudou, mas o diretório corrente ainda é o meu (/home/gda). Isso pode causar grandes confusões, porque o usuário de fato é o root, mas quase todas as varáveis de ambiente permanecem as mesmas. Se um arquivo for criado neste momento, por exemplo, ele irá pertencer ao root, e não ao usuário que invocou o comando.Para evitar isso, nós temos a opção de utilizar o comando
su com o argumento --login (-l ou -)
Desta forma, todas as variáveis de ambiente mudaram. Observe que até o meu prompt (definido pela variável
PS1) mudou de cor, já que não estou mais utilizando as minhas variáveis, e sim as do usuário root.
E o comando "sudo"?
Bom, osudo, embora tenha uma finalidade bem diferente, a sua compreensão passa pelo mesmo caminho: substitute user and do (substitua o usuário e faça). Mas, o que acontece quando executamos o comando sudo su, como é visto em muitos tutoriais de Linux por aí? O resultado está na imagem abaixo:
Observe que tudo indica que, de fato, é o
root que está no controle, todas as quatro varáveis principais foram trocadas, porém... Observe o prompt. Apesar da cerquilha (#) estar presente, ele continua verde, que é a cor definida para a varável PS1 no meu usuário. Isso significa que, fora as que aparecem na imagem, existem outras variáveis de ambiente que permaneceram inalteradas.
Isso é bom ou ruim?
"Não sei se é bom ou ruim, só sei que é assim."De fato, não se trata de ser bom ou ruim, mas de compreender o que acontece com cada forma de executar um comando. Nas três situações,
su, su -l e sudo su, existe o resultado prático de estarmos utilizando os poderes de super usuário do root, o que muda são os detalhes de que devemos estar conscientes. Por exemplo, os comandos
su e sudo su não irão mudar de diretório, permanecendo onde estavam quando foram invocados. Já com o argumento -l, ele irá automaticamente para a pasta /root e, se a gente não estiver ciente disso (ou utilizar esses prompts bonitinhos da moda que quase não informam nada), acidentes podem acontecer. 





 
Nenhum comentário:
Postar um comentário
O sistema de comentários do Blogspot é um lixo e praticamente me obriga a liberar ou moderar todos os comentários. Portanto, eu peço perdão antecipadamente caso o seu comentário demore para aparecer.
Mas não se acanhe por causa disso! :-)