Crear un controlador de dominio de Active Directory con Samba en Ubuntu 14.04 LTS

Publicado por P. Ruiz en

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/LinuxMac 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 14.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 de Active Directory: SMB-DC

  • 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:

  • Preparar el equipo

  • Instalar los paquetes necesarios

  • Establecer parámetros para el sistema de archivos

  • Configurar NTP

  • Instalar y configurar Samba

  • Comprobar el funcionamiento del servidor DNS

  • Configurar y comprobar el funcionamiento de Kerberos

Una vez que hemos fijado los objetivos, comencemos…

Preparar el equipo

Lo primero, antes de comenzar la tarea, será asegurarnos de que el equipo se encuentra perfectamente actualizado. Para lograrlo, basta con escribir en la consola una orden como la siguiente:

sudo apt-get update && sudo apt-get upgrade

Para ejecutarla, necesitaremos privilegios de administración

Una vez concluida la actualización, el segundo paso será adecuar el nombre del equipo a nuestras necesidades (recuerda que debe llamarse smb-dc). supongo que, a estas alturas, ya sabes que esto se hace editando el archivo /etc/hostname, para lo que ejecutamos la siguiente orden:

sudo gedit /etc/hostname

Escribimos la orden en una ventana de Terminal y pulsamos la tecla Intro.

Cuando terminemos, guardamos los cambios y cerramos la ventana.

Como sabes, Ubuntu almacena, en el archivo /etc/hosts, 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.

Lógicamente, este archivo contiene una referencia al nombre antiguo del propio servidor, por lo que también habrá que editarlo para incluir el nombre nuevo. Además, aprovecharemos para incluir tanto el nombre DNS como el nombre NetBIOS (smb-dc.somebooks.lan y smb-dc).

Editamos el archivo /etc/hosts e incluimos los nuevos valores

Lo siguiente será configurar las características de red según las necesidades del servidor. Recuerda que un servidor debe tener IP fija.

En Ubuntu, la configuración de red se almacena en el archivo /etc/network/interfaces por lo que, para editarlo, abriremos una ventana de terminal y escribiremos una orden como esta:

sudo gedit /etc/network/interfaces

El contenido del archivo será algo así:

auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
  address 192.168.1.15
  netmask 255.255.255.0
  network 192.168.1.0
  broadcast 192.168.1.255
  gateway 192.168.1.1
dns-nameservers 192.168.1.15 192.168.1.1
dns-search somebooks.lan

Observa que, además de incluir la nueva dirección IP, y el resto de los valores habituales, hemos aprovechado para añadir como servidor de nombres al propio equipo (dns-nameservers). Esto es porque, aunque aún no actúa como servidor DNS, lo hará cuando hayamos instalado Samba 4. Para evitar que deje de funcionar la resolución de nombres, hemos añadido el servidor antiguo como valor alternativo.

También añadimos la entrada dns-search para definir el sufijo de búsqueda DNS que pretendemos que tenga nuestro dominio Samba.

Cuando lo hayamos escrito, podemos guardar los cambios y salir del editor.

Instalar los paquetes necesarios

Samba necesita disponer de algunos paquetes que deberán estar preinstalados antes de comenzar con el proceso de configuración, aunque todos ellos están el los repositorios. Por lo tanto, será suficiente con usar un comando como el siguiente:

sudo apt-get install attr build-essential libacl1-dev
                  libattr1-dev libblkid-dev libgnutls-dev libreadline-dev python-dev
                  libpam0g-dev python-dnspython gdb pkg-config libpopt-dev libldap2-dev
                  dnsutils libbsd-dev attr krb5-user docbook-xsl libcups2-dev acl ntp

Como son muchos paquetes, es posible que te preocupe desconocer lo que hacen en tu sistema, así es que vamos a explicar por encima cuál es la función de cada uno de ellos:

dependencias

Cuando estés listo, sólo tienes que escribir, o copiar, el comando anterior y pulsar la tecla Intro.

Cuando llegue el momento de instalar Kerberos, 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 Aceptar y a continuación la tecla Intro.

A continuación, 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-DC.SOMEBOOKS.LAN, por lo que procedemos a escribir su nombre.

Como antes, nos desplazamos hasta Aceptar y pulsamos la tecla Intro.

Por último, nos solicita el servidor administrativo para nuestro reino de Kerberos. como sólo tenemos uno, volvemos a escribir su nombre (SMB-DC.SOMEBOOKS.LAN).

Y de nuevo seleccionamos Aceptar.

Establecer parámetros para el sistema de archivos

Samba 4 utiliza algunos atributos extendidos de ext4 que no suelen venir activados de forma predeterminada. En particular las opciones user_xattr y acl son necesarias para utilizar las capacidades de archivo POSIX y barrier=1 permite que, en algunos discos duros, el sistema de archivos ext4 sea más fiable cuando se produzca un corte de energía inesperado.

POSIX (acrónimo de Portable Operating System Interface) es un estándar de la IEEE con una serie de especificaciones para ofrecer compatibilidad entre sistemas operativos.

La X final del nombre hace referencia a su origen: el sistema operativo Unix

Como de costumbre, recurrimos a gEdit para realizar las modificaciones:

sudo gedit /etc/fstab

Editamos el archivo con privilegios de administración.

Cuando se abra el archivo, buscamos la línea que hace referencia al sistema de archivos que vamos a modificar

En este caso, buscamos el volumen formateado con ext4.

Finalmente, incluimos en la línea los parámetros que hemos indicado más arriba.

Por último, guardamos los cambios y cerramos la ventana del editor.

Para que los cambios en fstab sean efectivos es suficiente con volver a montar el volumen. Sin embargo, si reiniciamos el equipo, también volveremos a cargar el núcleo del sistema, que se habrá actualizado en el apartado anterior.

Por lo tanto, en la ventana de Terminal, escribimos un comando como este:

sudo shutdown -r 0

Reiniciamos el equipo

Configurar NTP

Seguro que ya sabes que ntp (Network Time Protocol) es el responsable de sincronizar el funcionamiento del reloj interno del sistema de acuerdo con algún servidor horario disponible en Internet.

Como recordarás de la primera parte de este libro, es muy importante para el correcto funcionamiento de la autenticación con Kerberos que el reloj de los equipos esté debidamente ajustado. Por ese motivo, comenzaremos por sincronizar el reloj del servidor.

Lo primero será parar el servicio:

sudo service ntp stop

Escribimos el comando y pulsamos la tecla Intro.

Lo siguiente será sincronizar el reloj de forma manual. El objetivo es asegurarnos de que, en este momento, el reloj local está perfectamente sincronizado. Para lograrlo usaremos el servidor horario de Ubuntu:

sudo ntpdate -B 0.ubuntu.pool.ntp.org

La opción -B garantiza que la hora estará siempre afinada, manteniendo la diferencia máxima en +-128 ms.

Al ejecutar el comando ntpdate obtenemos la fecha y la hora actual y nos informa de que el socket NTP está en uso.

Ya sólo queda volver a activar el servicio ntp:

sudo service ntp start

Observamos la respuesta para asegurarnos de que se activa sin problemas.

Instalar y configurar Samba

Bueno, en realidad, todo lo que hemos hecho hasta ahora ha sido prepararnos para el paso que estamos a punto de dar. Será en este paso donde instalemos realmente Samba y donde realizaremos su configuración básica.

Comenzaremos por instalar los paquetes necesarios:

sudo apt-get install samba smbclient

Como resulta evidente samba es el paquete principal de la instalación. Por su parte, smbclient ofrece herramientas como findsmb, smbspool, smbtree, smbcquotas, entre otras.

Además, al iniciar la instalación, el sistema nos informa de que hará falta resolver algunas dependencias.

Instalamos todos los paquetes.

Antes de proceder a configurar Samba, debemos cambiar de nombre (o de sitio) el archivo smb.conf que contiene la configuración predeterminada. De esta forma, evitamos que Samba intente usarlo durante el proceso de configuración y estaremos seguros de que todos los datos del nuevo archivo de configuración se producen desde cero. Además, también podremos recuperarlo en caso de que algo salga mal.

Para cambiar el nombre al archivo, sólo tendremos que escribir la siguiente orden:

sudo mv /etc/samba/smb.conf /etc/samba/smb.conf.old

Renombramos el archivo smb.conf.

Después de esto, ya estamos listos para promover nuestro equipo como controlador de un dominio Samba 4 que actúe como un reemplazo completo de un servidor de dominio de Active Directory. Para lograrlo, usaremos el comando samba-tool domain provision, y lo haremos de forma interactiva, para que sea él quien nos sugiera los valores predeterminados. Así, si éstos coinciden con los que nosotros esperamos, será muy probable que los pasos anteriores han sido los correctos.

Así pues, nos dirigimos a la terminal y escribimos la siguiente orden:

sudo samba-tool domain provision --use-rfc2307 --interactive

Iniciamos la provisión del controlador de dominio.

Como puedes ver en la imagen siguiente, los valores predeterminados del comando son los esperados para nuestro ejemplo:

  • Realm: SOMEBOOKS.LAN (el nombre del dominio).

  • Domain: SOMEBOOKS (el nombre NetBIOS del dominio).

  • Server Role: dc (domain controler, es decir, controlador de dominio).

  • DNS backend: SAMBA_INTERNAL (el servidor DNS que utilizaremos, que será el propio Samba).

  • DNS forwarder IP address: 192.168.1.1 (el reenviador DNS, es decir, el servidor al que recurrirá cuando no sepa resolver alguna referencia).

Por último, nos pedirá, como siempre por duplicado, la contraseña para el administrador.

Si todo es correcto, nos limitamos a pulsar la tecla Intro en cada entrada (salvo en la contraseña, claro)

Después del proceso de configuración, el comando nos ofrece un resumen de las acciones que ha llevado a cabo para que podamos comprobarlas con detenimiento.

Nos aseguramos de que los valores son los esperados.

Como recordarás, al principio, durante la configuración del archivo /etc/network/interfaces añadimos a la variable dns-nameservers el servidor DNS predeterminado de nuestra red. El motivo era que nuestro servidor aún no actuaba como servidor DNS y necesitábamos seguir accediendo a Internet.

Sin embargo, a partir del próximo reinicio, nuestro flamante servidor estará listo para realizar también funciones de DNS, por lo que podremos eliminar del archivo /etc/network/interfaces la dirección IP del servidor DNS predeterminado.

Así pues, comenzamos editando el archivo:

sudo gedit /etc/network/interfaces

Como venimos haciendo en el resto del capítulo, usamos el editor gEdit.

A continuación, quitamos el segundo valor de la variable dns-nameservers.

Cuando lo hayamos hecho, guardamos los cambios y cerramos la ventana

Ya sólo queda reiniciar el equipo para poder comprobar si todo funciona correctamente:

sudo shutdown -r 0

Reiniciamos el equipo

Comprobar el funcionamiento del servidor DNS

Para que Samba 4 funcione correctamente, es muy importante que el servidor DNS que tenga asociado también lo haga.

Por este motivo, una vez instalado Samba y reiniciado el servidor, lo primero que haremos será comprobar el DNS interno del propio Samba. En particular, los registros SRV.

Los registros SRV son los encargados de almacenar, dentro de la base de datos DNS, la relación entre el nombre de un servicio y el nombre DNS del ordenador que ofrece dicho servicio.

Lo primero será comprobar el servicio LDAP sobre el protocolo TCP, para lo que abriremos de nuevo la terminal y escribiremos la siguiente orden:

host -t SRV _ldap._tcp.somebooks.lan

Si todo es correcto, recibiremos una respuesta como esta:

_ldap._tcp.somebooks.lan has SRV record 0 100 389 smb-dc.somebooks.lan

Lo que significará que todo funciona como debe.

Observamos que la salida del comando no produce ningún error.

A continuación, comprobaremos el registro SRV para el protocolo Kerberos sobre UDP, para lo que usamos la siguiente orden:

host -t SRV _kerberos._udp.somebooks.lan

La respuesta debe ser parecida a la anterior, y podremos comprobar que el registro SRV es correcto:

_kerberos._udp.somebooks.lan has SRV record 0 100 88 smb-dc.somebooks.lan

De nuevo comprobamos que no se ha producido ningún error en la salida.

Por último, comprobamos la resolución del nombre de nuestro servidor:

host -t A smb-dc.somebooks.lan

… Y si todo va bien, la respuesta debe ser parecida a la siguiente:

smb-dc.somebooks.lan has address 192.168.1.15

Nos aseguramos de que la resolución del nombre del servidor también es correcta.

Configurar y comprobar el funcionamiento de Kerberos

Durante la instalación de Samba, se habrá generado un archivo de configuración para Kerberos que será el que debamos usar con el servidor. Sin embargo, el propio Kerberos incorpora su propio archivo de configuración que ahora debemos descartar.

Como ya hicimos con el archivo de configuración predeterminado de Samba, basta con cambiar su nombre para que Kerberos no lo encuentre. Así, podremos recuperarlo más adelante si fuese necesario:

sudo mv /etc/krb5.conf /etc/krb5.conf.old

Cambiamos el nombre del archivo /etc/krb5.conf.

Para sustituir el archivo de configuración original por el que ha creado Samba al instalarse, crearemos un enlace simbólico. Así, cuando Kerberos busque su archivo de configuración, encontrará el generado por Samba que, en realidad, se encuentra en el directorio /var/lib/samba/private/.

Para lograrlo, usaremos el siguiente comando:

sudo ln -sf /var/lib/samba/private/krb5.conf /etc/krb5.conf

Creamos el enlace simbólico.

Con esto habremos terminado la tarea, pero como el funcionamiento de Kerberos es muy importante para el servidor, realizaremos unas comprobaciones finales para asegurarnos de que la autenticación está funcionando de forma adecuada.

Lo primero será comprobar que el programa kinit, que es el encargado de obtener y almacenar en caché las autenticaciones de los usuarios, reconoce correctamente al administrador de Samba. Para conseguirlo, escribimos lo siguiente:

kinit administrator@SOMEBOOKS.LAN

En respuesta al comando deberemos usar la contraseña que escribimos, más arriba, al promocionar el equipo como controlador de dominio Samba con el comando samba-tool domain provision.

Si todo va bien, kinit nos responde con la fecha y la hora en la que caducará la contraseña que acabamos de introducir.

Lo importante es comprobar que no se han producido errores durante la autenticación.

También podemos usar el comando klist para consultar las autenticaciones que hay guardadas actualmente en la caché de Kerberos.

Ejecutamos el comando klist.

Ya casi hemos terminado con el servidor Samba. Sólo nos queda asegurarnos de que los servicios de samba funcionan como deben. Una buena forma de lograrlo es utilizando el comando smbclient
para comprobar los servicios que ofrece el servidor en la red:

sudo smbclient -L smb-dc.somebooks.lan -U%

El comando nos responde con los datos de la conexión.

A continuación, iniciamos sesión en el servidor usando la cuenta de administración que se ha creado de forma automática.

El prompt cambia para indicar que es el subsistema de Samba quien espera ordenes, por lo que la autenticación habrá sido correcta.

Samba está listo para recibir órdenes.

A partir de aquí, podríamos comenzar a administrar el servidor desde la línea de comandos. Sin embargo, pienso que resultará más gratificante hacerlo desde la interfaz gráfica de un equipo cliente usando la herramienta de administración remota de Microsoft. Pero esto esa tarea le dedicaremos un artículo diferente.

De momento, usamos la orden quit para salir.

El camino ha sido un poco largo, pero si todo ha ido bien, acabas de obtener un reemplazo completo, para un controlador de dominio de active directory, usando únicamente software libre.

Espero que te resulte útil.