Skip to content

sudo - Executando Comandos como Superusuário

O sudo (Super User DO) é uma das ferramentas mais importantes do Linux. Ele permite que usuários comuns executem comandos com privilégios de root — de forma controlada, auditada e segura — sem precisar fazer login diretamente como root.

Muitas distribuições modernas (Ubuntu, Fedora) desabilitam o login direto como root por padrão, incentivando o uso do sudo. As razões são claras:

| Aspecto | Login como root | Uso do sudo | |---|---|---| | Risco | Alto — qualquer erro pode danificar o sistema | Baixo — privilégio elevado apenas quando necessário | | Auditoria | Difícil rastrear ações por usuário | Todos os comandos são registrados em log | | Controle | Nenhuma granularidade | Possível restringir quais comandos cada usuário pode executar | | Responsabilidade | Compartilhada (todos usam “root”) | Individual por usuário |

Terminal window
sudo [opções] comando [argumentos]

Terminal window
# Executar um comando como root
sudo apt update
# Executar um comando como outro usuário
sudo -u www-data ls /var/www/html
# Abrir um shell root interativo
sudo -i
# Abrir um shell root sem carregar o ambiente do root
sudo -s
# Executar o último comando novamente com sudo
sudo !!

Quando você executa sudo comando, o sistema segue este fluxo:

  1. Verifica se o usuário está listado no arquivo /etc/sudoers
  2. Solicita a senha do próprio usuário (não a senha do root)
  3. Autentica e executa o comando com privilégios elevados
  4. Registra a execução no log do sistema (/var/log/auth.log ou /var/log/secure)

Após digitar sua senha, o sudo armazena a autenticação em cache por 15 minutos (padrão). Durante esse período, novos comandos sudo não exigem senha novamente.

Terminal window
# Forçar nova autenticação (limpar o cache)
sudo -k
# Atualizar o cache sem executar comando
sudo -v

As permissões do sudo são definidas no arquivo /etc/sudoers. Este arquivo nunca deve ser editado diretamente — use sempre o comando visudo, que valida a sintaxe antes de salvar.

Terminal window
sudo visudo

quem onde=(como_quem) comando

| Campo | Descrição | Exemplo | |---|---|---| | quem | Usuário ou grupo (grupos com %) | fernando ou %sudo | | onde | Hostname onde a regra se aplica | ALL (qualquer host) | | como_quem | Usuário/grupo alvo da execução | (ALL:ALL) ou (root) | | comando | Caminho completo do comando permitido | ALL ou /usr/bin/apt |


Terminal window
# Dar acesso total a um usuário (equivalente ao root)
fernando ALL=(ALL:ALL) ALL
# Permitir que membros do grupo sudo executem qualquer comando
%sudo ALL=(ALL:ALL) ALL
# Permitir reiniciar o serviço nginx sem senha
deploy ALL=(root) NOPASSWD: /usr/bin/systemctl restart nginx
# Permitir apenas comandos específicos
operador ALL=(root) /usr/bin/apt update, /usr/bin/apt upgrade
# Negar um comando específico (usando !)
%dev ALL=(ALL) ALL, !/usr/bin/passwd root

Em vez de modificar o arquivo principal /etc/sudoers, é uma boa prática criar arquivos individuais no diretório /etc/sudoers.d/. Esses arquivos são incluídos automaticamente.

Terminal window
# Criar uma regra para o usuário deploy
sudo visudo -f /etc/sudoers.d/deploy

Conteúdo do arquivo:

deploy ALL=(root) NOPASSWD: /usr/bin/systemctl restart nginx, /usr/bin/systemctl reload nginx
Terminal window
# Verificar permissões do arquivo (deve ser 0440)
sudo chmod 0440 /etc/sudoers.d/deploy

A forma mais simples de dar acesso administrativo a um usuário é adicioná-lo ao grupo sudo (Debian/Ubuntu) ou wheel (Red Hat/Fedora/CentOS).

Terminal window
# Debian/Ubuntu — adicionar ao grupo sudo
sudo usermod -aG sudo fernando
# Red Hat/Fedora/CentOS — adicionar ao grupo wheel
sudo usermod -aG wheel fernando
# Verificar grupos do usuário
groups fernando

Para que a mudança tenha efeito, o usuário precisa fazer logout e login novamente.

Toda execução de sudo é registrada no sistema de logs. Isso é fundamental para rastrear ações administrativas.

Terminal window
# Debian/Ubuntu — verificar log de autenticação
sudo cat /var/log/auth.log | grep sudo
# Red Hat/Fedora — verificar log de segurança
sudo cat /var/log/secure | grep sudo
# Usando journalctl (sistemas com systemd)
sudo journalctl -u sudo
sudo journalctl | grep sudo


Exemplo de entrada de log:

Feb 26 10:32:15 servidor sudo: fernando : TTY=pts/0 ; PWD=/home/fernando ; USER=root ; COMMAND=/usr/bin/apt update

O log registra: data/hora, hostname, usuário, terminal, diretório atual, usuário alvo e comando executado.

Por padrão, o sudo limpa as variáveis de ambiente por segurança. Algumas variáveis podem ser preservadas com a diretiva env_keep no sudoers.

Terminal window
# Verificar o ambiente atual ao usar sudo
sudo env
# Passar uma variável específica para o comando
sudo VARIAVEL=valor comando
# Preservar todo o ambiente do usuário (use com cautela!)
sudo -E comando
Terminal window
# Listar o que o usuário atual pode executar com sudo
sudo -l
# Listar permissões de outro usuário
sudo -l -U fernando
# Verificar qual sudo está instalado e sua versão
sudo --version
# Executar um comando em background com sudo
sudo nohup comando &


Exemplo de saída do sudo -l:

Matching Defaults entries for fernando on servidor:
env_reset, mail_badpass, secure_path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
User fernando may run the following commands on servidor:
(ALL : ALL) ALL

Usar o sudo corretamente é tão importante quanto usar senhas fortes. Algumas diretrizes essenciais:

  • Princípio do menor privilégio: conceda apenas as permissões necessárias para a tarefa. Evite ALL=(ALL:ALL) ALL quando possível.
  • Evite sudo su: isso abre um shell root sem registro adequado dos comandos executados dentro dele.
  • Prefira sudo -i a sudo su quando precisar de um shell root — o logging é mais completo.
  • Revise os logs regularmente: monitore /var/log/auth.log para detectar usos suspeitos.
  • Use NOPASSWD com critério: reserve para automação e scripts em ambientes controlados.
  • Especifique caminhos completos nas regras do sudoers para evitar ataques de PATH hijacking.
  • Valide sempre com visudo: nunca edite /etc/sudoers diretamente com um editor comum.

| Comando | Descrição | |---|---| | sudo comando | Executar comando como root | | sudo -u usuario comando | Executar comando como outro usuário | | sudo -i | Abrir shell root interativo (com ambiente do root) | | sudo -s | Abrir shell root (mantendo ambiente atual) | | sudo -l | Listar permissões sudo do usuário atual | | sudo -k | Invalidar cache de autenticação | | sudo -v | Renovar cache sem executar comando | | sudo visudo | Editar o arquivo sudoers com segurança | | sudo visudo -f /etc/sudoers.d/arquivo | Criar/editar arquivo de regras separado | | sudo -E comando | Executar preservando variáveis de ambiente |

O sudo é uma ferramenta poderosa que, quando bem configurada, oferece o equilíbrio ideal entre segurança e praticidade na administração de sistemas Linux.