Linux / Comando sudo: permissões, usuários e configuração do sudoers
sudo é uma ferramenta que permite a um usuário autorizado pelas políticas de segurança executar um comando com os privilégios de outro usuário. Se o usuário alvo não for especificado, geralmente é executado como root, mas os privilégios reais e métodos de autenticação são determinados de acordo com a política sudo do sistema.
É útil para realizar tarefas que exigem privilégios administrativos, como instalar pacotes ou gerenciar serviços, mas se um comando for digitado incorretamente, pode afetar todo o sistema. Antes de executar, é essencial verificar os arquivos e opções de destino e conceder apenas os privilégios mínimos necessários para os comandos requeridos.
O que é o comando sudo?
sudo permite que usuários autorizados executem comandos como superusuário ou outro usuário. Não é simplesmente uma ferramenta para dar privilégios administrativos a todos os usuários, mas uma estrutura que controla por política quem pode executar qual comando com quais privilégios de usuário em qual host.
Na implementação tradicional do sudo, o plugin de política padrão é sudoers, e normalmente utiliza configurações de /etc/sudoers e /etc/sudoers.d/. O sistema compara a solicitação de execução com a política e, se necessário, autentica o usuário antes de executar apenas os comandos permitidos.
Os detalhes de plugins e opções deste guia seguem os manuais do sudo tradicional. Implementações como sudo-rs podem oferecer um conjunto diferente de recursos; confira sudo --version e os manuais instalados antes de aplicar uma opção ou regra específica.
Você pode verificar o método detalhado de execução na página oficial do manual sudo, e a sintaxe da política na página oficial do manual sudoers.
Sintaxe básica e primeira execução
A sintaxe geral é a seguinte.
sudo [options] command [arguments...]
Um exemplo de atualização da lista de pacotes em sistemas Debian ou Ubuntu é o seguinte.
sudo apt update
Se a autenticação for necessária, normalmente solicita a senha do usuário atualmente conectado. Algumas implementações e configurações ocultam a entrada da senha, enquanto o sudo-rs fornecido pelo Ubuntu 26.04 exibe asteriscos por padrão. O comportamento de exibição depende do provedor e da opção pwfeedback; por si só, não distingue operação normal de um erro. Dependendo da política do sistema, pode ser necessária a senha do usuário alvo ou outro método de autenticação.
A mudança é descrita nas notas de versão do Ubuntu 26.04 sobre a exibição da senha.
Se a permissão for concedida e a autenticação for bem-sucedida, o comando apt update e os processos que ele inicia usam os privilégios permitidos. O shell atual continua com a identidade do usuário que iniciou o comando.
Opções do sudo mais usadas
| Opção | Função | Exemplos de uso e precauções |
|---|---|---|
-u user |
Executar comando como o usuário especificado | sudo -u postgres psql |
-g group |
Executar comando como o grupo especificado | Apenas grupos permitidos pela política podem ser usados |
-l |
Verificar os comandos permitidos do usuário atual | Útil para verificar permissões antes da execução |
-v |
Verificar ou renovar informações de autenticação | Atualizar o carimbo de data/hora sem executar o comando |
-k |
Invalidar o carimbo de data/hora de autenticação atual | Exigir reautenticação na próxima execução do sudo |
-K |
Remover completamente o timestamp de autenticação do usuário | Remoção mais abrangente do cache que -k |
-i |
Executar o shell de login do usuário alvo | Usado para várias tarefas administrativas, mas com um escopo mais amplo |
-s |
Executar shell | Verificar o propósito, pois pode ser afetado pelo ambiente de chamada |
-n |
Execução não interativa | Falhar sem perguntar se uma senha é necessária |
-H |
Solicitar a definição de HOME para o diretório home do usuário alvo | Opera de acordo com a política e nem sempre é necessário |
-E |
Solicitação para preservar variáveis de ambiente do usuário | Deve ser permitido pela política e usado com cautela para segurança |
-e, sudoedit |
Modificar arquivos que requerem permissões por meio de um fluxo de edição seguro | sudoedit /etc/example.conf |
Executando como outro usuário
Especificar o usuário alvo com -u
Se o usuário alvo for omitido, normalmente root é usado. Ao especificar -u, você pode executar como outro usuário permitido pela política.
sudo -u postgres psql
Isso é útil quando você precisa executar comandos no contexto das permissões de arquivos ou do ambiente de uma conta de serviço. No entanto, algumas contas de serviço têm shells de login restritos, então primeiro verifique o propósito e a política da conta.
Confira a identidade usada na execução
Para verificar rapidamente quais permissões de usuário a política atual realmente concede, você pode usar id.
sudo id
sudo -u postgres id
A saída real depende da configuração de usuários e grupos do sistema. Para uma verificação simples, inspecionar comandos individuais é mais focado do que abrir um shell de administrador.
Consulte as permissões e o cache de autenticação
Verifique comandos que podem ser executados com sudo -l
sudo -l mostra as configurações padrão e os comandos que podem ser executados pelo usuário atual. Você pode verificar primeiro antes de alterar aleatoriamente as configurações quando encontrar um erro de permissão.
sudo -l
Os administradores podem verificar as políticas de outros usuários com -U se tiverem privilégios, mas usuários comuns geralmente verificam apenas suas próprias permissões.
Renove a autenticação com sudo -v
sudo -v verifica ou renova as informações de autenticação armazenadas sem executar um comando. Ele pode ser usado para preparar o status de autenticação antes de iniciar múltiplos comandos administrativos.
sudo -v
O tempo e o escopo padrão do cache de autenticação dependem da política do sudoers. Não ser solicitado a fornecer uma senha por um determinado período não permite todos os comandos, e cada comando continua a passar por verificações de política.
Limpe o status de autenticação com sudo -k
Use sudo -k quando quiser exigir nova autenticação na próxima execução após usar um terminal público ou terminar tarefas administrativas.
sudo -k
-K remove completamente o carimbo de autenticação do usuário. Verifique a versão do sudo instalada e a política para diferenças detalhadas.
Cuidados com comandos encadeados e pipelines
sudo aplica-se apenas ao comando imediatamente seguinte
Apenas o primeiro apt update no comando a seguir é executado com sudo. O apt upgrade subsequente é executado com as permissões do usuário atual.
sudo apt update && apt upgrade
Se ambos os comandos requerem privilégios de administrador, o método mais claro é adicionar sudo no início de cada comando.
sudo apt update && sudo apt upgrade
Para entender com precisão as condições de execução dos operadores de encadeamento, você também pode consultar Como Usar operadores de encadeamento de comandos do Bash (em inglês).
Ambos os lados de um pipe são processos separados
Cada comando conectado por um pipe é executado separadamente. No exemplo abaixo, apenas o primeiro comando é executado com privilégios de destino, e grep é executado como o usuário atual.
sudo some-command | grep 'pattern'
O comando de filtro somente leitura geralmente requer apenas permissões de usuário normal. Em vez de dar permissões elevadas a todo o pipeline, restrinja-as apenas às etapas que realmente precisam de permissões elevadas.
Executar um shell inteiro tem um escopo amplo
Você pode executar múltiplos comandos em um shell com permissões de destino como sudo sh -c 'command1 && command2', mas as regras de aspas se tornam complexas e o escopo de permissões é amplo. Para tarefas simples, é preferível especificar sudo para cada comando, pois isso beneficia a revisão e o registro.
Por que ocorre Permissão negada na redirecionamento
A redirecionamento de saída é gerenciada pelo shell atual
O comando a seguir executa apenas o echo com privilégios de administrador. A redirecionamento > é processada pelo shell atual antes que sudo seja executado, portanto, pode não conseguir abrir arquivos protegidos.
sudo echo 'value' > /etc/example.conf
Eleve permissões apenas para gravações necessárias usando tee
Quando precisar adicionar uma linha curta ou sobrescrever, você pode passar a entrada padrão para sudo tee.
printf '%s\n' 'value' | sudo tee /etc/example.conf > /dev/null
Para acrescentar a um arquivo existente, use tee -a. Certifique-se de verificar o caminho de destino e se ele será sobrescrito antes de executar.
printf '%s\n' 'value' | sudo tee -a /etc/example.conf > /dev/null
Edite arquivos de configuração com sudoedit
Se você precisar modificar várias linhas de configurações, sudoedit é mais apropriado. Ele permite que você edite uma cópia temporária como o usuário atual de acordo com a política, e então reflete as alterações no arquivo original.
sudoedit /etc/example.conf
Isso reduz o escopo de privilégios em comparação com a execução do editor inteiro com privilégios administrativos, mas as restrições reais em links simbólicos e diretórios graváveis dependem da versão do sudo e da política.
Shell administrativo: sudo -i e sudo -s
| Método | Comportamento típico | Situações adequadas |
|---|---|---|
sudo command |
Executar um único comando com os privilégios do usuário alvo | Recomendado para a maioria das tarefas administrativas únicas |
sudo -i |
Execute um shell que simule o ambiente de login do usuário alvo | Adequado quando uma sessão administrativa contínua é realmente necessária |
sudo -s |
Execute o shell especificado pelo shell ou ambiente do usuário que invoca | Compreenda as diferenças de ambiente e use um shell se necessário |
No shell do administrador, sudo não é exibido para cada comando subsequente, tornando difícil avaliar o impacto de erros. Para uma ou duas tarefas, use o formato sudo command em vez do shell do administrador, e se você abrir um shell, verifique continuamente o prompt, o usuário atual e o diretório de trabalho.
Modifique o sudoers com visudo
Por que você não deve editá-lo diretamente?
Se houver um erro de sintaxe em /etc/sudoers, o próprio sudo pode não funcionar. visudo trava o arquivo para evitar edição simultânea e verifica a validade básica e a sintaxe antes de salvar.
sudo visudo
Você pode verificar o procedimento seguro de edição na página oficial do manual do visudo.
Usando arquivos sudoers.d separados
Para separar regras por função, você pode criar arquivos separados em /etc/sudoers.d/. Primeiro, confirme que o sudoers padrão do seu sistema inclui este diretório, e também verifique as regras de nomenclatura dos arquivos.
sudo visudo -f /etc/sudoers.d/service-maintenance
Algumas configurações de sudoers podem ignorar itens com pontos no nome do arquivo ou terminando com um til, portanto é mais seguro usar nomes simples com letras, números e hífens.
Verifique toda a sintaxe após a modificação
Para verificar a sintaxe dos arquivos sudoers existentes e incluídos, use o seguinte comando.
sudo visudo -c
Uma verificação bem-sucedida não significa que o design de permissões seja seguro. Recomenda-se manter uma sessão de administrador separada, usar sudo -l como o usuário alvo, testar ações permitidas/negadas e então encerrar a sessão.
Antes de alterar as regras, garanta uma forma de recuperação que continue disponível se o sudo deixar de funcionar, como um console com acesso root autorizado. Uma sessão de usuário aberta com autenticação em cache não substitui esse acesso de recuperação.
Estrutura básica das regras do sudoers
As regras do sudoers combinam conceitualmente os seguintes itens.
user host=(runuser:rungroup) tag: command
| Item | Significado | Pontos a verificar durante o design |
|---|---|---|
| Usuário ou grupo | Usuários ou grupos aos quais a regra se aplica | Grupos geralmente são representados como %groupname |
| Host | Sistema onde as regras são válidas | Não amplie excessivamente o escopo do host na política central |
| Usuário/grupo que executa | Identidade de usuário ou grupo usada pelo comando | Especifique apenas as contas necessárias em vez de ALL |
| Marcador (tag) | Ajuste o comportamento de autenticação, execução e registro de logs | Use NOPASSWD e recursos semelhantes de forma restritiva após avaliar os riscos |
| Comandos e argumentos | Executáveis e argumentos opcionais que são permitidos | Restrinja o escopo com caminhos absolutos e argumentos fixos |
O seguinte é um exemplo que restringe o usuário deploy a executar apenas reinicializações e verificações de status de serviços específicos como root. Antes da aplicação real, você deve revisar se o comando permite indiretamente a execução de outros comandos ou modificação de arquivos.
deploy ALL=(root) /usr/bin/systemctl restart webapp.service, /usr/bin/systemctl is-active webapp.service
Como o caminho real dos executáveis pode variar de acordo com o sistema, verifique com comandos como command -v systemctl. Se executáveis em scripts que o usuário pode modificar ou em diretórios graváveis pelo usuário forem permitidos no sudoers, o usuário pode alterar seu conteúdo para executar comandos arbitrários com privilégios elevados.
Projete o sudoers com o princípio do menor privilégio
Evite usar habitualmente ALL e NOPASSWD
Trechos de regras como ALL=(ALL) NOPASSWD: ALL concedem efetivamente amplos privilégios administrativos sem confirmação por senha. Mesmo que a automação seja necessária, você deve projetá-la com contas dedicadas, arquivos executáveis e argumentos fixos, registros, proteção de segredos e caminhos de invocação.
Tenha cautela com programas que podem escapar para um shell
Programas que podem chamar editores, pagers, shells, escrever arquivos arbitrários ou carregar plugins podem parecer comandos restritos, mas podem levar a um shell administrativo. Não julgue a segurança apenas pelo nome do comando; revise a funcionalidade completa do programa, variáveis de ambiente e arquivos de configuração.
Restrinja os caminhos dos comandos e seus argumentos
Especifique comandos com caminhos absolutos e, se possível, fixe os argumentos permitidos. Coringas e regras de negação podem corresponder a caminhos inesperados ou serem contornados, por isso você deve compreender completamente as regras de correspondência de comandos do sudoers antes de usar.
Registre mudanças de permissão e revise-as regularmente
Para alterações na política do sudo, recomenda-se registrar o solicitante, o revisor, o propósito e as condições de expiração. Remova contas e regras não utilizadas e verifique regularmente privilégios excessivos com base nos logs reais e nos resultados do sudo -l.
Razões pelas quais variáveis de ambiente e caminhos mudam
O sudo pode não copiar o ambiente como está
As configurações padrão do sudoers podem remover variáveis de ambiente perigosas ou configurar um ambiente restrito. PATH, HOME, variáveis de proxy ou configurações de idioma podem ser diferentes do seu shell usual, o que pode alterar o comportamento dos comandos.
sudo env
Para solucionar problemas, você pode compará-lo com a saída env de um usuário regular, mas revise o conteúdo antes de compartilhar, pois pode conter tokens ou informações sensíveis.
Use sudo -E com cautela
-E solicita a preservação do ambiente do usuário que está chamando por política. A política pode negá-la, e valores de ambiente, como caminhos de bibliotecas, proxies e caminhos de execução, podem alterar o comportamento de programas executados com privilégios elevados. É geralmente mais seguro permitir explicitamente apenas as variáveis necessárias no sudoers.
Use sudo na automação
Use -n para evitar esperar por uma senha
Em tarefas automatizadas, esperar pela entrada interativa de senha pode fazer a tarefa parar. -n faz com que ela falhe imediatamente quando a entrada de autenticação é necessária.
sudo -n /usr/bin/systemctl restart webapp.service
Verifique o código de saída e os logs para confirmar se a execução teve sucesso. Não coloque senhas em scripts ou na linha de comando, pois elas podem ser expostas em listas de processos, histórico do shell ou logs.
Permita que apenas os comandos necessários sejam não interativos
Se a execução não assistida for necessária, permita apenas os comandos e argumentos designados a uma conta de serviço dedicada e garanta que a conta não possa modificar o executável e as configurações relacionadas. Em vez de privilégios amplos NOPASSWD, você também pode considerar APIs específicas de tarefas, serviços systemd ou programas auxiliares com permissões restritas.
Erros comuns e soluções
| Mensagens ou sintomas | Causa possível | Como verificar |
|---|---|---|
user is not in the sudoers file |
Nenhuma regra permitida para o usuário | Comunique os comandos e propósitos necessários ao administrador |
not allowed to execute |
A combinação de comando/argumento conflita com a política | Verifique o escopo permitido com sudo -l |
command not found |
O PATH para sudo é diferente do shell do usuário | Verifique o caminho absoluto e secure_path |
| Senha solicitada novamente | Cache de autenticação expirado ou diferenças de terminal/política | Verifique as configurações de política e timestamp |
| Permissão negada na redirecionamento | O shell atual tenta abrir um arquivo protegido primeiro | Use sudoedit ou tee restrito |
| Erro de sintaxe em sudoers | Edição direta ou regras incorretas | Verifique com visudo -c na sessão de recuperação |
Princípios de segurança ao usar sudo
- Antes de executar comandos copiados da internet ou de documentos, verifique diretamente as opções e os caminhos de destino.
- Para comandos como
sudo rmou aqueles relacionados a discos, partições, firewalls e contas, primeiro verifique os métodos de recuperação e os impactos potenciais. - Não mantenha um shell de administrador aberto por muito tempo apenas para um comando ocasional.
- Não coloque imprudentemente senhas, tokens ou chaves privadas na linha de comando, scripts ou variáveis de ambiente.
- Não conceda privilégios elevados a scripts ou executáveis que os usuários possam modificar.
- Verifique a localização dos logs do sudo e as políticas de retenção e, em ambientes críticos, revise o registro central e a auditoria de entrada/saída.
Mesmo que o sudo registre comandos, isso não significa que cada comando individual executado após sudo sh ou escape do shell seja mantido no log tradicional de comandos. Confirme se a auditoria de entrada/saída está configurada separadamente.
Perguntas frequentes
O sudo sempre é executado com privilégios de root?
Se você omitir o usuário alvo, o padrão geralmente é root, mas você pode especificar outro usuário com -u, e se isso realmente é permitido é determinado pela política. O ponto-chave do sudo não é executar apenas como root, mas executar comandos com as permissões de outro usuário permitido.
Por que o sudo não pede uma senha?
Informações recentes de autenticação ainda podem ser válidas pelo tempo definido pela política, ou a regra NOPASSWD pode se aplicar ao comando. Você pode verificar a política com sudo -l, e usar sudo -k para forçar a reautenticação na próxima execução.
Por que sudo cd não altera o diretório atual?
cd é um comando embutido do shell que altera o diretório de trabalho do shell atual. Alterar o diretório em um processo separado não afeta o shell pai. Para executar um comando em um diretório específico, verifique se esse comando suporta uma opção de diretório de trabalho ou se o sudo suporta -D.
O arquivo sudoers pode ser editado com um editor comum?
Não é recomendável. Você deve usar visudo porque um erro de sintaxe pode tornar o sudo inutilizável. Você também pode editar arquivos separados com sudo visudo -f /etc/sudoers.d/filename e verificar a configuração inteira com sudo visudo -c.
Resumo
Para um comando que requer privilégios de administrador, use sudo command. Para executar como um usuário diferente, use sudo -u user command. Você pode verificar o escopo permitido com sudo -l. O status de autenticação pode ser atualizado com -v e invalidado após o trabalho com -k.
Use visudo e sudoedit para arquivos de configuração, e projete regras de sudoers com base em caminhos absolutos, argumentos fixos e privilégios mínimos. Para outros comandos administrativos usados com frequência, você pode consultar Lista de Comandos Usados Frequentemente no Linux (em inglês).




