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:

AspectoLogin como rootUso do sudo
RiscoAlto — qualquer erro pode danificar o sistemaBaixo — privilégio elevado apenas quando necessário
AuditoriaDifícil rastrear ações por usuárioTodos os comandos são registrados em log
ControleNenhuma granularidadePossível restringir quais comandos cada usuário pode executar
ResponsabilidadeCompartilhada (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
CampoDescriçãoExemplo
quemUsuário ou grupo (grupos com %)fernando ou %sudo
ondeHostname onde a regra se aplicaALL (qualquer host)
como_quemUsuário/grupo alvo da execução(ALL:ALL) ou (root)
comandoCaminho completo do comando permitidoALL 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.
ComandoDescrição
sudo comandoExecutar comando como root
sudo -u usuario comandoExecutar comando como outro usuário
sudo -iAbrir shell root interativo (com ambiente do root)
sudo -sAbrir shell root (mantendo ambiente atual)
sudo -lListar permissões sudo do usuário atual
sudo -kInvalidar cache de autenticação
sudo -vRenovar cache sem executar comando
sudo visudoEditar o arquivo sudoers com segurança
sudo visudo -f /etc/sudoers.d/arquivoCriar/editar arquivo de regras separado
sudo -E comandoExecutar 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.