Cómo integrar Sudoers con el Servidor FreeIPA
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 que los usuarios sin privilegios ejecuten comandos específicos como usuario root.
Sudo puede configurarse de múltiples formas. Puedes configurar sudo en un ordenador/servidor local o configurar un sudo centralizado mediante software de terceros. En este ejemplo, utilizarás el servidor FreeIPA para configurar el despliegue centralizado de sudo.
FreeIPA incorpora múltiples herramientas que facilitan el trabajo de administrador, entre las que se incluye la integración de sudo. Puedes configurar el acceso completo a sudo para los usuarios de FreeIPA, y configurar sudo para comandos específicos, lo que incluye la regla HBAC (Control de Acceso Basado en el Host) y también el Grupo de Comandos Sudo.
En este tutorial, aprenderás a integrar Sudoers y FreeIPA con dos escenarios. También aprenderás el uso básico de la utilidad de comandos «ipa» para gestionar el usuario, el grupo de usuarios, el grupo de hosts, la Regla Sudo, la Regla HBAC y el Grupo de Comandos Sudo. También aprenderás a configurar e integrar el servicio SSSD con Sudo y FreeIPA en las máquinas cliente.
Requisitos previos
Para completar este tutorial, el servidor FreeIPA debe estar instalado y totalmente configurado. Puedes encontrar tutoriales para Debian, Ubuntu y Rocky Linux aquí:
- https://www.howtoforge.com/how-to-add-ubuntu-system-to-freeipa-server/
- https://www.howtoforge.com/how-to-install-freeipa-on-rocky-linux-9/
- https://www.howtoforge.com/how-to-install-freeipa-server-with-docker-on-debian/
También debes tener un usuario FreeIPA y una máquina cliente configurada como cliente FreeIPA. Además, también se necesita un usuario no root con privilegios de administrador sudo/root tanto en el servidor FreeIPA como en el cliente.
Este ejemplo utiliza dos servidores Rocky Linux con los siguientes detalles:
Hostname IP Address Used as -------------------------------------------------- ipa.hwdomain.lan 192.168.5.20 FreeIPA Server client.hwdomain.lan 192.168.5.75 FreeIPA Client
Cuando estos requisitos de la parte superior estén listos, inicia la integración de Sudoers con FreeIPA.
Permite a los usuarios de FreeIPA ejecutar Sudo completamente
En primer lugar, aprenderás a integrar Sudoers con el servidor FreeIPA creando una Regla Sudo específica que permita a los usuarios ejecutar ‘sudo’. En este ejemplo, configurarás un usuario existente de FreeIPA llamado ‘rocky’ para que pueda ejecutar el comando ‘sudo’ en cada máquina cliente y obtener los privilegios de root.
A continuación se indican los pasos que debes seguir para conseguir integrar Sudoers con el Servidor FreeIPA:
- Verificar usuario y conexiones
- Habilitar la función Sudo en el servicio SSSD (en la máquina cliente)
- Configurar la regla Sudo
- Verificar la integración de Sudoers
Ahora vamos a empezar
Verificar el usuario y la conexión de FreeIPA
En esta sección, verificarás y te asegurarás de que el usuario FreeIPA ‘rocky’ está disponible en el servidor FreeIPA y te asegurarás de que el usuario puede conectarse a la máquina cliente ‘client.hwdomain.lan’.
Este ejemplo utiliza un usuario FreeIPA ‘rocky‘, introduce el siguiente comando ‘ipa’ para asegurarte de que el usuario‘rocky‘ está disponible en el servidor FreeIPA.
ipa user-find rocky
La salida‘1 user matched‘ confirma que el usuario‘rocky’ está disponible en el servidor FreeIPA.
A continuación, introduce el siguiente comando para conectarte a la máquina cliente FreeIPA utilizando el usuario «rocky«. Esto garantizará que el usuario pueda conectarse a las máquinas cliente FreeIPA. En este ejemplo, el servidor llamado‘cliente.hwdomain.lan‘ se utiliza como máquina cliente FreeIPA.
ssh [email protected]
Introduce la contraseña del usuario«rocky«. Tras acceder a la máquina cliente, introduce el siguiente comando para identificar al usuario actual.
whoami id
Introduce el siguiente comando‘sudo su‘ para obtener acceso o privilegios de root. Después de escribir tu contraseña, deberías obtener un error como ‘rocky no está en el archivo sudoers. Se informará de este incidente‘.
sudo su
Habilitar la función Sudo en el servicio SSSD
Antes de configurar Sudoers con FreeIPA, debes habilitar la característica ‘con-sudo’ en el servicio SSSD de la máquina cliente. En esta sección, habilitarás la característica SSSD ‘sudo‘ mediante la utilidad‘authselect‘. Así que asegúrate de ejecutar estos comandos en la máquina cliente‘cliente.hwdomain.lan‘.
Introduce el siguiente comando‘authselect’ para habilitar ‘sudo’ en el servicio SSSD. Debes habilitar la función ‘sudo’ en SSSD para que los usuarios de FreeIPA puedan ejecutar el comando‘sudo‘ en la máquina cliente.
sudo authselect enable-feature with-sudo
A continuación, reinicia el servicio SSSD mediante la siguiente utilidad de comandos systemctl. A continuación, verifica el servicio SSSD para asegurarte de que se está ejecutando.
sudo systemctl restart sssd sudo systemctl status sssd
Una salida‘activo (en ejecución)’ confirma que el servicio SSSD se está ejecutando en la máquina cliente.
Por último, introduce el siguiente comando para mostrar la lista de funciones activadas en la fuente de autenticación actual. En la máquina cliente FreeIPA, SSSD está activado por defecto como fuente de autenticación.
authselect current
En la sección«Funciones activadas», deberías ver el parámetro«con-sudo«. Esto confirma que la función ‘sudo‘ está activada en el perfil de autenticación SSSD.
Configurar la regla Sudo
Sudo es una aplicación que te permite ejecutar el comando como usuario root o también puedes obtener el usuario root con ella. Por defecto, Freeipa soporta Sudo y proporciona una utilidad de línea de comandos para integrar Sudo con el servidor FreeIPA.
En esta sección, integrarás Sudo con FreeIPA creando una Regla Sudo. Primero configurarás el grupo de usuarios, y luego configurarás la Regla Sudo que permita a cualquier usuario del grupo específico acceder a Sudo y ejecutarlo.
En el servidor FreeIPA, introduce el siguiente comando para crear un nuevo grupo llamado‘sysadmin‘ en el servidor FreeIPA. A continuación, comprueba los detalles del grupo ‘sysadmin‘.
ipa group-add --desc='Sysadmin Team' sysadmin ipa group-find sysadmin
La salida ‘Añadido grupo «sysadmin»‘ confirma que se ha creado el nuevo grupo en el servidor FreeIPA. Tras ejecutar el comando ‘ipa group-find‘, deberías obtener una salida como ‘1 grupo coincidente‘, lo que significa que el grupo ‘sysadmin‘ está añadido y disponible.
A continuación, introduce el siguiente comando para crear una nueva Regla Sudo llamada ‘sysadmin_sudo‘. El comando‘ipa sudorule-add‘ es una utilidad que se puede utilizar para añadir la regla sudo al servidor FreeIPA. Además, estás creando una nueva regla sudo con algunos parámetros ‘–hostcat=all –runasusercat=all –runasgroupcat=all –cmdcat=all’ que permiten que esta regla ejecute sudo en cada máquina cliente, y en cualquier usuario o grupo que forme parte de la regla‘sysadmin_sudo’.
ipa sudorule-add sysadmin_sudo \ --hostcat=all --runasusercat=all --runasgroupcat=all --cmdcat=all
La salida‘Regla Sudo Añadida «sysadmin_sudo»‘ confirma que se ha creado la nueva regla sudo.
Ahora introduce el siguiente comando para añadir el grupo‘sysadmin‘ a la regla sudo‘sysadmin_sudo‘. Esto permitirá a cualquier usuario de FreeIPA dentro del grupo ‘sysadmin‘ ejecutar el comando sudo en cada máquina cliente de FreeIPA.
ipa sudorule-add-user sysadmin_sudo --group sysadmin
Comprueba los detalles de la regla sudo‘sysadmin_sudo‘ utilizando el siguiente comando. En la sección ‘Grupo de usuarios’, deberías ver el grupo ‘sysadmin‘ añadido y disponible en la regla ‘sysadmin_sudo‘.
ipa sudorule-show sysadmin_sudo
Por último, introduce el siguiente comando para añadir el usuario‘rocky’ de FreeIPA al grupo ‘sysadmin‘. A continuación, comprueba los detalles del grupo ‘sysadmin‘ para asegurarte de que tu usuario está añadido.
ipa group-add-member --user=rocky sysadmin ipa group-show sysadmin
En los detalles del grupo ‘sysadmin‘, deberías ver al usuario ‘rocky‘ añadido y este grupo también forma parte de la regla sudo‘sysadmin_sudo‘.
Llegados a este punto, ya has configurado y permitido al usuario «rocky» a través del grupo «sysadmin» y de la regla Sudo«sysadmin_sudo» ejecutar Sudo en todas las máquinas cliente. En el siguiente paso, verificarás la integración de Sudo con el servidor FreeIPA.
Verificar la integración de Sudo con FreeIPA
En esta sección, te asegurarás de que la integración de Sudo con FreeIPA funciona. Para ello, inicia sesión en la máquina cliente como usuario«rocky» y ejecuta el comando«sudo» para obtener privilegios de root.
Introduce el siguiente comando para conectarte a la máquina cliente FreeIPA ‘cliente.hwdomain.lan’ utilizando el usuario ‘rocky‘. Cuando se te solicite, introduce la contraseña del usuario«rocky».
ssh [email protected]
Una vez conectado a la máquina cliente, ejecuta el siguiente comando para identificar tu usuario actual. Deberías ver que has iniciado sesión como usuario ‘rocky‘.
id whoami
Ahora introduce el siguiente comando‘sudo‘ para verificar los privilegios de root ‘sudo’ del usuario‘rocky’ de FreeIPA. Cuando se te solicite, introduce la contraseña del usuario «rocky«.
sudo id sudo su
Cuando la operación se realice correctamente, deberías ver que el símbolo del sistema cambia a‘root@hostname ...’. Esto confirma que ahora tienes privilegios de root y que has iniciado sesión como usuario root.
Identifica tu usuario actual utilizando el siguiente comando. Deberías ver que has iniciado sesión como usuario«root«.
id whoami
Teniendo esto en cuenta, ya has integrado con éxito Sudoers con el servidor FreeIPA. Cualquier usuario dentro del grupo‘sysadmin‘ puede ahora ejecutar el comando‘sudo‘ y obtener los privilegios de root en cada máquina cliente.
Permite a los usuarios de FreeIPA ejecutar Sudo para comandos específicos
Para este escenario, configurarás un nuevo usuario FreeIPA que podrá acceder a la máquina cliente y ejecutar Sudo para comandos específicos.
En este ejemplo, crearás un nuevo usuario llamado«max» que podrá acceder a la máquina cliente«cliente.hwdomain.lan» a través de SSH y ejecutar Sudo pero para algunos comandos de gestión de la pila LEMP.
Para conseguirlo, tendrás que realizar los siguientes pasos:
- Crear Usuario y Grupo FreeIPA
- Crear un Grupo de Anfitriones
- Creación de la Regla HBAC (Control de Acceso Basado en el Host)
- Creación de la Regla Sudo
- Crear un Grupo de Comandos Sudo
- Verificar la integración de Sudo con FreeIPA
Ahora vamos a empezar
Crear usuario y grupo FreeIPA
En primer lugar, tendrás que crear y definir un usuario y un grupo específicos. En este ejemplo, crearás un nuevo usuario«max» y el grupo de usuarios«systemadmin» en el servidor FreeIPA. También verificarás el nuevo usuario‘max’ para asegurarte de que puede acceder e iniciar sesión en la máquina cliente ‘client.hwdomain.lan‘.
Crea un nuevo usuario FreeIPA llamado‘max’ introduciendo el siguiente comando‘ipa user-add‘. Introduce la contraseña de tu nuevo usuario cuando se te pida y repite la operación.
ipa user-add max --first=Max --last=Rods --password
Ahora verifica los detalles del usuario ‘max‘ utilizando el siguiente comando. Deberías ver la configuración detallada por defecto del usuario«max».
ipa user-find max
A continuación, introduce el siguiente comando para añadir un nuevo grupo«systemadmin«. A continuación, añade el usuario«max» al grupo «sysadmin«.
ipa group-add --desc='System Admin Team' systemadmin ipa group-add-member --user=max systemadmin
Comprueba la configuración detallada del grupo «systemadmin» utilizando el siguiente comando. Deberías ver que el usuario«max» está añadido y disponible en el grupo «systemdadmin«.
ipa group-show systemadmin
Para asegurarte de que el nuevo usuario puede iniciar sesión en la máquina cliente, introduce el siguiente comando ssh. En este ejemplo, el usuario«max» iniciará sesión en la máquina cliente«cliente.hwdomain.lan«.
ssh [email protected]
Cuando se te solicite, introduce tu contraseña. También se te pedirá que cambies la contraseña por defecto. Así que introduce tu contraseña actual, luego introduce la nueva contraseña y repite.
Después de iniciar sesión, identifica tu usuario actual utilizando el siguiente comando.
id whoami
Deberías ver que has iniciado sesión como usuario«max» en«cliente.dominio.h«.
Crear un grupo de host
Tras crear el usuario y el grupo, ahora crearás y configurarás el grupo Host en FreeIPA. Crearás un nuevo grupo de hosts llamado‘appserver‘, y el miembro de este grupo será un ‘cliente.dominio.hw’.
Comprueba la lista de hosts disponibles en la FreeIPA utilizando el siguiente comando. Esto te mostrará la lista de máquinas disponibles en la FreeIPA. En este ejemplo, hay dos máquinas disponibles en el servidor FreeIPA:‘ipa.hwdomain.lan’ y‘client.hwdomain.lan ‘.
ipa host-find
Ahora crea un nuevo grupo de hosts llamado ‘appserver‘. A continuación, añade el host ‘cliente.dominiohdominio.lan’ al grupo de hosts ‘appserver‘.
ipa hostgroup-add appserver ipa hostgroup-add-member appserver --hosts=client.hwdomain.lan
Verifica el grupo de servidores «appserver» detallado utilizando el comando que aparece a continuación. Deberías ver que el host «client.hwdomain.lan» está añadido y disponible en el grupo de host «appserver«.
ipa hostgroup-show appserver
Crear regla HBAC (Control de Acceso Basado en el Host)
Una vez creado el grupo de servidores «appserver», configura la regla HBAC (control de acceso basado en host) en el servidor FreeIPA. Con la Regla HBAC, puedes configurar y definir políticas que restrinjan el acceso a hosts o servicios basándose en el usuario que intenta acceder y los grupos de ese usuario, el host al que intenta acceder (o sus Grupos de Host) y (opcionalmente) el servicio al que se accede.
En esta sección, desactivarás la regla HBAC por defecto y establecerás una regla HBAC personalizada llamada«operation_admin» que permita al usuario«max» o al grupo«systemadmin» administrar cualquier host dentro del grupo de host«appserver» mediante SSH. Además, este usuario o grupo podrá ejecutar los comandos«sudo» y«sudo -l «.
Introduce el siguiente comando para desactivar la regla HBAC por defecto‘allow_all’. A continuación, comprueba los detalles de la regla HBAC ‘allow_all‘.
ipa hbacrule-disable allow_all ipa hbacrule-show allow_all
La salida ‘Deshabilitada regla HBAC «allow_all» confirma que la regla está deshabilitada. Además, en la sección ‘Habilitada‘, deberías ver que el valor ha cambiado a‘false‘.
Con la regla HBAC «allow_all» deshabilitada por defecto, ningún usuario podrá acceder a la máquina cliente.
A continuación, crea una nueva regla HBAC personalizada llamada ‘operation_admin‘ utilizando el siguiente comando‘ipa hbacrule-add‘.
ipa hbacrule-add operation_admin
Ahora añade el grupo de host«appserver» mediante el comando «ipa hbacrule-add-host« y el grupo de usuarios«sysadmin» mediante el comando «ipa hbacrule-add-user» a la regla HBAC «operation_admin«.
ipa hbacrule-add-host operation_admin --hostgroup appserver ipa hbacrule-add-user operation_admin --group systemadmin
A continuación, añade servicios como«sshd, sudo y su » a la regla HBAC «operation_admin«. Cualquier máquina o grupo de máquinas dentro de la regla HBAC «operation_admin» se verá afectado y podrá acceder a estos comandos o ejecutarlos.
ipa hbacrule-add-service operation_admin --hbacsvcs=sshd ipa hbacrule-add-service operation_admin --hbacsvcs=sudo --hbacsvcs=su-l
Comprueba los detalles de la regla HBAC «operation_admin» utilizando el siguiente comando. Deberías ver tres servicios«sshd«,«sudo» y«su-l» añadidos y disponibles en la «operación_admin«.
ipa hbacrule-show operation_admin
En este punto, sólo los usuarios/grupos dentro de la regla ‘operation_admin’ podrán iniciar sesión en la máquina cliente. El usuario «rocky» no puede iniciar sesión en la máquina cliente«client.hwdomain.lan«, pero el usuario«max» puede iniciar sesión en«client.hwdomain.lan«. Esto se debe a que el usuario«max» forma parte del grupo«systemadmin«, que se aplica a la regla HBAC«operation_admin«.
El inicio de sesión como usuario ‘rocky‘ será definido por la máquina cliente.
ssh [email protected]
El inicio de sesión como usuario ‘max‘ está permitido porque forma parte del grupo ‘systemadmin‘.
ssh [email protected]
Creación de la Regla Sudo
En esta sección, crearás y configurarás una nueva Regla Sudo en FreeIPA. Luego, también asignarás esta Regla Sudo al grupo específico ‘systemadmin‘ y al grupo host‘appserver‘.
Introduce el siguiente comando para añadir una nueva Regla Sudo llamada‘systemadmin_sudo‘. En este ejemplo, estás creando una nueva regla sudo que sólo se aplicará al usuario y al grupo con el parámetro‘–runasusercat=all –runasgroupcat=all’. Con esto, no todos los comandos se pueden ejecutar con sudo o como root y esta regla se puede aplicar a clientes o hosts específicos.
ipa sudorule-add systemadmin_sudo \ --runasusercat=all --runasgroupcat=all
Ahora introduce el siguiente comando para añadir el grupo de usuarios «systemdadmin» y el grupo de hosts «appserver» a la regla sudo «systemadmin_sudo». Con esto, ‘systemadmin_sudo’ sólo se aplicará a los usuarios del grupo ‘systemadmin’ y a los hosts/clientes del grupo ‘appserver’.
ipa sudorule-add-user systemadmin_sudo --group systemadmin ipa sudorule-add-host systemadmin_sudo --hostgroup appserver
Creación del Grupo de Comandos Sudo
Una vez creada la Regla Sudo, ahora deberás configurar y definir el Grupo de Comandos Sudo en FreeIPA. Con esto, puedes vincular múltiples comandos a algún Grupo de Comandos Sudo específico, y luego puedes aplicar el Grupo de Comandos Sudo a la Regla Sudo específica.
En este ejemplo, definirás algunos comandos en FreeIPA que se utilizarán para iniciar y reiniciar el servicio LEMP Stack. A continuación, crearás un nuevo grupo de Comandos Sudo llamado‘systemadmin_cmds‘ y añadirás tus comandos a él. Por último, asignarás el Grupo de Comandos Sudo «systemadmin_cmds » a la Regla Sudo«systemadmin_sudo«.
Introduce el siguiente comando para añadir nuevos comandos al servidor FreeIPA. En este ejemplo, añadirás comandos que se pueden utilizar para gestionar la Pila LEMP. Puedes iniciar y reiniciar los servicios Nginx, MariaDB y PHP-FPM.
ipa sudocmd-add "/usr/bin/systemctl start nginx" ipa sudocmd-add "/usr/bin/systemctl restart nginx"
ipa sudocmd-add «/usr/bin/systemctl start php-fpm»
ipa sudocmd-add «/usr/bin/systemctl restart php-fpm»
ipa sudocmd-add «/usr/bin/systemctl start mariadb»
ipa sudocmd-add «/usr/bin/systemctl restart mariadb»
A continuación, añade un nuevo grupo de comandos sudo llamado‘systemadmin_cmds‘. A continuación, añade todos los comandos que se utilizan para gestionar la Pila LEMP al grupo de comandos sudo ‘systemadmin_cmds‘.
ipa sudocmdgroup-add systemadmin_cmds ipa sudocmdgroup-add-member systemadmin_cmds \ --sudocmds "/usr/bin/systemctl start nginx" \ --sudocmds "/usr/bin/systemctl restart nginx" \ --sudocmds "/usr/bin/systemctl start php-fpm" \ --sudocmds "/usr/bin/systemctl restart php-fpm" \ --sudocmds "/usr/bin/systemctl start mariadb" \ --sudocmds "/usr/bin/systemctl restart mariadb"
La salida ‘Añadido grupo de comandos sudo «systemdadmin_cmds»‘ confirma que se ha creado el nuevo grupo de comandos sudo. Además, la salida ‘Número de miembros añadidos 6‘ confirma que has añadido 6 comandos al grupo de comandos sudo ‘systemdadmin_cmds‘.
Por último, introduce el siguiente comando para añadir el grupo de comandos sudo ‘systemadmin_cmds‘ a la regla sudo‘systemadmin_sudo‘. Con esto, los usuarios dentro de la regla sudo ‘systemadmin_sudo‘ podrán ejecutar 6 comandos sudo que están disponibles en el grupo de comandos sudo ‘systemadmin_cmds’.
ipa sudorule-add-allow-command systemadmin_sudo --sudocmdgroups systemadmin_cmds
Verificar la integración de Sudo con FreeIPA
Para verificar la implementación de Sudo y la integración con FreeIPA en este escenario, iniciarás sesión en el ‘cliente.hwdomain.lan’ a través del nuevo usuario ‘max’. A continuación, ejecutarás algunos de los comandos que se utilizarán para gestionar los servicios de la Pila LEMP.
Inicia sesión en el cliente .hwdomain.lan con el usuario «max» utilizando el siguiente comando ssh. Introduce la contraseña cuando se te solicite.
ssh [email protected]
Tras iniciar sesión, introduce el siguiente comando para identificar tu usuario actual. Verás que has iniciado sesión como usuario«max».
id whoami
A continuación, introduce el siguiente comando para reiniciar los servicios de la Pila LEMP. Cuando se te solicite, introduce la contraseña del usuario«max». La operación debería tener éxito porque el usuario‘max’ está autorizado a ejecutar estos comandos como‘sudo‘.
sudo /usr/bin/systemctl restart nginx sudo /usr/bin/systemctl restart php-fpm sudo /usr/bin/systemctl restart mariadb
Ahora, si intentas ejecutar el comando‘systemctl stop‘, la operación debería fallar y aparecerá un error como‘Lo sentimos, el usuario ‘max’ tiene permiso para ejecutar … como root en el cliente.hwdomain.lan‘.
sudo /usr/bin/systemctl stop nginx sudo /usr/bin/systemctl stop php-fpm sudo /usr/bin/systemctl stop mariadb
Con esto, ya has terminado la configuración de Sudoers con el servidor FreeIPA para permitir que se ejecuten comandos específicos como sudo o como root.
Conclusión
Este tutorial te ha enseñado a integrar Sudoers con el servidor FreeIPA. También has aprendido algunos comandos básicos de la utilidad ‘ipa’ para gestionar usuarios, grupos, grupo host, regla sudo, regla HBAC (Host-Based Access Control) y grupo de comandos sudo. Aprendiste la integración básica de Sudoers con el servidor FreeIPA con dos escenarios diferentes: Permitir a los usuarios ejecutar sudo para todos los comandos y hosts y permitir a los usuarios ejecutar sudo sólo con comandos específicos en hosts/clientes específicos.
Además, también has aprendido la configuración básica del servicio SSSD y lo has integrado con Sudo a través del servidor FreeIPA.
Con esta implementación de Sudo, puedes poner en práctica estos dos escenarios en tu servidor de despliegue. Para saber más, visita la documentación oficial de FreeIPA y Sudoer.