O comando su – substituição de usuários no Linux
Comando su
O comando su (“substitute user”) permite alterar o proprietário de uma sessão de login sem que o usuário atual tenha de efetuar logout do sistema.
O comando su permite mudar o proprietário de uma sessão para qualquer usuário, mas é geralmente usado para mudar de um usuário comum para o usuário root, fornecendo assim acesso a todos os comandos e arquivos do computador.
Usando o comando su evitamos a necessidade de usar o sistema como usuário root o tempo todo, de modo que há uma grande diminuição no risco associado a essa prática, pois ao nos logarmos como usuário comum, que possui diversas restrições de privilégios, o potencial de danos acidentais ou maliciosos diminui bastante.
Em um sistema multiusuário devemos relegar o uso da conta root, e mesmo do comando su, ao mínimo necessário, principalmente se tivermos acesso à Internet.. Desta forma é muito mias difícil que um software malicioso tenha acesso a arquivos e serviços de sistema críticos, os quais geralmente pertencem ao usuário root.
Quando usamos o comando su no modo de console a sessão original do usuário logado não pode ser usada na mesma máquina simultaneamente – pois a sessão de console ocupa a tela toda (a não ser que uma nova sessão de console seja aberta com Alt + Fn). Porém, ao usarmos o su em uma janela de terminal (emulador), apenas essa janela de terminal – e os programas iniciados a partir dela – serão executados com a nova conta de usuário (ex.: root); todos os demais programas continuarão rodando com a conta do usuário original, incluindo novas janelas de terminal.
Como usar o comando su
Sintaxe
su [opções] [comandos] - [nome_usuário]
A forma mais simples é usando o comando su sem nenhum parâmetro:
$ su
Se não passarmos nenhum parâmetro ao comando su, o sistema assumirá que queremos nos logar como usuário root, como no exemplo acima. Podemos obter o mesmo efeito com o comando su root
Para alterar o proprietário da sessão atual (usuário logado) para outro usuário, simplesmente digite su seguido do nome do novo usuário:
$ su fernanda
Note que em ambos os casos é necessário digitar a senha do usuário que deseja logar-se.
Para encerrar a sessão iniciada com o su e voltar ao usuário original, basta emitir o comando exit:
$ exit
Ou ainda o comando logout (caso tenha usado o su -) ou ainda pressionar as teclas Ctrl + d.
Para confirmarmos que o usuário realmente está logado, ou saiu de sua sessão, podemos emitir o comando whoami:
# whoami
Note que alguns shells, como o bash, trazem essa informação no próprio prompt.
O comando su, por padrão, mantém o diretório atual e as variáveis de ambiente do usuário original, não alterando esses parâmetros para o novo usuário. Note nos exemplos anteriores que, apesar de termos mudado o usuário de fabio para root e também para fernanda, o diretório home que é mostrado no prompt continuou sendo sempre o do usuário que fez login originalmente no sistema – o usuário fábio.
Isso pode ser um problema pois, por exemplo, se um programa residir em um diretório que só é referenciado na variável de ambiente PATH do root, e não na do usuário original (fábio no nosso exemplo), teremos de digitar seu caminho completo, caso contrário o comando não será encontrado.
Veja na figura a seguir como, ao mudarmos o usuário de fabio para root o diretório home continua sendo o do fabio:
Para evitar esse e outros problemas que possam ocorrer por conta desse comportamento padrão do comando su, devemos usar o comando seguido de um espaço e um hífen, como a seguir:
$ su -
Desta forma, o diretório atual é alterado para o diretório home do usuário que se logou com o su (veja que o diretório mudou para /root no exemplo acima), e as variáveis de ambiente são alteradas também para as do novo usuário.
Podemos também digitar o seguinte para obter o mesmo efeito:
$ su - root
ou
$ su - fernanda
Outras opções
O comando su não possui muitas opções, como por exemplo:
-c Executar o programa que é digitado logo após o su na mesma linha, com os privilégios do novo usuário, e voltar imediatamente à conta do usuário original após o término da execução do programa.
Vejamos um exemplo: O usuário fabio tentará executar o comando fdisk -l para ver as partições existentes no sistema – porém ele não tem permissão para usar esse comando. Podemos então usar o su -c para executar esse comando e voltar imediatamente à conta de fabio sem ter de mudar para a conta de root:
Note o uso das aspas em torno do comando passado para exibição, e veja também que após sua execução o prompt mostra que o usuário atual é o fabio.
-l Fornece um ambiente similar ao que o usuário esperaria ver caso tivesse se logado inicialmente no sistema.
O comportamento do comando su pode ser alterado configurando-se algumas opções no arquivo /etc/login.defs. Veremos a configuração desse arquivo em um outro artigo.
Você também pode assistir a um vídeo sobre o assunto no canal do YouTube Bóson Treinamentos:
Até!
Embora pareça, ISSO NÃO É FALHA DE SEGURANÇA. No site do projeto GNU há orientação de como configurar senha no GRUB. Procurem no youtube por “Como impedir que quebrem senha de root do Linux (Colocando senha no GRUB)” usando aspas para achar o certinho. Atentem para o parâmetro –unrestricted, pois sem ele o usuário necessitaria saber a senha do grub para iniciar o sistema (o que invalidaria o método de proteção). Implementar autenticação no GRUB é importante para ambientes em que várias pessoas tem acesso aos desktops como escolas, empresas, bibliotecas, etc. O vídeo citado contem links para tutorial escrito, e o site do GNU com explicação técnica é https://www.gnu.org/software/grub/manual/grub/html_node/Authentication-and-authorisation.html
Perfeito! Nunca tinha visto uma explicação tão completa e clara.
Parabéns e muito obrigado.
Eu que agradeço Giullian!