10 configuraciones útiles de Sudoers para establecer ‘sudo’ en Linux

En Linux y otros sistemas operativos similares a Unix, solo el usuario root puede ejecutar todos los comandos y realizar ciertas operaciones críticas en el sistema, como instalar y actualizar, eliminar paquetes, crear usuarios y grupos, modificar archivos de configuración del sistema importantes, entre otras cosas.

Sin embargo, un administrador del sistema que asuma el rol del usuario root puede permitir a otros usuarios normales del sistema, con la ayuda del comando sudo y algunas configuraciones adicionales, ejecutar algunos comandos y llevar a cabo varias operaciones vitales del sistema, incluidas las mencionadas anteriormente.

Alternativamente, el administrador del sistema puede compartir la contraseña del usuario root (lo cual no es un método recomendado) para que los usuarios normales del sistema tengan acceso a la cuenta del usuario root a través del comando su.

sudo permite a un usuario permitido ejecutar un comando como root (u otro usuario), según lo especificado por la política de seguridad:

  1. Lee y analiza /etc/sudoers, busca al usuario que invoca y sus permisos,
  2. luego solicita al usuario que invoca una contraseña (normalmente la contraseña del usuario, pero también puede ser la contraseña del usuario objetivo. O se puede omitir con la etiqueta NOPASSWD),
  3. después de eso, sudo crea un proceso hijo en el que llama a setuid() para cambiar al usuario objetivo
  4. a continuación, ejecuta un shell o el comando dado como argumentos en el proceso hijo anterior.

A continuación se presentan diez configuraciones de archivos /etc/sudoers para modificar el comportamiento del comando sudo utilizando entradas de 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 el alcance de esta guía, nos centraremos en el primer tipo de Defaults en las formas a continuación. Los parámetros pueden ser banderas, valores enteros, cadenas o listas.

Debes tener en cuenta que las banderas son implícitamente booleanas y se pueden desactivar utilizando el operador '!', y las listas tienen dos operadores de asignación adicionales, += (agregar a la lista) y -= (eliminar de la lista).

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

1. Establecer una RUTA Segura

Esta es la ruta utilizada para cada comando ejecutado con sudo, tiene dos importancias:

  1. Se utiliza cuando un administrador del sistema no confía en que los usuarios de sudo tengan una variable de entorno de RUTA segura
  2. Para separar la “ruta de root” y la “ruta de usuario”, solo los usuarios definidos por exempt_group no se ven afectados por esta configuración.

Para establecerlo, agrega la línea:

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

2. Habilitar sudo en la Sesión de Inicio de Usuario de TTY

Para habilitar sudo para ser invocado desde un tty real pero no a través de métodos como cron o scripts de cgi-bin, agrega la línea:

Defaults  requiretty   

3. Ejecutar Comando Sudo Utilizando un 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 escenario, puedes configurar sudo para ejecutar otros comandos solo desde un pseudo-pty utilizando el parámetro use_pty, ya sea que el registro de E/S esté activado o no, de la siguiente manera:

Defaults  use_pty

4. Crear un Archivo de Registro de Sudo

Por defecto, sudo registra a través de syslog(3). Sin embargo, para especificar un archivo de registro personalizado, use el parámetro logfile de la siguiente manera:

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

Para registrar el nombre del host y el año de cuatro dígitos en el archivo de registro personalizado, use los parámetros log_host y log_year respectivamente como sigue:

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

A continuación se muestra un ejemplo de un archivo de registro sudo personalizado:

Create Custom Sudo Log File

5. Registrar la Entrada/Salida del Comando Sudo

Los parámetros log_input y log_output permiten que sudo ejecute un comando en pseudo-tty y registre toda la entrada del usuario y toda la salida enviada a la pantalla respectivamente.

El directorio de registro de E/S predeterminado es /var/log/sudo-io, y si hay un número de secuencia de sesión, se almacena en este directorio. Puede especificar un directorio personalizado a través del parámetro iolog_dir.

Defaults   log_input, log_output

Se admiten algunas secuencias de escape como %{seq} que se expande a un número de secuencia base-36 monótonamente creciente, como 000001, donde cada dos dígitos se utilizan para formar un nuevo directorio, por ejemplo, 00/00/01 como en el ejemplo a continuación:

$ cd /var/log/sudo-io/
$ ls
$ cd  00/00/01
$ ls
$ cat log
Log sudo Input Output

Puede ver el resto de los archivos en ese directorio utilizando el comando cat.

6. Instruir a los Usuarios de Sudo

Para instruir a los usuarios de sudo sobre el uso de contraseñas en el sistema, use el parámetro lecture como se muestra a continuación.

Tiene 3 valores posibles:

  1. always – siempre instruir a un usuario.
  2. una vez: solo dar una conferencia al usuario la primera vez que ejecute el comando sudo (se usa cuando no se especifica ningún valor)
  3. nunca: nunca dar una conferencia al usuario.
 
Defaults  lecture="always"

Además, puedes establecer un archivo de conferencia personalizado con el parámetro lecture_file, escribe el mensaje apropiado en el archivo:

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

7. Mostrar Mensaje Personalizado Cuando Ingresas una Contraseña de sudo Incorrecta

Cuando un usuario ingresa una contraseña incorrecta, se muestra un mensaje específico en la línea de comandos. El mensaje predeterminado es “lo siento, inténtalo de nuevo“, puedes modificar el mensaje usando el parámetro badpass_message de la siguiente manera:

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

8. Aumentar el Límite de Intentos de Contraseña de sudo

El parámetro passwd_tries se utiliza para especificar la cantidad de veces que un usuario puede intentar ingresar una contraseña.

El valor predeterminado es 3:

Defaults   passwd_tries=5 
Increase Sudo Password Attempts

Para establecer un tiempo de espera de contraseña (el valor predeterminado es 5 minutos) usando el parámetro passwd_timeout, agrega la línea a continuación:

Defaults   passwd_timeout=2

9. Deja que Sudo te Insulte Cuando Ingresas una Contraseña Incorrecta

En caso de que un usuario ingrese una contraseña incorrecta, sudo mostrará insultos en la terminal con el parámetro de insultos. Esto apagará automáticamente el parámetro badpass_message.

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

Leer Más: Deja que Sudo te Insulte Cuando Ingresas una Contraseña Incorrecta

10. Aprender Más Configuraciones de Sudo

Además, puedes aprender más sobre las configuraciones del comando sudo leyendo: Diferencia entre su y sudo y cómo configurar sudo en Linux.

¡Eso es todo! Puedes compartir otras configuraciones útiles del comando sudo o trucos y consejos con usuarios de Linux a través de la sección de comentarios a continuación.

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