Entendendo sudo vs su - Escalacao de Privilegios Segura no Linux
O que Voce Vai Aprender
- A diferenca principal entre
sudoesu - Por que
sudoe a abordagem recomendada para escalacao de privilegios - Como configurar
sudoerscom seguranca usandovisudo - Erros comuns e como evita-los
Resumo Rapido
- Executar um comando como root -->
sudo command - Iniciar uma sessao root estendida (use com moderacao) -->
sudo -i - Executar como outro usuario -->
sudo -u username command su -requer a senha do root -- desabilitada por padrao no Ubuntu. Usesudo -iem vez disso.
Pre-requisitos
- SO: Ubuntu (ou outras distros baseadas em Debian)
- Sua conta de usuario e membro do grupo
sudo
Qual e a Diferenca Entre sudo e su?
Tanto sudo (substitute user do) quanto su (switch user) elevam privilegios, mas funcionam de maneiras diferentes.
| Aspecto | sudo | su |
|---|---|---|
| Autenticacao | Sua propria senha | Senha do usuario de destino |
| Senha root necessaria | Nao | Sim (para su -) |
| Log de auditoria | /var/log/auth.log |
Minimo |
| Controle de permissao | Por comando via /etc/sudoers |
Acesso root completo |
| Padrao no Ubuntu | Disponivel | Bloqueado (senha root desabilitada) |
sudo e a ferramenta preferida porque aplica acesso de menor privilegio por usuario sem compartilhar a senha root.
Como Usar o sudo
2-1. Uso Basico -- Um Comando por Vez
$ sudo command
Exemplos:
$ sudo apt update $ sudo systemctl restart nginx
2-2. Iniciar um Shell Root de Login
$ sudo -i
sudo -i inicia um shell root que carrega as variaveis de ambiente e .profile do root. Use isso apenas quando precisar executar multiplos comandos como root.
Sempre execute exit ao terminar o shell root. Executar como root desnecessariamente aumenta o risco de danos acidentais.
2-3. Executar como Outro Usuario
$ sudo -u username command
Exemplo -- executar um comando como www-data:
$ sudo -u www-data php /var/www/html/artisan cache:clear
2-4. Por Quanto Tempo o sudo Permanece Ativo?
Apos autenticacao bem-sucedida, o sudo armazena credenciais em cache por 15 minutos por padrao. Para invalidar o cache manualmente:
$ sudo -k
Para listar suas permissoes sudo atuais:
$ sudo -l
Como Usar o su
3-1. su - para um Shell de Login
$ su - [username]
A flag - (equivalente a -l ou --login) recria o ambiente de login completo do usuario de destino -- diretorio home, variaveis de ambiente e PATH.
$ su - deploy # Iniciar um shell de login como o usuario deploy
3-2. su vs su - -- O que Muda?
$ su username # Aviso: herda SEU ambiente atual $ su - username # Correto: reproduz o ambiente de login do usuario de destino
Usar su username sem - carrega suas variaveis de ambiente atuais para o novo shell. Isso frequentemente causa confusao de PATH e erros command not found no contexto do usuario de destino.
3-3. Por que o su Nao Funciona no Ubuntu por Padrao
O Ubuntu desabilita a senha da conta root por padrao. Tentar su - para alternar para root falha na autenticacao:
$ su - Password: su: Authentication failure # senha root esta desabilitada
Use sudo -i em vez disso para um shell root interativo no Ubuntu.
Por que o sudo e Recomendado?
A vantagem principal do sudo sobre o su e seu modelo de seguranca.
Toda acao e registrada. Cada invocacao do sudo registra quem executou qual comando e quando em /var/log/auth.log:
$ sudo grep sudo /var/log/auth.log | tail -3 May 31 10:30:01 host sudo: alice : TTY=pts/0 ; PWD=/home/alice ; USER=root ; COMMAND=/usr/bin/apt update
Aplicacao do menor privilegio. O sudoers permite conceder apenas os comandos que um usuario realmente precisa. Um operador pode reiniciar um servico especifico sem obter acesso root completo.
Sem senha root compartilhada. Os membros da equipe se autenticam com suas proprias senhas, mantendo as credenciais individuais e revogaveis.
Configurando sudoers com visudo
5-1. Sempre Use visudo
/etc/sudoers deve ser editado com visudo. Ele valida a sintaxe antes de salvar, prevenindo cenarios de bloqueio onde um arquivo sudoers quebrado torna o sudo inutilizavel.
$ sudo visudo
Nunca edite /etc/sudoers diretamente com vi ou nano. Um erro de sintaxe desabilita o sudo completamente. No Ubuntu, onde o login root e desabilitado por padrao, recuperar-se disso requer um boot de recuperacao.
5-2. Sintaxe Basica
# usuario host=(executar-como) comando alice ALL=(ALL) ALL # NOPASSWD: pular prompt de senha para um comando especifico deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx
5-3. Conceder Permissoes a um Grupo
# Prefixe nomes de grupo com % %admin ALL=(ALL) ALL %deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl
5-4. Use Arquivos Drop-In (Recomendado)
Para ambientes de producao, evite editar sudoers diretamente. Coloque arquivos por funcao em /etc/sudoers.d/:
$ sudo visudo -f /etc/sudoers.d/deploy
Conteudo:
deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx
Erros Comuns
Definindo NOPASSWD para TODOS os Comandos
# Perigoso em producao: alice ALL=(ALL) NOPASSWD: ALL
Isso elimina toda friccao de senha. Aceitavel em maquinas de desenvolvimento local, mas copiar essa configuracao para um servidor de producao e um risco critico de seguranca. Restrinja a comandos especificos.
Editando sudoers sem visudo
Executar vi /etc/sudoers diretamente e introduzir um erro de sintaxe desabilita o sudo. Sempre use visudo -- ele realiza uma verificacao de sintaxe antes de gravar o arquivo.
Usando su sem a Flag -
# Herda seu PATH -- provavelmente causa erros command-not-found: $ su deploy # Correto -- reproduzir o ambiente de login do deploy: $ su - deploy
Referencia Rapida
| Tarefa | Comando |
|---|---|
| Executar um comando como root | sudo command |
| Iniciar um shell root de login | sudo -i |
| Executar um comando como outro usuario | sudo -u user command |
| Abrir um shell interativo como usuario | sudo -u user -i |
| Invalidar cache de credenciais sudo | sudo -k |
| Listar suas permissoes sudo atuais | sudo -l |
| Editar sudoers com seguranca | sudo visudo |
Templates Prontos para Copiar
# Verificar o que o sudo permite voce executar sudo -l # Executar um comando como root sudo apt update # Iniciar um shell root -- saia quando terminar sudo -i exit