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:
- Ele lê e analisa /etc/sudoers, procura o usuário invocador e suas permissões,
- 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),
- depois disso, 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 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:
- Usado quando um administrador de sistema não confia que os usuários sudo tenham uma variável de ambiente PATH segura
- 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:
- sempre – sempre dar um sermão em um usuário.
- 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)
- 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.