Cómo integrar Sudoers con el servidor OpenLDAP

Sudo es una aplicación que te permite obtener privilegios de root o administrador en sistemas operativos Linux y Unix. Sudo suele venir instalado por defecto en las distribuciones de Linux, también puedes configurar la autorización de usuarios mediante el archivo /etc/sudoers y permitir a los usuarios sin privilegios ejecutar comandos específicos como usuario root.

Sudo puede configurarse de múltiples formas, puedes configurar sudo en un ordenador/servidor local o también puedes configurar un sudo centralizado mediante software de terceros. Y para este ejemplo, utilizarás el servidor OpenLDAP para configurar el despliegue centralizado de sudo.

En este tutorial, configuraremos e integraremos sudoers en el servidor OpenLDAP. Con esto, tendrás una gestión centralizada de usuarios y privilegios sudo en tu servidor OpenLDAP, permitiendo que la instalación en el lado cliente sea más rápida. Cualquier servicio SSSD en la máquina cliente configurado con una fuente de autenticación sudo permite a los usuarios de OpenLDAP ejecutar sudo.

Requisitos previos

Debes asegurarte de que dispones de los siguientes requisitos para completar esta guía:

  • Un servidor con el Servidor OpenLDAP instalado y configurado.
  • Una máquina cliente Cliente OpenLDAP y el servicio SSSD configurados.
  • Si utilizas distribuciones basadas en RHEL, asegúrate de que SELinux se ejecuta en modo Permisivo.

En este ejemplo se utilizarán dos máquinas para el Servidor y el Cliente OpenLDAP. Ambas máquinas ejecutan el servidor Rocky Linux 9. A continuación se detallan los servidores:

Hostname    IP Address      Used as             Domain/FQDN
--------------------------------------------------------------
ldap        192.168.5.25    OpenLDAP Server     ldap.hwdomain.lan
client      192.168.5.80    OpenLDAP Client     client.hwdomain.lan

Importar el Esquema Sudoers al Servidor OpenLDAP

En el primer paso, debes importar el esquema LDAP por defecto de sudoers a tus servidores OpenLDAP. Esto puede hacerse mediante el archivo LDIF y la utilidad«ldapadd«.

Accede al servidor OpenLDAP y copia el esquema por defecto de sudoers para LDAP introduciendo el comando cp que aparece a continuación.

sudo cp /usr/share/doc/sudo/schema.OpenLDAP  /etc/openldap/schema/sudo.schema

A continuación, introduce el siguiente comando del editor de comandos nano para crear un nuevo archivo LDIF ‘/etc/openldap/schema/sudo.ldif‘.

sudo nano /etc/openldap/schema/sudo.ldif

Añade las siguientes líneas al archivo.

dn: cn=sudo,cn=schema,cn=config
objectClass: olcSchemaConfig
cn: sudo
olcAttributeTypes: ( 1.3.6.1.4.1.15953.9.1.1 NAME 'sudoUser' DESC 'User(s) who may  run sudo' EQUALITY caseExactIA5Match SUBSTR caseExactIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
olcAttributeTypes: ( 1.3.6.1.4.1.15953.9.1.2 NAME 'sudoHost' DESC 'Host(s) who may run sudo' EQUALITY caseExactIA5Match SUBSTR caseExactIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
olcAttributeTypes: ( 1.3.6.1.4.1.15953.9.1.3 NAME 'sudoCommand' DESC 'Command(s) to be executed by sudo' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
olcAttributeTypes: ( 1.3.6.1.4.1.15953.9.1.4 NAME 'sudoRunAs' DESC 'User(s) impersonated by sudo (deprecated)' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
olcAttributeTypes: ( 1.3.6.1.4.1.15953.9.1.5 NAME 'sudoOption' DESC 'Options(s) followed by sudo' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
olcAttributeTypes: ( 1.3.6.1.4.1.15953.9.1.6 NAME 'sudoRunAsUser' DESC 'User(s) impersonated by sudo' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
olcAttributeTypes: ( 1.3.6.1.4.1.15953.9.1.7 NAME 'sudoRunAsGroup' DESC 'Group(s) impersonated by sudo' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
olcObjectClasses: ( 1.3.6.1.4.1.15953.9.2.1 NAME 'sudoRole' SUP top STRUCTURAL DESC 'Sudoer Entries' MUST ( cn ) MAY ( sudoUser $ sudoHost $ sudoCommand $ sudoRunAs $ sudoRunAsUser $ sudoRunAsGroup $ sudoOption $ description ) )

Guarda y sal del archivo cuando hayas terminado.

Cambia la propiedad del archivo LDIF sudoers ‘/etc/openldap/schema/sudo.ldif’ para asegurarte de que OpenLDAP puede acceder a él.

sudo chown ldap:ldap /etc/openldap/schema/sudo.ldif

Ahora introduce el siguiente comando‘ldapadd‘ para añadir el esquema LDAP de sudoers al servidor OpenLDAP. Con esto, añadirás el nuevo‘cn’ llamado‘sudo‘ al servidor OpenLDAP y permitirás que cualquier usuario OpenLDAP dentro del‘cn=sudo‘ ejecute el comando sudo en las máquinas cliente.

sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/sudo.ldif

Si lo consigues, deberías obtener una salida como‘añadiendo nueva entrada «cn=sudo,cn=schema,ch=config»‘.

añadir esquema sudo al servidor OpenLDAP

Ahora que se ha añadido el esquema LDAP de sudoers, tendrás que crear una‘ou’ o Unidad Organizativa para los sudoers.

Crear Unidad Organizativa para Sudo

Tras añadir el esquema LDAP sudoers, a continuación crearás una nueva ‘ou‘ o Unidad Organizativa llamada ‘sudo’ que permita a cualquier usuario OpenLDAP dentro de esta ou ejecutar el comando sudo. Además, establecerás la configuración por defecto de sudoers para los usuarios de OpenLDAP.

Introduce el siguiente editor nano para crear un nuevo archivo‘sudoers.ldif‘.

sudo nano sudoers.ldif

Añade las siguientes líneas al archivo y asegúrate de cambiar el dominio principal por el nombre de dominio de tu servidor OpenLDAP.

# sudoers.ldif

dn: ou=sudo,dc=hwdomain,dc=lan
objectClass: organizationalUnit
objectClass: top
ou: sudo
description: Default ou for SUDO

Guarda y cierra el archivo cuando hayas terminado.

A continuación, introduce el siguiente comando«ldapadd» para añadir el ou sudoers al servidor OpenLDAP. Cuando se te pida una contraseña, introduce la contraseña raíz correcta de OpenLDAP.

sudo ldapadd -x -D cn=Manager,dc=hwdomain,dc=lan -W -f sudoers.ldif

Cuando la operación se realice correctamente, deberías recibir una salida como‘añadiendo nueva entrada «ou=sudo,dc=hwdomain,dc=lan»‘.

setup sudo ou

Ahora introduce el siguiente comando‘ldapsearch‘ para encontrar cualquierou’ con el valor‘sudo‘ en el servidor OpenLDAP.

sudo ldapsearch -x -b "dc=hwdomain,dc=lan" ou=sudo

La salida siguiente confirma que el ‘ ou=sudo‘ se ha añadido y está disponible en el servidor OpenLDAP.

verifica sudo o

A continuación, crea otro archivo LDIF que definirá la configuración por defecto de sudoers. Introduce el siguiente comando del editor nano para crear un nuevo archivo‘sudoconf.ldif‘.

sudo nano sudoconf.ldif

Añade las siguientes líneas al archivo.

# sudoconf.ldif

dn: cn=defaults,ou=sudo,dc=hwdomain,dc=lan
objectClass: sudoRole
objectClass: top
cn: defaults
sudoOption: env_reset
sudoOption: mail_badpass
sudoOption: secure_path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
#sudoOrder: 1

Guarda y cierra el archivo cuando hayas terminado.

Ahora introduce el siguiente comando ‘ldapadd‘ para añadir la configuración por defecto de sudoers al Servidor OpenLDAP. Cualquier usuario de OpenLDAP dentro de‘ou=sudo‘ aplicará la configuración por defecto de sudoers.

sudo ldapadd -x -D cn=Manager,dc=hwdomain,dc=lan -W -f sudoconf.ldif

Introduce tu contraseña de root de OpenLDAP cuando se te solicite. Si tienes éxito, obtendrás una salida como ésta:

configuración por defecto sudoconf

Con esto, la configuración de sudoers en el servidor OpenLDAP ha finalizado. Ahora puedes añadir usuarios de OpenLDAP a ‘ou=sudo‘, que permite a los usuarios de OpenLDAP ejecutar el comando sudo.

Añadir usuarios OpenLDAP a Sudo

En esta sección, aprenderás a añadir OpenLDAP a la ‘ou=sudo’ para permitir a los usuarios ejecutar el comando ‘sudo’ en las máquinas cliente OpenLDAP. Con esto, añades un usuario OpenLDAP existente al ‘ou=sudo‘ o añades un nuevo usuario con el ‘ou=sudo‘.

Crea un nuevo archivo LDIF ‘adduser_sudo.ldif ‘ utilizando el siguiente comando del editor nano.

nano adduser_sudo.ldif

Añade las siguientes líneas al archivo. Esto añadirá un usuario OpenLDAP existente ‘rocky’ al ‘ou=sudo‘ y permitirá al usuario ‘rocky’ ejecutar el comando‘sudo‘ en las máquinas cliente. Además, asegúrate de cambiar el nombre de dominio ‘dc=hwdomain,dc=lan‘ por el dominio de tu servidor OpenLDAP.

# adduser_sudo.ldif

dn: cn=rocky,ou=sudo,dc=hwdomain,dc=lan
objectClass: sudoRole
objectClass: top
cn: rocky
sudoCommand: ALL
sudoHost: ALL
sudoRunAsUser: ALL
sudoUser: rocky

Guarda y cierra el archivo cuando hayas terminado.

Si quieres crear un nuevo usuario OpenLDAP con el valor por defecto‘ou=sudo‘, utiliza el siguiente archivo LDIF y asegúrate de cambiar el parámetro de‘userPassword‘, el nombre de usuario y el nombre de dominio por defecto de tu servidor OpenLDAP.

# adduser.ldif

dn: uid=rocky,ou=People,dc=hwdomain,dc=lan
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
cn: rocky
sn: temp
userPassword: {SSHA}cDG5NuQd+rYn6rWh1r5UnysUOwJlt1uk
loginShell: /bin/bash
uidNumber: 2000
gidNumber: 2000
homeDirectory: /home/rocky
shadowLastChange: 0
shadowMax: 0
shadowWarning: 0

dn: cn=rocky,ou=Group,dc=hwdomain,dc=lan
objectClass: posixGroup
cn: rocky
gidNumber: 2000
memberUid: rocky

dn: cn=rocky,ou=sudo,dc=hwdomain,dc=lan
objectClass: sudoRole
objectClass: top
cn: rocky
sudoCommand: ALL
sudoHost: ALL
sudoRunAsUser: ALL
sudoUser: rocky

A continuación, introduce el siguiente comando ‘ldapadd’ para aplicar los cambios a los servidores OpenLDAP. Cuando se te solicite, introduce la contraseña de tu servidor OpenLDAP.

sudo ldapadd -x -D cn=Manager,dc=hwdomain,dc=lan -W -f adduser_sudo.ldif

Cuando lo hagas correctamente, deberías recibir una salida como‘añadiendo nueva entrada «cn=rocky,ou=sudo,dc=hwdomain,dc=lan»‘.

añadir usuarios de OpenLDAP a sudo

Por último, introduce el siguiente comando‘ldapsearch‘ para mostrar y verificar la lista de usuarios deou=sudo’. Con esto, deberías ver a tu nuevo usuario añadido y disponible en el ‘ou=sudo‘.

sudo ldapsearch -x -b "ou=sudo,dc=hwdomain,dc=lan"

verificar usuarios sudo openldap

En este punto, ya has añadido un usuario OpenLDAP existente llamado‘rocky‘ al ‘ou=sudo‘ y permite al usuario ejecutar el comando‘sudo‘ en las máquinas cliente.

En el siguiente paso, añadirás nuevas configuraciones al servicio SSSD para habilitar los sudoers sobre el servidor OpenLDAP.

Configuración de la máquina cliente OpenLDAP

En la máquina cliente, debes añadir algunos ajustes a las configuraciones nsswitch y sssd. Asegúrate de ejecutar los siguientes comandos en la máquina cliente OpenLDAP.

En el archivo de configuración de Nsswitch ‘/etc/nsswitch.conf‘, debes definir el servicio de nombres sudoers para permitir la gestión de sudoers a través del servicio SSSD. A continuación, en el archivo de configuración SSSD ‘ /etc/sssd/sssd.conf’, debes añadir el‘sudo_provider‘ del‘ldap‘, definir el servicio‘sudo‘, y luego añadir la sección ‘[sudo]’ para la configuración adicional de sudoers.

Abre el archivo de configuración de Nsswitch‘/etc/nsswitch.conf‘ utilizando el siguiente comando del editor nano.

sudo nano /etc/nsswitch.conf

Añade la siguiente configuración para definir el servicio de nombre‘sudoers‘ y permitir su gestión a través del servicio SSSD.

sudoers: files sss

Guarda y cierra el archivo cuando hayas terminado.

nsswitch sudoers

A continuación, introduce el siguiente comando del editor nano para abrir el archivo de configuración de SSSD ‘/etc/sssd/sssd.conf‘.

sudo nano /etc/sssd/sssd.conf

En la sección ‘[domain/default]‘, añade los nuevos parámetros‘sudoers_base‘ y‘sudo_provider‘. En la sección ‘[sssd]’, debes añadir‘sudo‘ en el parámetro‘services‘. Si necesitas una configuración adicional de sudoers, añade la sección ‘[sudo]‘ al final de la línea.

[domain/default]
....
sudoers_base ou=sudo,dc=hwdomain,dc=lan
sudo_provider = ldap

[sssd]
services = nss, pam, autofs, sudo
domains = default

[nss]
homedir_substring = /home

[sudo]

Guarda y cierra el archivo cuando hayas terminado.

sssd enable sudo

Por último, introduce el siguiente comando systemctl para reiniciar el servicio SSSD y aplicar los cambios.

sudo systemctl restart sssd

Con el servicio SSSD reiniciado, ya está habilitada la gestión de sudoers a través del servidor OpenLDAP. Todos los usuarios de OpenLDAP que hayan iniciado sesión con el ou predeterminado para sudo podrán ejecutar el comando«sudo» en la máquina cliente.

Verificar la integración de Sudoers con el servidor OpenLDAP

Desde el servidor OpenLDAP, inicia sesión en la máquina cliente en la dirección IP‘192.168.5.80‘ con el usuario OpenLDAP‘rocky‘ mediante el comando‘ssh‘ que aparece a continuación.

ssh [email protected]

Cuando se te solicite, introduce la contraseña. Si lo consigues, deberías haber iniciado sesión en la máquina cliente OpenLDAP.

verificar la integración de sudoers en el servidor OpenLDAP

Introduce los siguientes comandos para verificar el usuario, gid y uid utilizados actualmente. Deberías recibir como salida que el usuario OpenLDAP‘rocky‘ con gid y uid‘2000‘.

id
whoami

Por último, introduce el siguiente comando‘sudo su‘ para verificar la integración de los sudoers con el servidor OpenLDAP.

sudo su

Cuando se te solicite, introduce la contraseña del usuario«rocky«. Si lo consigues, tu terminal se convertirá en‘root@client ….’.

Ahora vuelve a ejecutar el siguiente comando para verificar el usuario actual que estás utilizando y deberías ver que el usuario actual es ‘root‘.

id
whoami

Esto confirma que la integración de sudoers con el servidor OpenLDAP ha finalizado y se ha realizado correctamente.

Conclusión

En este tutorial, has configurado e integrado sudoers con el servidor OpenLDAP que permite a los usuarios de OpenLDAP ejecutar el comando ‘sudo’ en las máquinas cliente. También has integrado sudoers con el servicio SSSD en las máquinas cliente que habilitará automáticamente sudo para los usuarios de OpenLDAP.

Con esto, ahora puedes añadir más usuarios de OpenLDAP al ‘ou=sudo’ para permitir que los usuarios ejecuten sudo en la máquina cliente. Además, debes actualizar la configuración de nsswitch y SSSD en las máquinas cliente para que los usuarios de OpenLDAP puedan conectarse a los proveedores de sudo de OpenLDAP.

Para obtener más detalles sobre OpenLDAP consulta la documentación oficial de OpenLDAP. Y para los sudoers, visita la documentación de sudoers.

También te podría gustar...