Configuración de sudo (SUperuser DO)

El uso de sudo es la práctica más extendida para evitar utilizar el usuario root en la administración de los sistemas Linux.

Usado correctamente, sudo puede mejorar la seguridad en nuestros sistemas haciendo el trabajo del administrador mucho más fácil.

Las principales ventajas de sudo son:

  • Permite asignar a ciertos usuarios permisos totales sobre el sistema mientras a otros conceder sólo los privilegios para realizar las tareas que necesitan.
  • Permitir a los usuarios realizar sus tareas con su usuario y contraseña en el sistema sin requerir el uso del usuario root.
  • Deshabilitando el login de root protegemos nuestros sistemas de intrusos, minimizamos la superficie de ataque.
  • Las políticas de sudo pueden desplegarse a través de una red de sistemas Linux, normalizando la seguridad en los servidores.
  • Mejora la auditoria, permitiendo ver los permisos de administración que tiene cada usuario en el sistema.

Uso

Para que un usuario pueda ejecutar un comando al que sudo le concede permisos deberá introducir la palabra sudo antes del comando:

# sudo systemctl stop sshd

Si en la configuración de sudo se permite realizar está acción pedirá la contraseña el usuario.

Con el comando sudo –l podremos ver que opciones y que permisos están definidos en supo para el usuario:

El comando sudo –V nos mostrara la versión de sudo:

Otro comando que se utiliza para comprobar que la configuración es correcta es sudo -c

Configuración de los permisos

La configuración de sudo se realiza en el fichero /etc/sudoers el cual se puede editar directamente con algún editor de texto (vi, nano…etc) o se puede utilizar el editor específico visudo.

La configuración de los permisos se puede dividir en tres partes, aunque no todas son obligatoritas:

  • Alias: Los alias definen un o un conjunto de usuarios, comandos o equipo. Los tipos de alias son los siguientes:
    • Cmnd_Alias: Define alias de comandos
    • User_Alias: Define alias de usuarios normales
    • Runas_Alias: Define altas de usuario administradores o con privilegios
    • Host_Alias: Define alias de host o equipos

La forma de crear un alias es la siguiente:

Tipo_alias NOMBRE_DEL_ALIAS = elemento1, elemento2… elementoN

  • Opciones (Defaults): Permiten definir ciertas características de los alias creados. Por ejemplo podríamos indicar que nos enviase un correo cuando se utiliza sudo en cierto usuario. Hay una amplia lista de estas opciones que podemos ver en su documentación.

 

  • Reglas de acceso: Las reglas de acceso definen que usuario ejecutan que comando bajo que usuario y en que equipos. La estructura de esta regla es muy variable, pero se puede simplificar en tres partes en la primera se define a quien afecta la regla, la segunda sobre que afecta y la tercera los comandos a los que se tiene acceso.

A continuación mostramos varios ejemplos:

  • Conceder todos los permisos al usuario admin

admin ALL=(ALL:ALL) ALL

  • Conceder todos los permisos al grupo POWER:

User_Alias POWER = usuario1, usuario2
%POWER ALL=(ALL:ALL) ALL

  • Permitir unos comandos de red (NETCMDS) en todos los equipos al grupo de administradores de red (NETOPS)

Cmnd_Alias NETCMDS = /usr/sbin/ifconfig, /usr/sbin/ip
User_Alias NETOPS = usu1, usu2, usu3
NETOPS ALL=NETCMDS

  • Definir la opción que para todos los usuarios un máximo de 2 intentos en la contraseña:

Defaults passwd_tries = 2

En las distribuciones basadas en RedHat, existe el grupo denominado %wheel, que tiene todos los permisos por defecto en el fichero /etc/sudoers.

Configuración avanzada

Por defecto cuando es usado sudo tiene un tiempo de 5 minutos, es decir que la primera vez pedirá la contraseña y no la volverá a pedir hasta pasado un tiempo preestablecido. El tiempo se puede modificar a través de “opciones” en el fichero /etc/sudoers, si quisiéramos que sólo pidiese la contraseña la primera vez escribiríamos la siguiente línea:

Defaults timestamp_timeout = 0

Una problema de seguridad que se ha encontrado es que desde los editores se puede llamar al Shell para ejecutar comandos, en este caso sudo tiene su prodio editor de ficheros que evita este problema, el editor se llama sudoedit, por ejemplo si necesitásemos que el usuario “juan” pudiera modificar el fichero /etc/ssh/sshd_config utilizaríamos la siguiente regla en el fichero /etc/sudoers:

juan ALL=(ALL) sudoedit /etc/ssh/sshd_config

Por regla general hay que limitar a los usuarios para que sólo puedan realizar las tareas a las que tienen permisos, en algunas ocasiones podemos utilizar modificadores, como es “*” para completar la política de seguridad, por ejemplo:

juan ALL=(ALL) /usr/bin/systemctl * ssh

Otra configuración interesante es la de permitir ejecutar ciertos comandos como otro usuario, por ejemplo si queremos que el usuario “pablo” ejecute un script como “admindb” utilizaríamos la siguiente política:

pablo ALL=(admindb) /usr/locl/sbin/backup_db.sh