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! :-)