Configurando privilégios de superusuário com sudo
- O QUE É?
Familiarize-se com os fundamentos da configuração do
sudoe saiba como delegar privilégios de superusuário comsudo. Este artigo apresenta informações detalhadas de configuração dosudoe não inclui nenhuma orientação de como criar uma política dosudoabrangente e segura. As políticas relacionadas à segurança são muito complexas e dependem bastante do ambiente para o qual foram criadas.- POR QUÊ?
Alguns comandos exigem privilégios de administrador ou de
root. Ao usar osudo, você pode delegar os privilégios a determinados usuários ou grupos para executarem esses comandos.- DEDICAÇÃO
A leitura deste artigo leva no máximo 20 minutos. A gravação da primeira regra de configuração do
sudoleva apenas alguns minutos, mas o estabelecimento de uma configuração funcional dosudoque opere em todo o ambiente leva muito mais tempo, dependendo da complexidade da configuração.- META
Entender os aspectos básicos da configuração do
sudo. Abordar os casos de uso comuns para configuração dosudo. Aprender a trabalhar com usuários, grupos de usuários e álias em configurações dosudo. Familiarizar-se com as melhores práticas e a solução de problemas dosudo.- REQUISITOS
Conhecimento básico do
sudo.Privilégios de
root. Para obter informações sobre como usar osudocomo usuário comum, consulte https://documentation.suse.com/smart/systems-management/html/sudo-run-commands-as-superuser/index.html.
1 Uma introdução à configuração do sudo #
O sudo possibilita delegar com segurança e eficiência privilégios de superusuário a usuários ou grupos específicos.
Determinadas operações em um sistema Linux exigem privilégios de administrador ou de root. Os usuários domésticos que administram o próprio sistema não precisam delegar privilégios de superusuário, pois o administrador e o usuário comum são a mesma pessoa neste cenário. No entanto, assim que um sistema se integra a um ambiente maior com vários usuários, grupos e hosts, torna-se essencial manter o controle de quem tem permissão para fazer o quê e onde. Ao mesmo tempo, é importante conceder a todos os usuários e grupos os privilégios necessários para realizar suas tarefas.
Na nova política implementada no pacote sudo-policy-wheel-auth-self, o grupo wheel é usado para rastrear se um usuário pode se tornar root com a senha de usuário. O primeiro usuário criado pelo instalador Agama é adicionado ao grupo wheel.
Além disso, ao executar o comando sudo:
Se você fizer parte do grupo
wheel, será solicitado que digite sua senha de usuário.Se você não fizer parte do grupo
wheel, será solicitado que digite a senha de usuárioroot.
O sudo proporciona:
- Segurança aprimorada do sistema
O
sudooferece controle minucioso sobre usuários, grupos, hosts e comandos e, portanto, reforça a segurança do sistema ao reduzir o risco de danos intencionais ou acidentais causados por um intruso ou um usuário do sistema.- Trilha de auditoria completa
Sempre que um usuário alterna privilégios, isso aparece no registro do sistema, e todas as operações executadas por esse usuário com privilégios elevados podem ser rastreadas até ele.
- Um meio de delegar tarefas específicas de
root Com o
sudo, os administradores do sistema podem permitir que usuários individuais ou grupos realizem determinadas tarefas sem a necessidade de inserir a senha deroote alternar para a conta deroot.
2 Criando configurações personalizadas do sudo #
Saiba como criar um exemplo simples de configuração personalizada do sudo e expandi-lo passo a passo. Crie grupos e use álias para manter sua configuração personalizada simples e eficiente.
Ao migrar do SUSE Linux Enterprise Server for SAP Aplications 15, o arquivo /etc/sudoers está presente. O arquivo /usr/etc/sudoers será ignorado se o arquivo /etc/sudoers existir. Desde que o usuário não tenha modificado significativamente o arquivo /etc/sudoers, a configuração do diretório /etc/sudoers.d/ ainda será lida.
Ao migrar do SUSE Linux Enterprise Server for SAP Aplications 15, recomenda-se que os usuários que não modificaram o arquivo /etc/sudoers o removam. Se um usuário tiver modificado o arquivo /etc/sudoers, mova esse arquivo para o diretório /etc/sudoers.d e, em seguida, remova-o.
As regras de exemplo descritas abaixo são estritamente para fins de demonstração. Use-as para entender a sintaxe geral dos arquivos de configuração do sudo. Não as utilize em configurações reais, pois elas não refletem a complexidade desses ambientes.
2.1 Melhores práticas de configuração do sudo #
Antes de começar, veja a seguir algumas regras básicas para manter as configurações do sudo:
- Sempre use o comando
visudo -fpara editar o diretório/etc/sudoers.d/ As alterações na configuração do
sudodevem ser feitas usando o comandovisudo. Ovisudoé uma ferramenta personalizada que permite editar os arquivos de configuração dosudoe executa verificações de sintaxe básicas, garantindo que a configuração permaneça intacta e funcional. Uma configuração dosudoinválida pode fazer com que o usuário seja bloqueado do próprio sistema.- Sempre criar configurações personalizadas em
/etc/sudoers.d/ As configurações personalizadas devem residir no diretório
/etc/sudoers.d/para serem extraídas pelosudo. As definições nos arquivos de configuração personalizada têm prioridade sobre aquelas na configuração padrão em/usr/etc/sudoers.- Sempre prestar atenção à ordem de leitura das configurações
Para garantir que as configurações personalizadas sejam lidas na ordem correta, use números como prefixo. Inclua zeros à esquerda para estabelecer a ordem de leitura dos arquivos. Por exemplo,
01_myfirstconfigé analisado antes de10_myotherconfig. Se uma diretiva tiver sido definida em um arquivo que foi lido antes de outro arquivo que contém informações conflitantes, a diretiva que foi lida por último será aplicada.- Sempre usar nomes de arquivo descritivos
Use nomes de arquivo que indiquem o que o arquivo de configuração faz. Isso ajuda você a reconhecer a ação planejada da configuração do
sudo.
2.2 Criar um arquivo de configuração específico do usuário #
Crie um arquivo de configuração do sudo que permita a um usuário comum (tux) usar o comando useradd com sua própria senha, em vez da senha de root.
Como administrador do sistema (
root), crie um arquivo de configuração personalizado que inclua as novas diretivas específicas do usuário iniciando ovisudo. Use a numeração e um nome descritivo:#visudo -f /etc/sudoers.d/02_usermanagementCrie uma regra que permita ao
tuxexecutar o binário/usr/sbin/useraddem todo o ambiente ao qual esta configuração dosudoserá aplicada:tux1 ALL2 = /usr/sbin/useradd3
Especifique o usuário ou grupo. Liste os usuários por nome ou
#UIDe os grupos por%GROUPNAME. Se você tiver vários itens nessa lista, separe-os com vírgulas. Para negar entradas, use!.Especifique um ou vários hosts (separados por vírgulas). Use nomes de host (completos e qualificados) ou endereços IP. Adicione
ALLpara impor essa configuração globalmente a todos os hosts. Use!para negações.Especifique um ou vários executáveis (separados por vírgulas). Ao especificá-los, lembre-se das seguintes regras:
-
/usr/sbin/useradd Sem nenhuma opção adicional inserida, isso permite a execução de todos os comandos
useraddpossíveis.-
/usr/sbin/useradd -c Se você especificar claramente uma opção, ela será a única permitida. Nada mais estará disponível para o usuário indicado acima.
-
/usr/sbin/useradd "" Esse procedimento apenas permitirá que o usuário invoque um simples
useraddsem nenhuma opção.
No exemplo acima, você pode permitir todas as opções e os subcomandos ou limitá-los a apenas alguns por motivos de segurança, mas proibir um usuário de especificar qualquer opção não faz sentido neste contexto.
-
Grave a configuração, saia do editor e abra um segundo shell para testar se o
sudoestá seguindo sua nova configuração.
2.3 Criar configurações personalizadas agrupando itens #
Modifique a configuração do Exemplo 1, “Criar um arquivo de configuração específico do usuário” para que um grupo de usuários nomeados possa executar o comando useradd sem a necessidade da senha de root. Além disso, adicione usermod e userdel à lista de comandos disponíveis para esse grupo.
Para modificar a configuração de exemplo, abra-a como administrador do sistema com o
visudo:#visudo /etc/sudoers.d/02_usermanagementAdicione outros usuários à regra em uma lista separada por vírgulas:
tux, wilber ALL = /usr/sbin/useradd
Para permitir que os usuários relacionados executem uma lista de comandos, especifique os comandos como uma lista separada por vírgulas:
tux, wilber ALL = /usr/sbin/useradd, /usr/sbin/usermod, /usr/sbin/userdel
Grave a configuração, saia do editor e abra um segundo shell para testar se o
sudoestá seguindo sua nova configuração.
2.4 Simplificar as configurações aplicando álias #
Use álias para simplificar ainda mais a configuração personalizada do Exemplo 2, “Criar configurações personalizadas agrupando itens”. O agrupamento de itens ajuda até certo ponto, mas o uso de álias globais para usuários, comandos e hosts é a maneira mais eficiente de manter a configuração do sudo clara e simples.
O uso de álias e grupos em vez de listas é uma maneira muito melhor de administrar as mudanças na configuração. Se um usuário sair, basta removê-lo da declaração global User_Alias no arquivo de declaração do álias, em vez de revisar todos os arquivos de configuração personalizados separados. O mesmo procedimento se aplica a qualquer outro tipo de álias (Host_Alias, Cmnd_Alias e Runas_Alias).
Crie um novo arquivo para armazenar suas definições de álias globais:
#visudo /etc/sudoers.d/01_aliasesAdicione a seguinte linha para criar o álias
TEAMLEADERS:User_Alias TEAMLEADERS = tux, wilber
Adicione a seguinte linha para criar o álias
USERMANAGEMENT:Cmnd_Alias USERMANAGEMENT = /usr/sbin/useradd, /usr/sbin/usermod, /usr/sbin/userdel
Grave suas mudanças e saia do
visudo.Como administrador do sistema, inicie o
visudopara editar o arquivo de configuração de exemplo:#visudo -f /etc/sudoers.d/02_usermanagementApague e substitua a regra anterior pela seguinte regra que usa os álias que você acabou de definir acima:
TEAMLEADERS ALL = USERMANAGEMENT
Grave a configuração, saia do editor e abra um segundo shell para testar se o
sudoestá seguindo sua nova configuração.
Encontre uma descrição mais detalhada da sintaxe de configuração do sudo na Seção 7, “Referência de configuração do sudo” e consulte a página de manual do sudo.
3 Mudando o tempo de espera do prompt de senha do sudo #
Saiba como mudar as configurações de tempo de espera para executar comandos que exigem privilégios de root sem que seja solicitada a senha de root para cada comando.
Ao executar um comando precedido com sudo pela primeira vez, será solicitado que você insira a senha de root. Essa senha permanece válida por um determinado período. Depois que ela expirar, será solicitado para o usuário inseri-la novamente. Para estender ou reduzir o tempo de espera ao executar comandos que exigem privilégios de root, faça as seguintes mudanças no arquivo de configuração do sudo. É importante saber que a solicitação da senha de usuário root é para usuários que não fazem parte do grupo wheel.
root
Por motivos de segurança, não conceda acesso ilimitado a privilégios de root. Em vez disso, defina um tempo de espera razoável para evitar o uso indevido da conta de root por qualquer intruso.
sudo #Como administrador do sistema, crie um novo arquivo de configuração do
sudopara a configuração de marcação de horário com:#visudo --f=/etc/sudoers.d/timestamp_timeoutApós a autenticação bem-sucedida com a senha de
root, o arquivo será aberto.Habilite a edição e adicione a linha
timestamp_timeout=. Insira um valor para a marcação de horário.Por exemplo, para reduzir o tempo de espera para três minutos, insira:
Defaults timestamp_timeout=3
Se a marcação de horário for definida como zero, será solicitado que você insira a senha de
rootpara cada execução de um comandosudo.Salve as mudanças e feche o arquivo.
Você criou um arquivo de configuração do sudo e reduziu a configuração de tempo de espera para execução de comandos do sudo.
4 Iniciando um shell com privilégios de root #
Inicie um shell com privilégios de root permanentes usando o comando sudo -s ou sudo -i. Com os dois comandos, será solicitado que você insira a senha de root apenas uma vez. É importante saber que, se o usuário fizer parte do grupo wheel, será solicitado que ele insira a própria senha. Do contrário, será solicitada a senha de usuário root.
4.1 Diferença entre sudo -s e sudo -i #
Ter que inserir o sudo sempre que você deseja executar um comando como root pode ser desgastante. Em vez disso, você pode usar um dos mecanismos incorporados para iniciar um shell com privilégios de root permanentes. Para isso, há duas opções de comando disponíveis:
O
sudo -sinicia o shell com o ambiente do usuário atual e oferece algumas medidas de controle de privilégios. Para executar esse comando, insira a senha deroot.sudo -iinicia o shell como um shell de login interativo com um ambiente limpo. Para executar esse comando, insira a senha deroot.
Com os dois comandos, o shell é iniciado com um novo ambiente, e você efetua login como root. Qualquer comando subsequente executado nesse shell é aplicado com privilégios elevados sem precisar inserir a senha novamente. Esse ambiente é encerrado quando você fecha o shell, e você deve inserir a senha novamente para outro comando do sudo.
4.2 Iniciando um shell com sudo -s #
O comando sudo -s inicia um shell interativo sem login. Após a autenticação bem-sucedida com a senha de root, todos os comandos subsequentes serão executados com privilégios elevados.
A variável de ambiente SHELL ou o shell padrão do usuário especifica qual shell deve ser aberto. Se essa variável estiver vazia, o shell definido em /etc/passwd será selecionado.
Por padrão, o comando sudo -s é executado do diretório do usuário anterior porque o usuário de destino herda o ambiente do usuário anterior. O comando também é registrado em seu histórico.
Para iniciar um shell com privilégios permanentemente elevados, digite o seguinte comando:
tux:~ >sudo -s[sudo] password for root:root:/home/tux #exittux:~ >
O prompt muda de > para # .
Você iniciou um shell com privilégios permanentemente elevados. Todos os comandos subsequentes serão executados sem solicitar a senha novamente.
4.3 Iniciando um shell com sudo -i #
O sudo -i é semelhante à opção de linha de comando sudo
-s, mas inicia um shell de login interativo. Ao usar o comando sudo -s, o usuário de destino herda o ambiente do usuário anterior. Para evitar isso, use o comando sudo -i, em que o usuário de destino obtém um ambiente limpo e é iniciado em seu próprio diretório $HOME.
Para executar um comando com sudo -i, digite o seguinte:
tux:~ >sudo -i[sudo] password for root:root:~ #exittux:~ >
Você iniciou um shell com privilégios permanentemente elevados, e o comando é registrado em seu histórico. Todos os comandos subsequentes serão executados sem solicitar a senha novamente.
5 Melhores práticas do sudo #
Saiba mais sobre algumas das melhores práticas do sudo para controlar o acesso ao sistema e permitir que os usuários sejam produtivos.
- Testar e fazer uma auditoria completa das configurações do
sudo Para criar uma estrutura de configuração do
sudoverdadeiramente eficiente e segura, estabeleça uma rotina de testes e auditorias regulares. Identifique e resolva possíveis falhas. Não deixe que a conveniência supere a segurança.- Limitar o tempo de espera do
sudo Por motivos de segurança, não conceda acesso ilimitado a privilégios de
root. Em vez disso, defina um tempo de espera razoável para evitar o uso indevido da conta derootpor qualquer intruso. Para obter mais informações, consulte a Seção 3, “Mudando o tempo de espera do prompt de senha dosudo”.- Usar o comando
visudo Use o comando
visudo -fpara editar o arquivo/usr/etc/sudoerscom segurança, pois ele verifica a sintaxe do arquivo antes de salvar as mudanças. Essa é uma forma preventiva de corrigir quaisquer erros que possam danificar o sistema. Além da verificação de sintaxe básica, você pode executar o comandovisudo -cpara verificar se toda a sua estrutura de configuração dosudofoi analisada na ordem correta e sem erros.- Gerenciar usuários em grupos, e não individualmente
Mantenha a configuração do
sudoo mais simples e gerenciável possível. Gerencie usuários adicionando-os a grupos e, em seguida, concedendo privilégios a esses grupos, e não a indivíduos. Isso permite adicionar ou remover usuários apenas mudando as configurações do grupo, em vez de ter que procurar o usuário por toda a configuração.Uma regra de exemplo que permite que todos os usuários em um grupo
%admingrpde amostra executem todos os comandos:%admingrp ALL = (ALL) ALL
- Restringir o caminho para binários
Com a diretiva
secure_path, restrinja as áreas em que os usuários podem executar comandos. O exemplo a seguir é a configuração padrão incluída no SUSE Linux Enterprise Server for SAP Aplications.Defaults secure_path="/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/bin:/usr/local/sbin"
- Manter o registro do
sudotransparente O
sudoregistra no arquivo de registro padrão, em que as entradas de registro podem ser facilmente ignoradas. Adicione a seguinte regra à sua configuração para especificar um arquivo de registro dosudodedicado.Defaults logfile=/var/log/sudo.log
6 Solução de problemas #
Saiba como depurar e solucionar problemas de configuração do sudo.
6.1 As configurações personalizadas em /etc/sudoers.d/ são ignoradas #
A diretiva #includedir em /etc/sudoers ignora os arquivos que terminam com o caractere ~ ou que contêm o caractere .. Isso evita problemas com arquivos de configuração fornecidos pelo gerenciador de pacotes (contendo .) ou com arquivos temporários ou de backup de um editor (que terminam com ~). Verifique se os nomes dos arquivos de configuração personalizados não contêm nem terminam com esses caracteres. Caso contenham esses caracteres, renomeie-os.
6.2 Conflito de diretivas personalizadas #
A ordem em que os arquivos de configuração são lidos determina quando uma diretiva de configuração do sudo é aplicada. As diretivas em um arquivo localizado em /etc/sudoers.d/ têm precedência sobre as mesmas diretivas em /etc/sudoers. Se as diretivas personalizadas indicadas em /etc/sudoers.d/ não funcionarem, verifique a ordem em que os arquivos são lidos usando visudo -c. Ajuste a ordem, se necessário.
6.3 Bloqueado devido à configuração do sudo inválida #
Se você acidentalmente violou a configuração do sudo do sistema e se bloqueou do sudo, use su - e a senha de root para iniciar um shell de root. Execute visudo -c para verificar erros e corrigi-los usando visudo.
7 Referência de configuração do sudo #
Esta seção apresenta uma referência de configuração básica do sudo que ajuda a entender e manter as configurações padrão e personalizadas do sudo.
7.1 Sintaxe de configuração do sudoers #
Os arquivos de configuração sudoers contêm dois tipos de opções: strings e flags. Enquanto as strings podem conter qualquer valor, os flags podem ser ON ou OFF. Veja a seguir as construções de sintaxe mais importantes para os arquivos de configuração sudoers:
# Everything on a line after # is ignored1 Defaults !insults # Disable the insults flag2 Defaults env_keep += "DISPLAY HOME" # Add DISPLAY and HOME to env_keep3 tux ALL = NOPASSWD: /usr/bin/frobnicate, PASSWD: /usr/bin/journalctl4
Há duas exceções: | |
Remova o caractere | |
Especifique uma lista de variáveis de ambiente que devem ser mantidas quando | |
Uma regra complexa que especifica que o usuário |
-
env_reset Se definido,
sudoconstrói um ambiente mínimo comTERM,PATH,HOME,MAIL,SHELL,LOGNAME,USER,USERNAMEeSUDO_*. Além disso, as variáveis listadas emenv_keepserão importadas do ambiente de chamada. O padrão é ON.Defaults env_reset # Turn env_reset flag ON
-
env_keep A lista de variáveis de ambiente para manter quando o flag
env_reseté ON.# Set env_keep to contain EDITOR and PROMPT Defaults env_keep = "EDITOR PROMPT" Defaults env_keep += "JRE_HOME" # Add JRE_HOME Defaults env_keep -= "JRE_HOME" # Remove JRE_HOME
-
env_delete A lista de variáveis de ambiente para remover quando o flag
env_reseté OFF.# Set env_delete to contain EDITOR and PROMPT Defaults env_delete = "EDITOR PROMPT" Defaults env_delete += "JRE_HOME" # Add JRE_HOME Defaults env_delete -= "JRE_HOME" # Remove JRE_HOME
7.2 Regras básicas do sudoers #
Cada regra segue o esquema abaixo ([] marca as partes opcionais):
#Who Where As whom Tag What User_List Host_List = [(User_List)] [NOPASSWD:|PASSWD:] Cmnd_List
-
User_List Um ou vários identificadores (separados por vírgulas): um nome de usuário, um grupo no formato
%GROUPNAMEou um ID de usuário no formato#UID. A negação pode ser especificada com o prefixo!.-
Host_List Um ou vários identificadores (separados por vírgulas): um nome de host (completo e qualificado) ou um endereço IP. A negação pode ser especificada com o prefixo
!.ALLé uma opção comum paraHost_List.-
NOPASSWD:|PASSWD: Não é solicitada uma senha para o usuário ao executar comandos correspondentes a
Cmd_ListapósNOPASSWD:.PASSWD:é o padrão. Ele precisa ser especificado apenas quando ambosPASSWD:eNOPASSWD:estão na mesma linha:tux ALL = PASSWD: /usr/bin/foo, NOPASSWD: /usr/bin/bar
-
Cmnd_List Um ou vários especificadores (separados por vírgulas): um caminho para um executável, seguido de um argumento opcional permitido.
/usr/bin/foo # Anything allowed /usr/bin/foo bar # Only "/usr/bin/foo bar" allowed /usr/bin/foo "" # No arguments allowed
ALL pode ser usado como User_List, Host_List e Cmnd_List.
7.3 Simplificar o sudoers usando álias #
Os administradores podem evitar a manutenção de um conjunto de regras repetitivas e individuais introduzindo álias nos itens de grupo. A sintaxe deles é a mesma das regras. Os seguintes tipos de álias são suportados:
-
User_Alias Uma lista de nomes de usuário
-
Runas_Alias Um grupo de usuários por UID
-
Host_Alias Uma lista de nomes de host
-
Cmnd_Alias Uma lista de comandos, diretórios e álias
Considere os álias como listas nomeadas de usuários, grupos, comandos e hosts. Para ilustrar o poder dos álias, veja este exemplo:
Host_Alias WEBSERVERS = www1, www2, www31 User_Alias ADMINS = tux, wilber, suzanne2 Cmnd_Alias REBOOT = /sbin/halt, /sbin/reboot, /sbin/poweroff3 ADMINS WEBSERVERS = REBOOT4
Os três servidores estão agrupados em um | |
Semelhante aos hosts agrupados acima, usuários de grupo ou até mesmo grupos de usuários (como | |
Especifica um grupo de comandos que são usados no mesmo contexto. | |
Todos os álias são agrupados em uma única regra que declara que todos os usuários especificados por |
Em resumo, os álias ajudam os administradores a manter o sudoers simples e gerenciável (e, portanto, seguro). Por exemplo, se um dos usuários sair da empresa, você poderá apagar o nome dessa pessoa da declaração User_Alias, e de qualquer grupo do sistema ao qual ela pertencia, apenas uma vez, sem ter que pesquisar todas as regras que incluíam esse usuário específico.
8 Informações legais #
Copyright© 2006 – 2025 SUSE LLC e colaboradores. Todos os direitos reservados.
Permissão concedida para copiar, distribuir e/ou modificar este documento sob os termos da Licença GNU de Documentação Livre, Versão 1.2 ou (por sua opção) versão 1.3; com a Seção Invariante sendo estas informações de copyright e a licença. Uma cópia da versão 1.2 da licença está incluída na seção intitulada “GNU Free Documentation License” (Licença GNU de Documentação Livre).
Para saber as marcas registradas da SUSE, visite https://www.suse.com/company/legal/. Todas as marcas comerciais de terceiros pertencem a seus respectivos proprietários. Os símbolos de marca registrada (®, ™ etc.) indicam marcas registradas da SUSE e de suas afiliadas. Os asteriscos (*) indicam marcas registradas de terceiros.
Todas as informações deste manual foram compiladas com a maior atenção possível aos detalhes. Entretanto, isso não garante uma precisão absoluta. A SUSE LLC, suas afiliadas, os autores ou tradutores não serão responsáveis por possíveis erros nem pelas consequências resultantes de tais erros.