Ir para o conteúdoIr para navegação de página: página anterior [tecla de acesso p]/próxima página [tecla de acesso n]
documentation.suse.com / Documentação do SUSE Linux Enterprise Desktop / Guia de Administração / Tarefas comuns / Conceitos básicos sobre o sudo
Aplica-se a SUSE Linux Enterprise Desktop 15 SP5

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
> sudo id -un
root's password:2
root
> id -un
tux3
> sudo id -un
4
root

1

O comando id -un imprime o nome de login do usuário atual.

2

A senha não aparece ao ser digitada, nem como texto sem criptografia nem como caracteres de mascaramento.

3

Apenas os comandos que começam com sudo são executados com privilégios elevados.

4

Os privilégios elevados são mantidos por um determinado período, portanto, você não precisa inserir a senha de root novamente.

Dica
Dica: Redirecionamento de E/S

Ao usar o sudo, o redirecionamento de E/S não funciona:

> sudo echo s > /proc/sysrq-trigger
bash: /proc/sysrq-trigger: Permission denied
> sudo cat < /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 SHELL ou 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 # exit
tux:~ > 
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 (.profile etc.) 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:~ # exit
tux:~ > 
Dica
Dica: Variáveis de ambiente

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.

Nota
Nota: Comando sudo bloqueado

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
Nota
Nota: Arquivos ignorados em /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

1

Há duas exceções: #include e #includedir são comandos regulares.

2

Remova o caractere ! para definir o flag desejado como ON.

3

Consulte Seção 2.2.3, “Regras básicas do sudoers”.

Opções e flags úteis
targetpw

Esse 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
rootpw

Se definido, o sudo solicitará a senha de root. O padrão é OFF.

Defaults !rootpw # Turn rootpw flag OFF
env_reset

Se definido, sudo cria um ambiente mínimo com TERM, PATH, HOME, MAIL, SHELL, LOGNAME, USER, USERNAME e SUDO_*. Além disso, as variáveis listadas em env_keep serão importadas do ambiente de chamada. O padrão é ON.

Defaults env_reset # Turn env_reset flag ON
env_keep

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

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

É 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
Sintaxe da regra do sudoers
User_List

Um ou vários identificadores (separados por vírgula): um nome de usuário, um grupo no formato %GROUPNAME ou 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í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 para Host_List.

NOPASSWD:|PASSWD:

Não é solicitada uma senha para o usuário ao executar comandos correspondentes a Cmd_List após NOPASSWD:.

PASSWD é o padrão. Ele precisa ser especificado apenas quando ambos PASSWD e NOPASSWD 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í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 ""
Atenção
Atenção: Regras não seguras

Não use regras como ALL ALL = ALL sem Defaults targetpw. Do contrário, qualquer pessoa pode executar comandos como root.

Importante
Importante: Winbind e sudo

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.

  1. Verifique se o grupo wheel existe:

    > getent group wheel

    Se o comando anterior não retornou nenhum resultado, instale o pacote system-group-wheel que cria o grupo wheel:

    > sudo zypper install system-group-wheel
  2. Adicione 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 comando sudo 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 comando groups USERNAME.

  3. Autentique-se com a senha normal da conta do usuário.

    Crie o arquivo /etc/sudoers.d/userpw usando o comando visudo (consulte a Seção 2.2.1, “Editando os arquivos de configuração”) e adicione o seguinte:

    Defaults !targetpw
  4. 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/sudoers e 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
  5. 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
    Atenção: Regra perigosa em sudoers

    Não ignore esta etapa. Do contrário, qualquer usuário poderá executar qualquer comando como root!

  6. Teste a configuração.

    Execute o sudo como membro e não membro do grupo wheel.

    tux:~ > groups
    users wheel
    tux:~ > sudo id -un
    tux's password:
    root
    wilber:~ > groups
    users
    wilber:~ > 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:

> sudo xterm
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
Atenção
Atenção: Possível problema de segurança

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.