Pesquisa de site

10 configurações úteis de Sudoers para definir ‘sudo’ no Linux


No Linux e em outros sistemas operacionais do tipo Unix, apenas o usuário root pode executar todos os comandos e realizar certas operações críticas no sistema, como instalar e atualizar, remover pacotes, criar usuários e grupos, modificar sistemas importantes arquivos de configuração e assim por diante.

No entanto, um administrador de sistema que assume a função de usuário root pode permitir que outros usuários normais do sistema, com a ajuda do comando sudo e algumas configurações, executem alguns comandos, bem como realizem uma série de operações vitais do sistema, incluindo as mencionadas acima.

Alternativamente, o administrador do sistema pode compartilhar a senha do usuário root (que não é um método recomendado) para que os usuários normais do sistema tenham acesso à conta do usuário root através do comando su.

sudo permite que um usuário autorizado execute um comando como root (ou outro usuário), conforme especificado pela política de segurança:

  1. Ele lê e analisa /etc/sudoers, procura o usuário invocador e suas permissões,
  2. em seguida, solicita uma senha ao usuário invocador (normalmente a senha do usuário, mas também pode ser a senha do usuário alvo. Ou pode ser ignorada com a tag NOPASSWD),
  3. depois disso, sudo cria um processo filho no qual chama setuid() para mudar para o usuário alvo
  4. em seguida, ele executa um shell ou o comando fornecido como argumento no processo filho acima.

Abaixo estão dez configurações de arquivo /etc/sudoers para modificar o comportamento do comando sudo usando entradas Padrões.

sudo cat /etc/sudoers
#
This file MUST be edited with the 'visudo' command as root.
#
Please consider adding local content in /etc/sudoers.d/ instead of
directly modifying this file.
#
See the man page for details on how to write a sudoers file.
#
Defaults	env_reset
Defaults	mail_badpass
Defaults	secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Defaults	logfile="/var/log/sudo.log"
Defaults	lecture="always"
Defaults	badpass_message="Password is wrong, please try again"
Defaults	passwd_tries=5
Defaults	insults
Defaults	log_input,log_output

Tipos de entradas padrão

Defaults                parameter,   parameter_list     #affect all users on any host
Defaults@Host_List      parameter,   parameter_list     #affects all users on a specific host
Defaults:User_List      parameter,   parameter_list     #affects a specific user
Defaults!Cmnd_List      parameter,   parameter_list     #affects  a specific command 
Defaults>Runas_List     parameter,   parameter_list     #affects commands being run as a specific user

Para o escopo deste guia, iremos zerar o primeiro tipo de Padrões nos formulários abaixo. Os parâmetros podem ser sinalizadores, valores inteiros, strings ou listas.

Você deve observar que os sinalizadores são implicitamente booleanos e podem ser desativados usando o operador '!', e as listas têm dois operadores de atribuição adicionais, += (adicionar à lista) e -= (remover da lista).

Defaults     parameter
OR
Defaults     parameter=value
OR
Defaults     parameter -=value   
Defaults     parameter +=value  
OR
Defaults     !parameter       

1. Defina um PATH seguro

Este é o caminho utilizado para cada comando executado com sudo, tem duas importâncias:

  1. Usado quando um administrador de sistema não confia que os usuários sudo tenham uma variável de ambiente PATH segura
  2. Para separar “caminho raiz” e “caminho do usuário”, apenas os usuários definidos por grupo_isento não são afetados por esta configuração.

Para configurá-lo, adicione a linha:

Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

2. Habilite sudo na sessão de login do usuário TTY

Para permitir que o sudo seja invocado a partir de um tty real, mas não através de métodos como scripts cron ou cgi-bin, adicione a linha:

Defaults  requiretty   

3. Execute o comando Sudo usando um pty

Algumas vezes, os invasores podem executar um programa malicioso (como um vírus ou malware) usando o sudo, que novamente bifurcaria um processo em segundo plano que permaneceria no dispositivo terminal do usuário mesmo quando o programa principal terminasse de ser executado.

Para evitar tal cenário, você pode configurar o sudo para executar outros comandos somente a partir de um psuedo-pty usando o parâmetro use_pty, esteja o log de E/S ativado ou não como segue:

Defaults  use_pty

4. Crie um arquivo de log Sudo

Por padrão, o sudo registra através do syslog(3). No entanto, para especificar um arquivo de log personalizado, use o parâmetro logfile da seguinte forma:

Defaults  logfile="/var/log/sudo.log"

Para registrar o nome do host e o ano de quatro dígitos no arquivo de log personalizado, use os parâmetros log_host e log_year respectivamente da seguinte forma:

Defaults  log_host, log_year, logfile="/var/log/sudo.log"

Abaixo está um exemplo de arquivo de log sudo personalizado:

5. Registrar entrada/saída de comando Sudo

Os parâmetros log_input e log_output permitem que o sudo execute um comando em pseudo-tty e registre todas as entradas do usuário e todas as saídas enviadas para a tela de forma receptiva.

O diretório de log de E/S padrão é /var/log/sudo-io e, se houver um número de sequência de sessão, ele será armazenado neste diretório. Você pode especificar um diretório personalizado através do parâmetro iolog_dir.

Defaults   log_input, log_output

Existem algumas sequências de escape suportadas, como %{seq} que se expande para um número de sequência de base 36 que aumenta monotonicamente, como 000001, onde cada dois dígitos são usados para formar um novo diretório, por exemplo. 00/00/01 como no exemplo abaixo:

cd /var/log/sudo-io/
ls
cd  00/00/01
ls
cat log

Você pode visualizar o restante dos arquivos nesse diretório usando o comando cat.

6. Palestra para usuários do Sudo

Para ensinar aos usuários sudo sobre o uso de senha no sistema, use o parâmetro lecture conforme abaixo.

Possui 3 valores possíveis:

  1. sempre – sempre dar um sermão em um usuário.
  2. uma vez – apenas dá um sermão em um usuário na primeira vez que ele executa o comando sudo (isso é usado quando nenhum valor é especificado)
  3. nunca – nunca dê um sermão ao usuário.
 
Defaults  lecture="always"

Além disso, você pode definir um arquivo de aula personalizado com o parâmetro lecture_file, digite a mensagem apropriada no arquivo:

Defaults  lecture_file="/path/to/file"

7. Mostrar mensagem personalizada quando você digita a senha sudo errada

Quando um usuário insere uma senha errada, uma determinada mensagem é exibida na linha de comando. A mensagem padrão é “desculpe, tente novamente”, você pode modificar a mensagem usando o parâmetro badpass_message da seguinte maneira:

Defaults  badpass_message="Password is wrong, please try again"

8. Aumente o limite de tentativas de senha do sudo

O parâmetro passwd_tries é usado para especificar o número de vezes que um usuário pode tentar inserir uma senha.

O valor padrão é 3:

Defaults   passwd_tries=5 

Para definir um tempo limite de senha (o padrão é 5 minutos) usando o parâmetro passwd_timeout, adicione a linha abaixo:

Defaults   passwd_timeout=2

9. Deixe o Sudo insultá-lo quando você digitar a senha errada

Caso um usuário digite uma senha errada, o sudo exibirá insultos no terminal com o parâmetro insultos. Isso desativará automaticamente o parâmetro badpass_message.

Defaults  insults 

Leia mais: Deixe o Sudo insultá-lo quando você digitar a senha incorreta

10. Saiba mais configurações do Sudo

Além disso, você pode aprender mais configurações do comando sudo lendo: Diferença entre su e sudo e Como configurar o sudo no Linux.

É isso! Você pode compartilhar outras configurações úteis do comando sudo ou truques e dicas com usuários do Linux por meio da seção de comentários abaixo.