10 Configurações Úteis do Sudoers para Definir ‘sudo’ no Linux

No Linux e em outros sistemas operacionais semelhantes ao 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 arquivos de configuração do sistema importantes e assim por diante.

No entanto, um administrador de sistema que assume o papel do 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 (o que não é um método recomendado) para que os usuários normais do sistema tenham acesso à conta do usuário root via 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, verifica o usuário que está invocando e suas permissões,
  2. em seguida, solicita a senha do usuário que está invocando (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. após isso, o 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 argumentos no processo filho acima.

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

$ sudo cat /etc/sudoers
/etc/sudoers File
#
# 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 de Defaults

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, vamos focar no primeiro tipo de Defaults nos formatos abaixo. Parâmetros podem ser flags, valores inteiros, strings ou listas.

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

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

1. Definir um PATH Seguro

Este é o caminho usado 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 o “caminho root” e “caminho do usuário”, apenas os usuários definidos pelo grupo exempt_group não são afetados por essa configuração.

Para defini-lo, adicione a linha:

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

2. Habilitar sudo na Sessão de Login do Usuário TTY

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

Defaults  requiretty   

3. Executar Comando Sudo Usando um pty

A few times, attackers can run a malicious program (such as a virus or malware) using sudo, which would again fork a background process that remains on the user’s terminal device even when the main program has finished executing.

Para evitar tal cenário, você pode configurar o sudo para executar outros comandos apenas a partir de um pseudo-pty usando o parâmetro use_pty, quer o registro de E/S esteja ligado ou não, da seguinte forma:

Defaults  use_pty

4. Criar um Arquivo de Log do 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 maneira:

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

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

Create Custom Sudo Log File

5. Registrar Entrada/Saída do Sudo

Os parâmetros log_input e log_output permitem que o sudo execute um comando em pseudo-tty e registre toda a entrada do usuário e toda a saída enviada para a tela, respectivamente.

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 é armazenado neste diretório. Você pode especificar um diretório personalizado através do parâmetro iolog_dir.

Defaults   log_input, log_output

Alguns sequências de escape são suportadas, como %{seq}, que se expande para um número de sequência crescente monotonamente em base-36, 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
Log sudo Input Output

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

6. Palestra para Usuários do Sudo

Para palestrar os usuários do sudo sobre o uso de senhas no sistema, use o parâmetro lecture como abaixo.

Ele tem 3 valores possíveis:

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

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

Defaults  lecture_file="/path/to/file"
Lecture Sudo Users

7. Mostrar Mensagem Personalizada Quando Você Digita a Senha do sudo Incorretamente

Quando um usuário digita uma senha incorreta, 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 forma:

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

8. Aumentar 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 
Increase Sudo Password Attempts

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 Te Insultar Quando Você Digitar a Senha Incorreta

No caso de um usuário digitar uma senha incorreta, o sudo exibirá insultos no terminal com o parâmetro de insultos. Isso desativará automaticamente o parâmetro badpass_message.

Defaults  insults 
Let’s Sudo Insult You When Enter Wrong Password

Leia Mais: Deixe o Sudo Te Insultar Quando Você Digitar a Senha Incorreta

10. Saiba Mais Configurações do Sudo

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

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

Source:
https://www.tecmint.com/sudoers-configurations-for-setting-sudo-in-linux/