Gestionando permisos sudo con FreeIPA: instalación y primeros pasos

Introducción

En entornos corporativos o educativos donde se gestionan múltiples equipos y usuarios, contar con una herramienta centralizada para la autenticación y la administración de permisos es clave. FreeIPA es una solución de código abierto que combina LDAP, Kerberos, DNS y otros servicios para ofrecer un sistema de identidad, políticas y auditoría unificado.Una de sus funcionalidades más útiles es la posibilidad de gestionar de forma centralizada los permisos sudo, lo que permite controlar qué usuarios pueden ejecutar comandos como superusuario en los distintos sistemas Linux unidos al dominio FreeIPA. Esto mejora tanto la seguridad como la eficiencia en la administración de sistemas.En este artículo veremos cómo instalar FreeIPA y configurar sus primeros permisos sudo para usuarios o grupos.Requisitos previos: preparando el servidor para FreeIPA

Antes de comenzar con la instalación de FreeIPA, es fundamental preparar adecuadamente la máquina que actuará como servidor. Preferiblemente se recomienda utilizar un sistema basado en Rocky Linux o AlmaLinux, ya que son compatibles y estables para entornos empresariales.

1. Establecer un hostname estático

FreeIPA y Kerberos dependen de una correcta configuración del nombre del host. Por ello, es imprescindible asegurarse de que el hostname esté completamente calificado (FQDN) y sea estático.

Puedes comprobarlo con: hostname -f

Este debe devolver algo como server.ipa.test, nunca localhost.

Para establecerlo de forma permanente, edita /etc/hostname y asegúrate de que contenga el nombre FQDN. También es recomendable reflejarlo en /etc/hosts de esta forma:

10.0.0.1 server.ipa.test server

2. Asignar una IP estática

La dirección IP del servidor también debe ser estática. Usar DHCP puede causar problemas con la resolución DNS y la validación de Kerberos. Puedes configurar una IP estática editando el archivo de configuración de red correspondiente, o usando nmtui o nmcli, dependiendo del sistema.

3. Configurar correctamente el firewall

FreeIPA necesita varios puertos abiertos para funcionar correctamente (LDAP, Kerberos, DNS, HTTPS, etc.). Puedes abrirlos con firewalld utilizando reglas predefinidas. Por ejemplo:

firewall-cmd --add-service=freeipa-ldap --add-service=freeipa-ldaps
firewall-cmd --add-service=freeipa-ldap --add-service=freeipa-ldaps --permanent

4. Comprobar los requisitos del sistema

FreeIPA requiere al menos 2 GB de RAM para un entorno básico de pruebas y considerablemente más para producción, sobre todo si se instala con servidor DNS y CA integrada.

Instalación de FreeIPA

Una vez que el servidor está correctamente configurado con un hostname FQDN, IP estática y firewall ajustado, el siguiente paso es instalar los paquetes necesarios para desplegar FreeIPA.

En una terminal con privilegios administrativos, ejecuta el siguiente comando:

sudo dnf install freeipa-server freeipa-server-dns freeipa-client -y

Este comando instalará:

  • freeipa-server: el núcleo del servidor FreeIPA.
  • freeipa-server-dns: el componente que permite integrar un servidor DNS gestionado por FreeIPA.
  • freeipa-client: el cliente necesario para unir sistemas al dominio FreeIPA (útil si más adelante configuras otros nodos).

Nota: Esta instalación solo descarga los paquetes necesarios, pero no realiza aún la configuración del servidor. El siguiente paso será ejecutar el asistente de instalación para dejar todo listo.

Una vez completada la instalación, puedes proceder a configurar FreeIPA ejecutando el asistente interactivo con:

sudo ipa-server-install

Este comando iniciará un proceso guiado en el terminal donde se te pedirá información como el dominio, el nombre del servidor, la contraseña del administrador, si deseas configurar un servidor DNS, entre otros.

Alternativamente, también puedes pasar todos estos parámetros directamente en una sola línea de comando para automatizar la instalación. Por ejemplo:

sudo ipa-server-install --realm=IPA.TEST --domain=ipa.test --ds-password=Contraseña123 --admin-password=Contraseña123 --setup-dns --no-forwarders

Si te quieres pelear con los puertos y el firewall (cosa que no estaría mal para producción) esta es la lista:

Puertos necesarios para FreeIPA

FreeIPA requiere que varios puertos estén abiertos para que los clientes y otros servidores puedan comunicarse correctamente con el servicio. A continuación se presenta una tabla con los principales puertos utilizados:

ProtocoloPuertoServicio
TCP80HTTP (interfaz web, redirección)
TCP443HTTPS (interfaz web segura)
TCP/UDP389LDAP
TCP/UDP636LDAPS (LDAP seguro)
TCP/UDP88Kerberos
TCP/UDP464Kerberos (cambio de contraseña)
UDP123NTP (sincronización horaria)
TCP/UDP53DNS

Consejo: asegúrate de que estos puertos estén abiertos tanto temporalmente (con --add) como de forma permanente (con --permanent) usando firewall-cmd.

Abrir puertos temporalmente (hasta el siguiente reinicio del firewall):

firewall-cmd --add-service=freeipa-ldap
firewall-cmd --add-service=freeipa-ldaps
firewall-cmd --add-service=dns
firewall-cmd --add-service=http
firewall-cmd --add-service=https
firewall-cmd --add-service=ntp

Hacer que los cambios sean persistentes:

firewall-cmd --add-service=freeipa-ldap --permanent
firewall-cmd --add-service=freeipa-ldaps --permanent
firewall-cmd --add-service=dns --permanent
firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
firewall-cmd --add-service=ntp --permanent

Comprobación con kinit

Ejecuta el siguiente comando:

kinit admin

Se te pedirá la contraseña del usuario admin que definiste durante la instalación. Si todo está correcto, no mostrará ningún mensaje, lo cual significa que se ha obtenido correctamente un ticket Kerberos.

Puedes verificar que el ticket se ha obtenido con:

klist

Esto debería mostrar algo como:

Ticket cache: KEYRING:persistent:1000:1000
Default principal: admin@IPA.TEST

Valid starting     Expires            Service principal
04/30/25 11:43:21  04/30/25 21:43:21  krbtgt/IPA.TEST@IPA.TEST

Si kinit falla, revisa que el hostname esté bien configurado, que el servidor esté resolviendo DNS correctamente y que los puertos estén abiertos en el firewall.

Con esto ya tendríamos el servidor «listo» para empezar a jugar. Ahora necesitaremos añadir un cliente.

Añadir un cliente al dominio FreeIPA

Una vez que el servidor FreeIPA está operativo, el siguiente paso es unir un cliente Linux al dominio para que pueda autenticarse y usar políticas centralizadas (como sudo).

1. Configurar la resolución DNS del servidor FreeIPA

Habría que buscar los DNS, si es un Ubuntu como es el caso probablemente sea un netplan.

En mi caso una vez cambiados luce tal que así:

2. Instalar el cliente de FreeIPA

En la máquina cliente (por ejemplo, otro Rocky, AlmaLinux, Debian, Ubuntu… aunque para los ejemplos usaremos una maquina Ubuntu ubs, y Debian deb), instala el paquete necesario:

sudo apt install freeipa-client sssd-krb5 realmd oddjob-mkhomedir sssd-tools -y

3. Unir el cliente al dominio

A continuación, ejecuta el asistente de instalación interactivo:

sudo ipa-client-install --enable-dns-updates --mkhomedir

Este comando detectará el servidor IPA (si hay resolución DNS correcta) o te pedirá que lo introduzcas. El asistente solicitará también:

  • El nombre del dominio IPA (por ejemplo, ipa.test)
  • El FQDN del servidor FreeIPA
  • Si deseas configurar automáticamente NTP
  • Credenciales del usuario admin para unir el cliente al dominio

⚠️ Asegúrate de que el hostname del cliente esté correctamente configurado y que tenga resolución DNS del servidor FreeIPA.

3. Verificar la unión al dominio

Una vez completado el proceso, prueba iniciar sesión como usuario del dominio, o verifica que puedes obtener un ticket Kerberos:

kinit admin

Y comprueba con:

klist

Si obtienes un ticket, el cliente está correctamente unido.

También podemos hacer un host-find para ver los equipos actuales en el freeipa ipa host-find

Aquí se ve el servidor y el cliente recién añadido.

Gestión de usuarios y permisos

Una vez que el servidor FreeIPA está en funcionamiento, puedes añadir usuarios al dominio directamente desde la línea de comandos usando ipa user-add.

Creación de usuario: deltoro

En la imagen se muestra el proceso de creación del usuario deltoro, correspondiente a Miguel Ángel Del Toro Medina:

Se ejecuta el siguiente comando:

ipa user-add deltoro

Tras crear un usuario, es habitual realizar algunos ajustes adicionales como establecer un shell más completo, asignarle una contraseña o añadirlo a grupos administrativos.

En la siguiente imagen se muestra cómo se modifica el usuario deltoro:

El comando utilizado fue:

ipa user-mod deltoro --shell=/bin/bash

Esto cambia el shell por defecto de /bin/sh a /bin/bash, proporcionando una experiencia más completa al iniciar sesión.

Después de crear el usuario y ajustar sus propiedades, es necesario establecer una contraseña para que pueda autenticarse en el dominio.

En la imagen se muestra cómo se realiza este proceso con el comando:

ipa passwd deltoro

Esto indica que el usuario ya puede iniciar sesión en cualquier cliente unido al dominio FreeIPA utilizando su nombre de usuario y la nueva contraseña establecida.

⚠️ Ten en cuenta que la primera vez que inicie sesión, el sistema podría pedirle cambiar la contraseña si se ha marcado como temporal.

Esto también se puede hacer por gestión web desde el panel de control de FreeIPA.

Gestión desde la interfaz web de FreeIPA

Todo lo que hemos hecho hasta ahora —crear un usuario, modificarlo, asignar grupos y establecer contraseña— puede gestionarse también desde la interfaz web de FreeIPA. Esta ofrece una forma visual, cómoda e intuitiva de administrar el dominio.

Para acceder a ella, solo necesitas abrir un navegador web y escribir la URL del servidor FreeIPA, por ejemplo:

https://server.ipa.tes

⚠️ Importante: resolución DNS desde el navegador

El navegador debe ser capaz de resolver el nombre del servidor FreeIPA. Esto significa que si accedes desde un sistema Windows o desde otro equipo que no esté dentro del dominio, tendrás que asegurarte de una de estas opciones:

  • Añadir el servidor FreeIPA como DNS en la configuración de red del sistema, o
  • Editar el archivo hosts en Windows para añadir una línea como esta:
10.168.2.152    server.ipa.test

El archivo hosts en Windows se encuentra en:
C:\Windows\System32\drivers\etc\hosts

Una vez resuelto correctamente el nombre, podrás acceder a la web. La primera vez el navegador te mostrará una advertencia de seguridad porque el certificado es autofirmado. Acepta la excepción para continuar.

Luego inicia sesión con el usuario admin o cualquier otro que tenga permisos, y ya tendrás acceso completo al panel de gestión de usuarios, políticas, sudo, grupos y más.

Además de la línea de comandos, FreeIPA permite crear usuarios de forma gráfica a través de su interfaz web. Esta opción resulta especialmente útil para administradores que prefieren trabajar visualmente o para tareas rápidas sin necesidad de conectarse por terminal.

En la siguiente imagen se muestra el formulario de creación de un nuevo usuario:

Los campos más importantes a completar son:

  • User login: el nombre de usuario, por ejemplo madeltorom01.
  • First name y Last name: aunque en este caso se ha duplicado el login por simplicidad, pueden ser el nombre real del usuario.
  • GID: grupo primario del usuario. FreeIPA genera uno por defecto si no se especifica, pero también se puede seleccionar uno ya existente.
  • New Password y Verify Password: permiten establecer la contraseña desde la propia interfaz.

Una vez rellenados los campos obligatorios (marcados con *), puedes elegir entre:

  • Add: crear el usuario y volver a la lista.
  • Add and Add Another: útil para añadir varios usuarios seguidos.
  • Add and Edit: crea el usuario y abre su ficha para editar más atributos (grupos, sudo, correo, etc.).

💡 Esta opción es ideal para gestionar usuarios sin memorizar comandos, y permite aplicar cambios posteriores desde la misma interfaz web.

Gestión mixta: crear grupos desde terminal y asignarlos en la web

FreeIPA permite un enfoque flexible donde puedes combinar el uso de la terminal con la interfaz web. Por ejemplo, puedes crear un grupo desde la consola y luego usar la interfaz web para asociarlo a usuarios.

En este caso, se ha creado el grupo asir1 desde la terminal con el siguiente comando:

ipa group-add asir1 --desc="Alumnos del ciclo ASIR 1º"

Este comando crea un grupo llamado asir1 con una descripción personalizada. A continuación, desde la interfaz web de FreeIPA, accedemos al usuario madeltorom01 y lo añadimos manualmente a dicho grupo.

En la siguiente imagen, se puede ver al usuario como miembro de los grupos asir1 e ipausers:

Desde esta pestaña «User Groups», al pulsar + Add, se puede seleccionar fácilmente cualquier grupo existente en el sistema y vincularlo al usuario, sin necesidad de comandos adicionales.

💡 Esto es útil cuando los grupos se crean de forma masiva o automatizada desde scripts, y luego se utilizan para asignar permisos sudo, acceso SSH o pertenencia organizativa desde la interfaz.

Probar inicio de sesión y privilegios sudo del usuario del dominio

Una vez creado un usuario en FreeIPA y añadido al grupo deseado, es importante comprobar que puede iniciar sesión en los clientes del dominio y, si corresponde, utilizar privilegios de superusuario mediante sudo.

En la siguiente imagen se observa cómo el usuario madeltorom01 inicia sesión por SSH correctamente en una máquina cliente Debian unida al dominio:

Sin embargo, al intentar ejecutar un comando con sudo, el sistema responde:

madeltorom01 is not allowed to run sudo on miguelangeldtm-ncdeb-vm

Esto indica que, aunque el usuario ha sido autenticado correctamente a través de FreeIPA, no tiene asignado ningún permiso sudo, ni directamente ni a través de un grupo autorizado.

✅ Esta prueba es útil para confirmar que la autenticación está funcionando, pero también que aún no se ha aplicado ninguna política de privilegios.

Crear grupo y regla sudo desde la terminal

Creación del grupo sudoers-group
Se utiliza el comando:

ipa group-add sudoers-group --desc="Grupo con permisos sudo su"

Esto crea un nuevo grupo en FreeIPA, con el nombre sudoers-group y una descripción opcional.

Creación de una regla sudo llamada sudo-su-rule
A continuación, se define una nueva regla de sudo mediante:

ipa sudorule-add sudo-su-rule --desc="Permitir sudo su"

La regla queda activa por defecto (Habilitado: True).

Asociación del grupo a la regla sudo
Finalmente, se vincula el grupo sudoers-group a la regla sudo-su-rule con:

ipa sudorule-add-user sudo-su-rule --groups=sudoers-group

Esto indica que todos los usuarios que pertenezcan a ese grupo estarán cubiertos por la política definida en la regla sudo.

Añadir un usuario a un grupo desde la línea de comandos

En esta imagen se muestra cómo se añade el usuario madeltorom01 al grupo sudoers-group mediante el comando:

ipa group-add-member sudoers-group --users=madeltorom01

Una vez ejecutado, el sistema confirma:

  • El nombre y descripción del grupo.
  • Que el usuario madeltorom01 ha sido añadido como miembro del grupo.
  • Que dicho grupo ya está asociado a la regla sudo sudo-su-rule.

También indica que se ha añadido 1 miembro correctamente.

Asociar una regla sudo a un equipo específico

En esta imagen se muestra cómo se vincula una regla sudo existente (sudo-su-rule) a un host concreto, de modo que solo se aplique en ese sistema:

ipa sudorule-add-host sudo-su-rule --hosts=miguelangeldtm-ncdeb-vm.local

Después de ejecutar el comando, se confirma que:

  • La regla sudo-su-rule sigue activa y asociada al grupo sudoers-group.
  • Se ha añadido correctamente el host miguelangeldtm-ncdeb-vm.local.
  • La salida indica que se ha añadido 1 equipo como miembro de la regla.

Esto asegura que los permisos sudo definidos por la regla se apliquen únicamente a ese host específico.

Añadir comandos sudo permitidos

En esta captura se muestra cómo se añaden explícitamente los comandos su a la lista de comandos permitidos por FreeIPA dentro de las reglas sudo. Esto es necesario para definir con precisión qué comandos puede ejecutar un usuario con privilegios elevados.

Se utilizan los siguientes comandos:

ipa sudocmd-add /usr/bin/su --desc="Permitir su"
ipa sudocmd-add /bin/su --desc="Permitir su"

Cada línea registra una ruta específica del comando su, ya que según la distribución del sistema operativo el binario puede encontrarse en /usr/bin/su o /bin/su.

Al final, ambos comandos quedan registrados en FreeIPA con la descripción «Permitir su», listos para ser asociados a una regla sudo.

Asociar comandos permitidos a una regla sudo

En esta imagen se observa cómo se añaden los comandos previamente definidos (su) a la regla sudo sudo-su-rule, para que los usuarios del grupo autorizado puedan ejecutarlos con privilegios elevados.

Se utilizan los siguientes comandos:

ipa sudorule-add-allow-command sudo-su-rule --sudocmds=/usr/bin/su
ipa sudorule-add-allow-command sudo-su-rule --sudocmds=/bin/su

Cada comando:

  • Agrega un binario (en este caso, su) a la lista de comandos permitidos por la regla.
  • Se refleja en la regla sudo-su-rule, que ya tiene definidos el grupo (sudoers-group) y el host (miguelangeldtm-ncdeb-vm.local).
  • La salida confirma que se han añadido correctamente a la lista de Comandos Allow de sudo.

Al finalizar esta configuración, los usuarios del grupo sudoers-group pueden ejecutar sudo su en el equipo especificado.

Verificación de permisos sudo mediante sssctl

En esta imagen se utiliza la herramienta sssctl para verificar si el usuario madeltorom01 tiene permisos para utilizar sudo, sin necesidad de ejecutar el comando directamente.

El comando ejecutado es:

sssctl user-checks madeltorom01 -s sudo

El resultado muestra:

  • Información completa del usuario recuperada mediante SSSD, incluyendo UID, GID, shell y home.
  • Resultado positivo del chequeo de PAM account management con:
pam_acct_mgmt: Success

Este resultado confirma que el usuario madeltorom01 tiene permiso para ejecutar sudo según las políticas configuradas en FreeIPA y gestionadas localmente por SSSD.

Esta herramienta es muy útil para comprobar permisos sin tener que hacer pruebas manuales con sudo directamente.

Verificación final: ejecución exitosa de sudo su

En esta última imagen se comprueba que el usuario madeltorom01, perteneciente al dominio FreeIPA, ya puede ejecutar comandos con privilegios de superusuario gracias a la configuración de la regla sudo.

Tras iniciar sesión por SSH en la máquina cliente y ejecutar:

sudo su

El sistema solicita la contraseña del usuario y, al introducirla correctamente, se le concede acceso al entorno root, como puede verse por el cambio de prompt:

root@miguelangeldtm-ncdeb-vm:/home/madeltorom01#

✅ Esto confirma que toda la configuración aplicada en FreeIPA —grupo, regla sudo, comandos permitidos y asociación al host— está funcionando correctamente.

Conclusión

A lo largo de este artículo hemos visto cómo desplegar FreeIPA y utilizarlo para gestionar de forma centralizada usuarios y permisos en un entorno Linux. Desde la instalación del servidor y la configuración de un cliente Ubuntu/Debian, hasta la creación de usuarios, grupos y reglas sudo, se ha demostrado cómo FreeIPA puede convertirse en una herramienta potente y flexible para la administración de sistemas en red.

Además, se ha comprobado cómo aplicar políticas de permisos sudo de manera controlada, limitando su uso a ciertos usuarios, grupos y equipos específicos. Esta gestión detallada no solo mejora la seguridad, sino que también facilita el mantenimiento y el control en infraestructuras cada vez más complejas.

Tanto si trabajas desde la línea de comandos como desde la interfaz web, FreeIPA permite mantener una gestión ordenada, escalable y profesional de identidades y accesos en entornos GNU/Linux.