Controlador de Dominio con Samba 4

Para montar un controlador de dominio, necesitaremos los siguientes elementos:

  1. Un servidor GNU/Linux (CentOS 7 en mi caso) conectado a Internet.
  2. Un cliente Windows (7 también en mi caso) conectado a la misma red que el servidor.

Primeros pasos. Prerequisitos software en el servidor

Necesitaremos instalar los siguientes paquetes en el servidor CentOS:

  • gcc
  • python-devel
  • gnutls-devel
  • libacl-devel
  • openldap-devel
  • krb5-workstation

Descargar la última versión de Samba 4

Vamos a desinstalar la versión que Samba trae instalada desde los respositorios de CentOS

rpm -qa | grep samba

Este comando mostrará todos los paquetes de Samba instalados. Si hay alguno, procedemos a desinstalarlos. Por ejemplo:

yum remove samba-common samba-libs

Después, vamos a descargar desde la página de Samba la última versión disponible: Última versión de Samba desde www.samba.org

Desactivar el Firewall así como SELinux

Tanto el firewall como SELinux tienen su función. Pero en este tutorial, vamos descativarlos inicialmente. Después, no estaría de más dedicar algo de tiempo a configurar ambos.

Para desactivar el firewall, ejecutamos lo siguiente:

systemctl disable firewalld

Para desactivar el SELinux, accedemos al archivo de configuración /etc/selinux/config, y cambiamos la variable SELINUX a "disabled".

Después reiniciamos el servidor.

Compilar Samba 4

Descomprimimos el paquete de Samba 4 descargado, y lo compilamos. Supongamos que la carpeta donde se aloja el paquete descomprimido está en /root/samba-4.2.1/. Entonces:

cd /root/samba-4.2.1 ./configure --enable-debug --enable-selftest make make install

Samba se instalará en /usr/local/samba

Configuración de red en el DC

La configuración de red del DC debe ser la siguiente:

  • IP estáticamente definida
  • DNS apuntando a sí mismo
  • Nombre de host configurado.

Por ejemplo, supongamos que el equipo se llama dc1cen dominio se va a llamar "ragul.com", y que nuestra red tiene el siguiente direccionamiento: 192.168.42.0/24, con puerta de enlace 192.168.42.254. Entonces la configuración de IP podría ser:

  • IP: 192.168.42.5
  • Máscara: 255.255.255.0
  • Gateway: 192.168.42.254
  • DNS: 192.168.42.5

En el archivo /etc/resolv.conf, escribiremos lo siguiente:

domain ragul.com search ragul.com nameserver 192.168.42.5

Por último, en el archivo /etc/hosts, añadiremos lo siguiente:

127.0.0.1 dc1cen.ragul.com localhost

Otra cosa que podemos hacer es cambiar el nombre de la máquina, mediante el archivo /etc/hostname. Por ejemplo, en mi caso, el contenido del archivo sería:

dc1cen.ragul.com

Elevar el servidor a Controlador de Dominio Active Directory

Para esta tarea, ejecutamos el siguiente comando:

/usr/local/samba/bin/samba-tool domain provision

Este comando preguntará por las siguientes cosas:

  • REALM: es a efectos prácticos lo mismo que un dominio Microsoft. En mi caso, sería RAGUL.COM
  • DOMAIN: es el nombre NetBIOS del dominio. En mi caso RAGUL
  • SERVER ROLE: debemos indicar dc
  • DNS BACKEND: aquí indicamos qué servicio DNS vamos a usar. Podemos usar el servicio DNS interno de Samba SAMBA_INTERNAL
  • DNS FORWARDER: indicaremos un reenviador DNS de nuestra preferencia. Por ejemplo, 8.8.8.8, que es una DNS de Google.
  • CONTRASEÑA DE ADMINISTRATOR: la cuenta de administrador en Samba4, inicialmente se llamará administrator. Debemos asignarle una contraseña.

Añadir una unidad Systemd para Samba

Vamos a crear una unidad Systemd, para poder habilitarlo y que se inicie el servicio durante el arranque. La ubicación de dicha unidad, será: /usr/lib/systemd/system/samba.service. Su contenido será el siguiente:

[Unit] Description= Samba 4 Active Directory After=syslog.target After=network.target [Service] Type=forking PIDFile=/usr/local/samba/var/run/samba.pid ExecStart=/usr/local/samba/sbin/samba [Install] WantedBy=multi-user.target

Después habilitamos el servicio Samba:

systemctl enable samba.service

Después, reiniciaremos el servidor.

Un par de comprobaciones

Para comprobar que todo está bien, podemos hacer un par de pruebas:

/usr/local/samba/bin/smbclient -L localhost -U%

Con este comando deberíamos obtener información sobre las unidades del compartidas de Samba, es decir, netlogon, sysvol y IPC$.

cat /usr/local/samba/etc/smb.conf

Deberíamos ver en el archivo de configuración de Samba algo como lo siguiente:

# Global parameters [global] workgroup = RAGUL realm = RAGUL.COM netbios name = DC1CEN server role = active directory domain controller dns forwarder = 8.8.8.8 [netlogon] path = /usr/local/samba/var/locks/sysvol/ragul.com/scripts read only = No [sysvol] path = /usr/local/samba/var/locks/sysvol read only = No

Premitir actualizaciones dinámicas

Si queremos que la DNS registre las IPs de los equipos de la red dinámicamente (ya sea por cambios en la IP manualmente o bien por asignaciones de un servidor DHCP autorizado en el dominio), debemos añadir un parámetro al archivo /usr/local/samba/etc/smb.conf. En concreto este parámetro aparece citado en https://wiki.samba.org/index.php/Samba_Internal_DNS. Nuestro archivo smb.conf quedará así:

# Global parameters [global] workgroup = RAGUL realm = RAGUL.COM netbios name = DC1CEN server role = active directory domain controller dns forwarder = 8.8.8.8 allow dns updates = signed [netlogon] path = /usr/local/samba/var/locks/sysvol/ragul.com/scripts read only = No [sysvol] path = /usr/local/samba/var/locks/sysvol read only = No

Tras hacer esta modificación, reiniciamos samba:

systemct restart samba.service

Comprobar el funcionamiento de nuestro servidor DNS

A continuación preguntaremos a la DNS por los registros de Kerberos y LDAP. Como resultado debemos obtener la IP del controlador de dominio en ambos casos:

host -t SRV _ldap._tcp.ragul.com host -t SRV _kerberos._udp.ragul.com

Configurar Kerberos

Vamos a configurar el servicio Kerberos. Para ello, primero ejcutaremos los siguientes comandos:

mv /etc/krb5.conf /etc/krb5.old cp /usr/local/samba/share/setup/krb5.conf /etc/krb5.conf

Después editaremos el archivo /etc/krb5.conf. En caso de que el parámetro default_realm no tenga como valor el nombre de nuestro dominio, lo cambiaremos. En mi caso, el archivo quedaría del siguiente modo:

[libdefaults] default_realm = RAGUL.COM dns_lookup_realm = false dns_lookup_kdc = true

Crear un ticket para el usuario Administrador

Vamos a crear manualmente un ticket para el administrador, para posteriormente poder conectarnos con este usuario:

kinit administrator@RAGUL.COM

Para posteriormente comprobar que Kerberos está funcionando, y que el ticket ha sido asignado a administrator, podemos ejectuar el comando klist.

Instalar ntp

Active Directory requiere un gran nivel de sincronización. Por ello es bastante conveniente instalar el servicio NTP en el servidor. Para ello, vamos a instalar el servicio mediante el siguiente comando:

yum install ntp

Ahora vamos a configurar los servidores NTP. Para ello, abrimos el archivo /etc/ntp.conf, y comentamos los servidores que vienen especificados. Podemos usar en sustitución, alguno de los citados en el siguiente enlace: http://www.pool.ntp.org/zone/europe

Después, arrancamos el servicio mediante el comando:

systemctl start ntpd

Y por último lo habilitamos para que arranque durante cada inicio:

systemctl enable ntpd

Uniendo un cliente Windows

Unir un cliente Windows a un Samba4 DC es exactamente igual que si lo unimos a un servidor Windows.

RSAT

La forma más simple de administrar Active Directory sobre Samba4 es usando las "Herramientas de Administración Remota del Servidor" de Microsoft. En la siguiente página podemos ver varios enlaces: wiki.samba.org/index.php/Installing_RSAT_on_Windows_for_AD_Management.

Una vez que se instale RSAT, debemos ir la ventana Panel de control\Programas\Programas y características\Activar o desactivar las características de Windows. Allí, elegiremos aquellas herramientas que necesitemos para administrar Active Directory

Para poder usar RSAT, es necesario iniciar sesión en la máquina Windows con el usuario "administrator".

Copias se seguridad de Samba

El código fuente de Samba incluye en script para las copias de seguridad. Podemos consultar sobre dicho script en https://wiki.samba.org/index.php/Backup_and_Recovery. Debemos copiar ese script a una ubicación desde donde lo ejecutemos utilizando crond. Recuerdo un par de cosas:

  • Hay que darle permisos de ejecución
  • Hay que editar el archivo y modificar las variables que aparecen al principio del script

Después, podemos utilizar rsync para copiar las copias a otro servidor.