2 Conceitos básicos sobre o sudo #
A execução de determinados comandos exige privilégios de root. No entanto, por questões de segurança e para evitar erros, não é recomendável efetuar login como root. Uma abordagem mais segura é efetuar login como usuário comum e, em seguida, utilizar o sudo para executar comandos com privilégios elevados.
No SUSE Linux Enterprise Desktop, o sudo é configurado para funcionar de modo parecido com o su. No entanto, o sudo oferece um mecanismo flexível que permite aos usuários executar comandos com privilégios de qualquer outro usuário. Isso pode ser usado para atribuir funções com privilégios específicos a determinados usuários e grupos. Por exemplo, é possível permitir que os membros do grupo users executem um comando com os privilégios do usuário wilber. É possível restringir ainda mais o acesso ao comando quando você não permite nenhuma opção de comando. Enquanto o su sempre requer senha de root para autenticação com PAM, o sudo pode ser configurado para autenticar com suas próprias credenciais. Isso significa que os usuários não precisam compartilhar a senha de root, o que reforça a segurança.
2.1 Uso básico do sudo #
O capítulo a seguir apresenta uma introdução ao uso básico do sudo.
2.1.1 Executando um único comando #
Como usuário comum, você pode executar qualquer comando como root inserindo sudo antes do comando. Isso solicitará que você forneça a senha de root. Se a autenticação for bem-sucedida, o comando será executado como root:
>id -un1 tux>sudoid -unroot's password:2 root>id -untux3>sudoid -un4 root
O comando | |
A senha não aparece ao ser digitada, nem como texto sem criptografia nem como caracteres de mascaramento. | |
Apenas os comandos que começam com | |
Os privilégios elevados são mantidos por um determinado período, portanto, você não precisa inserir a senha de |
Ao usar o sudo, o redirecionamento de E/S não funciona:
>sudoecho s > /proc/sysrq-trigger bash: /proc/sysrq-trigger: Permission denied>sudocat < /proc/1/maps bash: /proc/1/maps: Permission denied
No exemplo acima, apenas os comandos echo e cat são executados com privilégios elevados. O redirecionamento é realizado pelo shell do usuário com os privilégios do usuário. Para realizar o redirecionamento com privilégios elevados, inicie um shell conforme explicado na Seção 2.1.2, “Iniciando um shell” ou use o utilitário dd:
echo s | sudo dd of=/proc/sysrq-trigger sudo dd if=/proc/1/maps | cat
2.1.2 Iniciando um shell #
Nem sempre é prático usar o sudo toda vez para executar um comando com privilégios elevados. Embora você possa usar o comando sudo
bash, é recomendável usar um dos mecanismos incorporados para iniciar um shell:
sudo -s (<command>)Inicia um shell especificado pela variável de ambiente
SHELLou o shell padrão do usuário de destino. Se um comando for especificado, ele será passado para o shell (com a opção-c). Do contrário, o shell será executado no modo interativo.tux:~ >sudo -s root's password:root:/home/tux #exittux:~ >sudo -i (<command>)Semelhante a
-s, mas inicia o shell como um shell de login. Isso significa que os arquivos de inicialização do shell (.profileetc.) são processados, e o diretório de trabalho atual é definido como o diretório pessoal do usuário de destino.tux:~ >sudo -i root's password:root:~ #exittux:~ >
Por padrão, o sudo não propaga as variáveis de ambiente. É possível mudar esse comportamento com a opção env_reset (consulte Opções e flags úteis).
2.2 Configurando sudo #
O sudo oferece uma ampla variedade de opções configuráveis.
Se você se bloqueou por engano fora do sudo, use su
- e a senha de root para iniciar um shell de root. Para corrigir o erro, execute visudo.
2.2.1 Editando os arquivos de configuração #
O arquivo de configuração de política principal do sudo é /etc/sudoers. Já que é possível se bloquear fora do sistema se o arquivo estiver incorreto, é altamente recomendável usar o visudo para edição. Ele evita conflitos de edição e verifica se há erros de sintaxe antes de gravar as modificações.
Você pode definir a varável de ambiente EDITOR para usar outro editor no lugar do vi, por exemplo:
sudo EDITOR=/usr/bin/nano visudo
Lembre-se de que o arquivo /etc/sudoers está incluído nos pacotes de sistema, e as modificações feitas diretamente no arquivo podem danificar as atualizações. Portanto, é recomendável inserir a configuração personalizada nos arquivos no diretório /etc/sudoers.d/. Use o seguinte comando para criar ou editar um arquivo:
sudo visudo -f /etc/sudoers.d/NAME
O comando a seguir abre o arquivo usando um editor diferente (neste caso, nano):
sudo EDITOR=/usr/bin/nano visudo -f /etc/sudoers.d/NAME
/etc/sudoers.d
A diretiva #includedir em /etc/sudoers ignora os arquivos que terminam com o caractere ~ (til) ou que contêm o caractere . (ponto).
Para obter mais informações sobre o comando visudo, execute man 8 visudo.
2.2.2 Sintaxe de configuração básica 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 ignored 1 Defaults !insults # Disable the insults flag 2 Defaults env_keep += "DISPLAY HOME" # Add DISPLAY and HOME to env_keep tux ALL = NOPASSWD: /usr/bin/frobnicate, PASSWD: /usr/bin/journalctl 3
Há duas exceções: | |
Remova o caractere | |
Consulte Seção 2.2.3, “Regras básicas do sudoers”. |
targetpwEsse flag controla se o usuário que faz a chamada deve digitar a senha do usuário de destino (ON) (por exemplo
root) ou do usuário que faz a chamada (OFF).Defaults targetpw # Turn targetpw flag ON
rootpwSe definido, o
sudosolicitará a senha deroot. O padrão é OFF.Defaults !rootpw # Turn rootpw flag OFF
env_resetSe definido,
sudocria 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_keepLista 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_deleteLista 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
É possível também usar o token Defaults para criar álias para uma coleção de usuários, hosts e comandos. Além disso, é possível aplicar uma opção apenas a um conjunto específico de usuários.
Para obter informações detalhadas sobre o arquivo de configuração /etc/sudoers, consulte man 5 sudoers.
2.2.3 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_ListUm ou vários identificadores (separados por vírgula): 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_ListUm ou vários identificadores (separados por vírgula): um nome (completo) do host ou um endereço IP. A negação pode ser especificada com o prefixo
!.ALLé a 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 ambosPASSWDeNOPASSWDestão na mesma linha:tux ALL = PASSWD: /usr/bin/foo, NOPASSWD: /usr/bin/bar
Cmnd_ListUm ou vários especificadores (separados por vírgula): 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.
Uma regra que permite que o tux execute todos os comandos como root sem digitar uma senha:
tux ALL = NOPASSWD: ALL
Uma regra que permite que o tux execute systemctl restart
apache2:
tux ALL = /usr/bin/systemctl restart apache2
Uma regra que permite que o tux execute wall como admin sem argumentos:
tux ALL = (admin) /usr/bin/wall ""
Não use regras como ALL ALL =
ALL sem Defaults targetpw. Do contrário, qualquer pessoa pode executar comandos como root.
Ao especificar o nome do grupo no arquivo sudoers, use o nome do domínio NetBIOS em vez do domínio Kerberos, por exemplo:
%DOMAIN\\GROUP_NAME ALL = (ALL) ALL
Ao usar o winbindd, lembre-se de que o formato também depende da opção winbind separator no arquivo smb.conf. O padrão é \. Por exemplo, se ele for mudado para +, o formato da conta no arquivo sudoers deverá ser DOMAIN+GROUP_NAME.
2.3 Casos de uso do sudo #
Embora a configuração padrão funcione em cenários de uso padrão, é possível personalizá-la de forma a atender às suas necessidades específicas.
2.3.1 Usando o sudo sem senha de root #
Por concepção, os membros do grupo wheel podem executar todos os comandos com o sudo como root. O procedimento a seguir explica como adicionar uma conta do usuário ao grupo wheel.
Verifique se o grupo
wheelexiste:>getent group wheelSe o comando anterior não retornou nenhum resultado, instale o pacote system-group-wheel que cria o grupo
wheel:>sudozypper install system-group-wheelAdicione sua conta do usuário ao grupo
wheel.Se a sua conta do usuário ainda não é membro do grupo
wheel, adicione-a usando o comandosudo usermod -a -G wheel USERNAME. Efetue logout e login novamente para habilitar a mudança. Verifique se a mudança foi bem-sucedida executando o comandogroups USERNAME.Autentique-se com a senha normal da conta do usuário.
Crie o arquivo
/etc/sudoers.d/userpwusando o comandovisudo(consulte a Seção 2.2.1, “Editando os arquivos de configuração”) e adicione o seguinte:Defaults !targetpw
Selecione uma nova regra padrão.
Se os usuários tiverem que digitar as senhas novamente, remova o comentário da linha apropriada em
/etc/sudoerse comente a regra padrão.## Uncomment to allow members of group wheel to execute any command # %wheel ALL=(ALL) ALL ## Same thing without a password # %wheel ALL=(ALL) NOPASSWD: ALL
Torne a regra padrão mais restritiva.
Comente ou remova a regra allow-everything em
/etc/sudoers:ALL ALL=(ALL) ALL # WARNING! Only use this together with 'Defaults targetpw'!
Atenção: Regra perigosa em sudoersNão ignore esta etapa. Do contrário, qualquer usuário poderá executar qualquer comando como
root!Teste a configuração.
Execute o
sudocomo membro e não membro do grupowheel.tux:~ >groups users wheeltux:~ >sudo id -un tux's password: rootwilber:~ >groups userswilber:~ >sudo id -un wilber is not in the sudoers file. This incident will be reported.
2.3.2 Usando o sudo com aplicativos X.Org #
Normalmente, ocorre o seguinte erro ao iniciar aplicativos gráficos com sudo:
>sudoxterm xterm: Xt error: Can't open display: %s xterm: DISPLAY is not set
Uma solução alternativa simples é usar o xhost para permitir temporariamente que o usuário root acesse a sessão X do usuário local. Para fazer isso, execute o seguinte comando:
xhost si:localuser:root
O comando a seguir remove o acesso concedido:
xhost -si:localuser:root
A execução de aplicativos gráficos com privilégios de root tem implicações de segurança. É recomendável habilitar o acesso de root para um aplicativo gráfico apenas como uma exceção. Também é recomendável revogar o acesso de root concedido logo após fechar o aplicativo gráfico.
2.4 Mais informações #
O comando sudo --help oferece uma breve visão geral das opções de linha de comando disponíveis. O comando man sudoers fornece informações detalhadas sobre o sudoers e sua configuração.