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:
- Lee y analiza /etc/sudoers, busca al usuario que invoca y sus permisos,
- 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),
- después de eso, sudo crea un proceso hijo en el que llama a setuid() para cambiar al usuario objetivo
- 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
# # 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:
- Se utiliza cuando un administrador del sistema no confía en que los usuarios de sudo tengan una variable de entorno de RUTA segura
- 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:

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

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:
- always – siempre instruir a un usuario.
- 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)
- 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"

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

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

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/