Quando utilizamos o Terminal no Linux, o mais comum é que estejamos conectados a um usuário sem muitos privilégios, e em muitos casos surge a necessidade de utilizar o usuário root. Portanto, utilizamos “sudo” para obter um pouco de mágica, e o problema é que se quisermos utilizá-lo diretamente em sistemas mais modernos, o login root fica desabilitado. Também pode ser simplesmente que precisamos alternar entre diferentes usuários para preservar as permissões de pastas e arquivos cada vez que executamos comandos. Estas etapas se aplicam a qualquer distribuição Linux, incluindo Debian, Ubuntu, Manjaro, etc.
Conteúdo
- Diferentes maneiras de mudar de usuário
- Para sair do usuário
- Como saber quem é meu usuário atual
- Diferenças entre os comandos sudo e su
- Opções de comando su
- Exemplos reais
- Problemas de segurança
Diferentes maneiras de mudar de usuário
Para alterar o usuário você usará o comando su
. A maneira como funciona é simplesmente executar um Shell interativo com o novo usuário como se fosse ele. Também pode ser usado para executar comandos com outro usuário sem trocar de usuário.
Mude de qualquer usuário
Quando já estamos utilizando outro usuário sem tantos privilégios, o ideal é utilizar o comando su
.
Para alterar o usuário root nós executamos.
su root
Mesmo se deixarmos o comando su
sem argumentos, assume-se que o usuário é raiz.
Em seguida, ele nos pedirá a senha do root e iremos acessá-la automaticamente. Não poderia ser mais simples, por exemplo, se esquecermos de selecionar a opção de recuperação desde o início, agora não precisaremos mais reiniciar o computador, basta abrir o terminal e digitar o comando anterior.
Deve-se destacar que funciona com qualquer usuário e não apenas com root.
su usuário
Neste último caso, solicita-nos a senha do “usuário” caso não tenhamos privilégios.
Mude com usuários que tenham privilégios de administrador
O normal é um usuário típico do Ubuntu após sua instalação. Usaremos o seguinte comando caso estejamos usando Ubuntu com um usuário limitado pelo comando sudo, para poder acessar o root:
sudo su -
Para acessar qualquer outro usuário sem usar a senha do outro usuário, em vez de usar a nossa própria senha:
sudo su usuario
Mude o usuário com o diretório atual:
Quando usamos o comando su
de forma simples, o diretório de trabalho atual do Shell será aquele que tínhamos antes de executar o comando e em muitos casos não é o ideal. Por exemplo, se quisermos mudar para o usuário hector
, é mais lógico que também precisaríamos mudar para a casa de hector
em /home/hector
. Temos duas opções.
Alterar diretório automaticamente
Podemos conseguir isso com o comando su
e a opção -
.
su - usuário
As opções -
, -l
e --login
são equivalentes. O que essa opção faz é utilizar o mesmo ambiente como se fosse um login, inclusive utiliza o Shell padrão deste usuário.
Alterar diretório manualmente
Se não conseguirmos memorizar a opção --login
, podemos fazê-lo manualmente.
su usuário
cd ~
Execute o comando com outro usuário
Para executar um comando com um usuário diferente do terminal, usamos a opção --command
do comando su
.
su usuário --command="echo 'OK'"
Deve-se esclarecer que o ideal é escapar dos caracteres necessários para não interferirem, isso se deve à forma como as aspas funcionam nos Shell. Também recomendo especificar o Shell a ser usado com a opção --shell
para evitar problemas de sintaxe. Por exemplo, no Manjaro o Shell padrão é ZSH e quando executamos um comando tão simples como wget https://example.com/ download?file
dará erro porque alguns caracteres como o ponto de interrogação ?
, que precisam ser escapados com uma diagonal. Pelo contrário, se simplesmente usarmos o bash, já sabemos como vai se comportar e que não, não preciso escapar de tantos caracteres.
su usuário --shell=bash --command="echo 'OK'"
Execute o script com outro usuário
A mesma opção --command
é usada, mas especificamos o Shell diretamente. Não é necessário usar a opção --login
, mas recomendo para as variáveis de ambiente.
su - usuário --command="/usr/bin/bash /home/usuário/script.sh"
Mude para root com inicialização em “Modo de recuperação” ou “Recovery mode”
Em primeiro lugar, no caso do “root”, não podemos esquecer que podemos entrar no modo de recuperação. Normalmente é a segunda opção ao iniciar no menu de inicialização, por isso entramos diretamente como “root”.
Para sair do usuário
Para retornar ao usuário principal basta usar o comando exit
.
exit
Basta ter cuidado, ao utilizar uma conexão SSH, para não executá-la com nosso usuário principal, pois a conexão será fechada.
Como saber quem é meu usuário atual
Resolvi compartilhar isso porque com minha pouca experiência em Linux percebi que usar root é muito necessário, e depois de alguns meses descobri que era possível com muita facilidade sem o uso do “sudo”. Também no caso de gerenciar vários usuários, como quando se executam várias instalações de páginas da web no mesmo servidor.
Para descobrir qual usuário estamos usando atualmente, executamos o comando whoami
e ele aparecerá. Também podemos saber qual usuário estamos usando verificando o prompt do terminal, logo antes da arroba, o formato é usuário no sistema, mas em alguns sistemas pode ser muito personalizado e não o exibis.
Diferenças entre os comandos sudo e su
sudo
executa apenas um comando com privilégios de root
, ele não altera o Shell interativamente. É limitado a usuários com privilégios de administrador ou membros do grupo de adm
. Seu uso indiscriminado pode causar alteração nos proprietários de arquivos e pastas.
su
inicia um Shell interativo com o usuário fornecido, independentemente de sermos membros do grupo adm. Se não tivermos permissões, simplesmente serão solicitadas as credenciais do usuário necessário. A exceção é que, se usarmos a opção --command
, o comando será executado e a saída será retornada.
Opções de comando su
Opção | Descrição |
---|---|
-c, --command= | Com esta opção um comando é executado com o usuário especificado e a saída é retornada. |
-f, --fast | Com esta opção você passa -f para o Shell. |
-g, --group= | O grupo primário é especificado apenas para o usuário root. |
-G, --supp-group= | Um subgrupo é estabelecido apenas para o usuário root. |
-, -l, --login | Com esta opção as mesmas variáveis de ambiente são utilizadas como se fosse um login. |
-m, -p, --preserve-environment | Todo o ambiente do usuário atual é preservado no novo Shell. |
-P, --pty | Um pseudo terminal é criado para a sessão. |
-s, --shell= | O Shell a ser utilizado é especificado, ignorando o padrão. Se o Shell não existir ou for restrito, a opção será ignorada. |
--session-command= | É o mesmo que --command , mas sem criar uma nova sessão. Não recomendado. |
-w, --whitelist-environment= | Normalmente, as variáveis de ambiente são limpas com --login , com esta lista de permissões você estabelece quais variáveis não limpar. Por exemplo, PATH. |
-h, --help | A ajuda do comando é exibida com essas opções listadas. |
-V, --version | A versão é exibida. |
Exemplos reais
Estes são alguns casos que precisamos resolver:
- No desktop Debian precisamos realizar uma tarefa a partir do Terminal, mas para isso precisamos utilizar o usuário root.
- No desktop Ubuntu precisamos realizar uma tarefa administrativa a partir do Terminal, neste caso podemos usar o comando “sudo”, mas fica chato quando temos muitas coisas para fazer, e o que é necessário é usar root.
- Estamos logados como root, mas precisamos rodar o “composer” com o usuário do projeto ou pasta.
Problemas de segurança
Embora seja bastante útil, deve ser usado com moderação e apenas em casos estritamente necessários. Pessoalmente, mudei acidentalmente o proprietário e o grupo de todas as pastas do sistema com o comando chown
usando “root” indiscriminadamente, fazendo com que minha instalação do Ubuntu parasse de funcionar completamente, a única solução foi reinstalar tudo e recuperar os dados manualmente diretamente do disco. Este é apenas um caso e foi num computador pessoal, o detalhe é que também pode acontecer conosco num servidor web de produção ou em qualquer servidor crítico. O comando chown -hR
estava, no meu caso, em outro mais sério poderia ser rm -rf
.