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:
- Ele lê e analisa /etc/sudoers, verifica o usuário que está invocando e suas permissões,
- 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),
- após isso, o sudo cria um processo filho no qual chama setuid() para mudar para o usuário-alvo
- 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
# # 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:
- Usado quando um administrador de sistema não confia que os usuários sudo tenham uma variável de ambiente PATH segura
- 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:

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

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:
- always – sempre palestrar um usuário.
- uma vez – apenas dar uma palestra ao usuário na primeira vez que ele executar o comando sudo (isso é usado quando nenhum valor é especificado)
- 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"

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

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

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/