Entendendo sudo vs su - Escalacao de Privilegios Segura no Linux

Entendendo sudo vs su - Escalacao de Privilegios Segura no Linux

O que Voce Vai Aprender

  • A diferenca principal entre sudo e su
  • Por que sudo e a abordagem recomendada para escalacao de privilegios
  • Como configurar sudoers com seguranca usando visudo
  • 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. Use sudo -i em 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

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

Proximas Leituras