Crear un controlador de dominio de Active Directory con Samba en Ubuntu 24.04 LTS
Seguramente ya sabrás que Samba es un desarrollo de software libre, que implementa el protocolo SMB/CIFS con el objetivo de integrar sistemas GNU/Linux, Mac OS X y similares en redes Microsoft. En general, usando Samba, los equipos con éstos sistemas operativos pueden actuar como clientes o servidores en ese tipo de redes.
Además, desde la versión 4, Samba también permite que el equipo actúe como Controlador de Dominio de Active Directory, pudiendo compartir archivos e impresoras, autenticar usuarios y grupos, establecer permisos, políticas de grupo (GPOs), etc.
Precisamente, este ultimo aspecto será el que resolvamos en el artículo de hoy. Utilizaremos una instalación básica de Ubuntu Server 24.04 LTS para implementar un Controlador de dominio donde los equipos clientes con Microsoft Windows puedan iniciar sesión en el dominio Linux y utilizar sus recursos sin notar la diferencia con un servidor Windows Server.
En particular, el servidor que implementaremos atenderá a los siguientes datos:
-
Nombre del controlador de dominio (hostname): SMB-DC1
-
Nombre DNS del dominio de Active Directory: somebooks.lan
-
Nombre del Reino Kerberos: somebooks.lan
-
Nombre NetBIOS del dominio: somebooks
-
Dirección IP fija del servidor: 192.168.1.15
-
Rol del servidor: Domain Controller (DC)
-
Reenviador DNS: 192.168.1.1
Los pasos que vamos a seguir para completar la tarea son los siguientes:
-
Instalar los paquetes necesarios y preparar el equipo
-
Desactivar los servicios Samba clásicos
-
Aprovisionar el dominio y realizar ajustes
-
Iniciar el controlador y realizar comprobaciones
Una vez que hemos fijado los objetivos, comencemos…
Instalar los paquetes necesarios y preparar el equipo
Como hemos dicho más arriba, para este artículo partiremos de una instalación básica de Ubuntu Server 24.04 LTS. Si aún no dispones de una, en SomeBooks.es ya te hemos explicado cómo llevarla a cabo en el artículo Instalar Ubuntu Server 24.04 LTS (Noble Numbat) desde cero.
A continuación, deberemos realizar diferentes ajustes:
Actualizar el sistema
Para comenzar, nos aseguraremos de que el equipo se encuentra perfectamente actualizado. Para lograrlo, basta con escribir en la consola una orden como la siguiente:
sudo apt update && sudo apt full-upgrade -y
Si necesitas más información sobre esta tarea, puedes consultar nuestro artículo en SomeBooks.es titulado Actualizar Ubuntu 24.04 LTS desde la línea de comandos.
Configurar las características de red
Lo siguiente será configurar las características de red según las necesidades del servidor. Recuerda que un servidor debe tener IP fija.
Como en los casos anteriores, en SomeBooks.es ya te hemos explicado cómo lograrlo en el artículo Establecer una dirección IP estática en Ubuntu Server 24.04.
Observa que, como servidores de nombres hemos incluido al propio equipo (127.0.0.1), la dirección de la puerta de enlace (192.168.1.1) y un servidor externo, para los nombres que no puedan resolverse de forma local (8.8.8.8). Lógicamente, estos son los valores de nuestro ejemplo y deberás adaptarlos a tus necesidades particulares.
Antes de continuar, para asegurarnos de que la configuración inicial está correctamente aplicada, reiniciamos el equipo:
sudo reboot
Establecer un nombre adecuado para el servidor
Una vez concluida la actualización, el segundo paso será adecuar el nombre del equipo a nuestras necesidades (recuerda que debe llamarse smb-dc). En SomeBooks.es ya te hemos enseñado a realizar esta tarea en el artículo Proporcionar un nuevo nombre para el equipo en Ubuntu 24.04 LTS.
El archivo /etc/hosts, contiene una relación de direcciones IP con sus correspondientes nombres lógicos. De esta forma, cuando hagamos referencia a un ordenador que esté identificado en esta lista, el acceso es inmediato, sin que necesitemos la mediación de un servidor DNS para resolverlo.
Este archivo contenía una referencia al nombre antiguo del propio servidor, que cambiaremos al seguir las indicaciones del artículo anterior. En nuestro caso, aprovecharemos para incluir tanto el nombre DNS como el nombre NetBIOS (SMB-DC1.somebooks.lan y SMB-DC1).
También incluiremos una referencia a la dirección IP estática que hemos asignado más arriba al equipo.
Al completar la tarea, podemos verificar que todo es correcto consultando el contenido del archivo /etc/hosts, por ejemplo usando el comando cat, y ejecutando el comando hostnamectl para obtener el nombre del equipo.
Comprobar la hora del servidor
Kerberos es muy sensible al desfase horario entre los diferentes dispositivos que intervengan en la comunicación, hasta el punto de que no podrán antenticarse, de forma predeterminada, aquellos que tengan una diferencia horario superior a 5 minutos con el reloj del sistema que los autentica.
Una forma sencilla de comprobar que todo está en orden en el servidor es utilizar el comando timedatectl con la siguiente sintaxis:
timedatectl status
Al obtener la salida, nos fijamos especialmente en que el servicio NTP esté activo y que los datos de salida coinciden con lo esperado.
Si necesitas realizar cualquier ajuste, puedes echar un vistazo a nuestro artículo Establecer la fecha, hora y zona horaria en la terminal de Ubuntu 24.04 LTS.
Instalar paquetes
Con el sistema actualizado, lo siguiente será instalar los paquetes que usaremos en la implementación. Además de los paquetes propios de Samba necesitaremos disponer de algunos otros, que deberán estar preinstalados antes de comenzar con el proceso de configuración, aunque todos ellos están el los repositorios. Son los siguientes:
-
samba-ad-dc: Se trata de un metapaquete que instala todos los componentes necesarios para el rol Active Directory Domain Controller.
-
krb5-user: Proporciona el asistente para crear el archivo de configuración inicial para Kerberos (krb5.conf). Después, Samba lo sustituirá por el suyo.
-
bind9-dnsutils: incluye herramientas como dig y nslookup, entre otras, para la comprobación de DNS.
-
smbclient: clientes de línea de comandos para SMB/CIFS.
Por lo tanto, usaremos un comando como este:
sudo apt install samba-ad-dc krb5-user bind9-dnsutils smbclient -y
Al hacerlo, comenzará el proceso de instalación de paquetes hasta que llegue el momento de instalar Kerberos. Entonces, la pantalla cambiará de aspecto y nos preguntará por el reino (realm en inglés). En realidad, se refiere al nombre del dominio y, en el caso de nuestro ejemplo, escribiremos SOMEBOOKS.LAN.
A continuación, pulsamos la tecla de tabulación para seleccionar Ok y, a continuación, la tecla Intro.
Después, el instalador nos solicita el nombre de los servidores de Kerberos para nuestro reino. En este caso, se refiere a los controladores de dominio que tengamos definidos. En nuestro ejemplo sólo tenemos uno y se llama SMB-DC1.somebooks.lan, por lo que procedemos a escribir su nombre.
Por último, nos solicita el servidor administrativo para nuestro reino de Kerberos. como sólo tenemos uno, volvemos a escribir su nombre (SMB-DC1.somebooks.lan).
Después de esto, la instalación continuará un poco más, pero sin necesitar que aportemos más información.
Desactivar los servicios Samba clásicos
En una instalación predeterminada de Samba, existen servicios como smbd, que se encarga principalmente de compartir archivos en impresoras, nmbd, que resuelve los nombres NetBIOS, y winbindd, que se encarga de integrar usuarios y grupos.
Sin embargo, todas estas funciones están integradas en samba-ad-dc, que será el paquete encargado de implementar el rol Active Directory Domain Controller. Por lo tanto, el siguiente paso será desactivar los servicios de Samba clásicos, para evitar posibles interacciones.
sudo systemctl disable --now smbd nmbd winbind
A continuación, enmascaramos los servicios:
sudo systemctl mask smbd nmbd winbind
Esto crea un enlace simbólico desde los archivos de unidad de los servicios a /dev/null, impidiendo que puedan iniciarse de forma manual o automática.
También nos aseguramos de que samba-ad-dc no se encuentre enmascarado:
sudo systemctl unmask samba-ad-dc
Y por último, habilitamos samba-ad-dc:
sudo systemctl enable samba-ad-dc
Ten en cuenta que el argumento disable de systemctl no detiene un servicio, solo evita que se inicie en el siguiente arranque. Lo mismo, pero a la inversa, sucede con enable. Por lo tanto, samba-ad-dc no se está iniciando en este momento, solo nos aseguramos de que, a partir de ahora, se inicie en cada arranque del sistema.
Aprovisionar el dominio y realizar ajustes
El siguiente paso será ejecutar el comando samba-tool para realizar el aprovisionamiento del servidor como controlador de dominio. Durante el proceso, se debe crear un nuevo archivo de configuración para Samba.
Sin embargo, con el fin de evitar la pérdida de información, cuando existe un archivo de configuración previo, samba-tool no lo sobrescribe. Por lo tanto, comenzaremos cambiando el nombre del archivo original. Así, no se encontrará durante el aprovisionamiento, pero lo conservaremos por si lo necesitamos más adelante. Lo haremos con el siguiente comando:
sudo mv /etc/samba/smb.conf /etc/samba/smb.conf.orig
A partir de aquí, estamos listos para comenzar. Como hemos dicho antes, usaremos el comando samba-tool; en este caso, siguiendo la siguiente sintaxis:
sudo samba-tool domain provision --realm=somebooks.lan \ --domain=somebooks \ --server-role=dc \ --dns-backend=SAMBA_INTERNAL \ --use-rfc2307 \ --adminpass='Pass_123'
Como ves, hemos utilizado el truco de incluir una barra invertida (\) para dividir la orden en varias líneas. De este modo, el resultado queda más legible. En cualquier caso, nada te impide escribirlo todo seguido y el resultado será completamente equivalente:
sudo samba-tool domain provision --realm=somebooks.lan --domain=somebooks --server-role=dc --dns-backend=SAMBA_INTERNAL --use-rfc2307 --adminpass='Pass_123'
Y para que entiendas lo que estamos haciendo, te detallo el significado de los argumentos:
-
–realm: Define el reino Kerberos y la zona DNS. En definitiva, el dominio.
-
–domain: También representa el nombre del dominio, pero en formato NetBIOS.
-
–server-role: Indica que este host será un controlador de dominio.
-
–dns-backend: Nos permite indicar que usaremos el servidor DNS autoritativo integrado en Samba. Si quisiéramos delegar en BIND9 usaríamos el valor BIND9_DLZ.
-
–use-rfc2307: Incluye extensiones LDAP para UID/GID Unix que son imprescindible para unir servidores GNU/Linux al dominio.
-
–adminpass: Establece la contraseña del usuario Administrator. Si la omitimos, se genera un valor aleatorio que aparece en la pantalla.
Al final de la ejecución se muestra se copia un nuevo archivo krb5.conf a la ruta /var/lib/samba/private/krb5.conf.
Con esto, la instalación está lista. Llega el momento de realizar algunos ajustes complementarios:
-
Ajustar el reenviador DNS: Comenzamos editando el archivo /etc/samba/smb.conf:
sudo nano /etc/samba/smb.conf
…y sustituimos el valor de la entrada dns forwarder, si fuese necesario para resolver dominios que no pertenecen a somebooks.lan.
-
Reconfigurar resolv.conf: Lo siguiente será desactivar systemd-resolved para que sea el propio servidor DNS de Samba responda localmente:
Primero eliminamos el enlace que hace referencia a la configuración DNS actual:
sudo unlink /etc/resolv.conf
A continuación, reemplazamos el contenido del archivo /etc/resolv.conf para que el sistema utilice el DNS local (127.0.0.1) y añada automáticamente el sufijo somebooks.lan a los nombres de dominio incompletos durante la resolución de nombres. Lo conseguiremos con la siguiente orden:
echo -e "nameserver 127.0.0.1\nsearch somebooks.lan" | sudo tee /etc/resolv.conf
Como ves, la tarea se divide en dos partes:
-
La primera parte, echo -e «nameserver 127.0.0.1\nsearch somebooks.lan», genera un texto con dos líneas, separadas por un salto de línea (\n). La primera línea (nameserver 127.0.0.1) hace que se utilice el propio equipo como servidor DNS (127.0.0.1 equivale a localhost) y la segunda línea (search somebooks.lan) indica que, cuando se busque nombres de dominio incompletos, se añada automáticamente el sufijo somebooks.lan.
-
La segunda parte, sudo tee /etc/resolv.conf, ejecuta el comando tee que utiliza el resultado del comando anterior (gracias al carácter de tubería ‘|‘ ) para sobrescribir el archivo /etc/resolv.conf, actualizando la resolución de nombres.
A continuación, deshabilitamos systemd-resolved , para asegurarnos de que la resolución de nombre se haga mediante el archivo /etc/resolv.conf:
sudo systemctl disable --now systemd-resolved
-
-
Por último, nos aseguramos de que todas las herramientas Kerberos utilicen el nuevo archivo de configuración. Este archivo se habrá generado durante el aprovisionamiento del dominio en la ruta /var/lib/samba/private y debemos situarlo donde espera encontrarlo Kerberos. Es decir, en /etc:
sudo cp /var/lib/samba/private/krb5.conf /etc/krb5.conf
Iniciar el controlador y realizar comprobaciones
Llegados a este punto, estamos listos para comprobar que todo funciona correctamente.
Comenzamos iniciando el servicio samba-ad-dc (recuerda que ya lo habilitamos para que se inicie durante los futuros arranques del sistema, por lo que también podrías hacer un reboot):
sudo systemctl start samba-ad-dc
Si no se han producido errores, el inicio habrá sido correcto pero, si has reiniciado o quieres estar completamente seguro de que el servicio está corriendo, puedes ejecutar lo siguiente:
sudo systemctl status samba-ad-dc
Ahora que el servidor ya está funcionando, realicemos algunas comprobaciones:
-
Comenzaremos autenticándonos manualmente en el dominio, usando el protocolo Kerberos. Al hacerlo, obtendremos un Ticket Granting Ticket (TGT) para la cuenta, que es imprescindible para realizar operaciones administrativas en el dominio.
Lógicamente, haremos la prueba con la única cuenta de usuario que tenemos en este momento (Administrator) usando este comando:
kinit Administrator
Si todo es correcto, el sistema no solicita la contraseña (la que indicamos durante el aprovisionamiento).
Incluso podemos mostrar los tickets que tenemos en estos momentos en la caché del sistema con este comando:
klist
-
También podemos obtener información sobre el controlador, como el nombre del bosque (forest), el del dominio, su nombre NetBIOS, el nombre del controlador de dominio (DC), el sitio al que pertenece el servidor, etc. Para ello, usaremos este comando:
samba-tool domain info $(hostname -f)
Como curiosidad, reboot devuelve el nombre del servidor que, al usar el argumento -f incluirá también el dominio (es decir, el FQDN).
Y si quieres información detallada sobre el servidor DNS integrado en Samba, puedes usar lo siguiente:
samba-tool dns serverinfo $(hostname -f)
-
Comprobaremos los registros SRV. Se trata de registros DNS que indican la ubicación de algunos servicios específicos dentro del dominio.
De forma resumida, los registros que nos interesan son:
-
_ldap._tcp.somebooks.lan: Que es el registro asociado con el acceso y consulta de información del directorio, como usuarios, grupos, etc.
-
_kerberos._tcp.somebooks.lan / _kerberos._udp.somebooks.lan: Que se corresponden con el servicio de autenticación segura en la red mediante tickets de Kerberos, que evitan el envío de contraseñas.
-
_kpasswd._udp.somebooks.lan: Que se encarga de facilitar el cambio seguro de contraseñas en Kerberos.
Podríamos escribir cuatro órdenes diferentes, una para comprobar cada registro, pero vamos a hacerlo un poco más interesante usando un bucle:
for s in _ldap._tcp _kerberos._tcp _kerberos._udp _kpasswd._udp; do dig +short @127.0.0.1 -t SRV ${s}.somebooks.lan done
-
-
También podemos consultar la política de contraseñas actual para el directorio:
sudo samba-tool domain passwordsettings show
-
O el nivel de funcionalidad del bosque:
sudo samba-tool domain passwordsettings show
Como ves en la imagen, hemos obtenido un dominio con un nivel de funcionalidad equivalente a Windows Server 2008 R2.
El nivel de funcionalidad te puede parecer pobre, pero tienes que saber que la versión 4.19.5 de Samba, que es la que estamos usando en este artículo, ya puede ser compatible, de forma experimental, con Windows Server 2012 R2. Sin embargo, aún no se recomienda usarlo en entornos de producción.
Por su parte, la versión 4.20, que será la siguiente en implementarse sobre Ubuntu, ya será compatible, de forma experimental, con Windows Server 2016 (que es la misma que ofrecen las últimas versiones de Windows Server).
-
Inclulso podemos crear una nueva cuenta de usuario, para comprobar que el mecanismo funciona correctamente. Lo haremos con una orden como esta (aunque puedes usar el nombre que prefieras:
sudo samba-tool user add juan.perez
Esto último puede ser interesante como comprobación, pero para administrar el controlador de dominio, te recomiendo que utilices la herramienta RSAT desde un ordenador Windows de tu red. Puedes instalarla de forma gratuita siguiendo las instrucciones de nuestro artículo Instalar y configurar herramientas de administración remota (RSAT) sobre Windows 11.
Y hasta aquí el contenido del artículo. A partir de aquí, podrás administrar los usuarios, equipos y políticas de seguridad de tu red, de una forma tan eficiente como usando Windows Server, pero ahorrándote sus licencias. Espero que te resulte útil.