Configuración de Ubuntu 22.04 como controlador de dominio

Autor: Armando Almeida G.
Telegram: @armando_kerio
Sobre el autor: Se desempeña como administrador de red en el Instituto de Geofísica y Astronomía en la Habana.
ResumenEl presente artículo pretende llevarlos por un procedimiento que permita desplegar un servicio de controlador de dominio en un servidor Ubuntu 22.04 utilizando samba4.

Introducción

Condiciones de partida

Usuario: almeida
Contraseña: Admin2023*
Nombre de la Pc: dc1
Ip: 192.168.10.2
Dominio: iga.cu
Actualizado el ubuntu 22.04 (hacer un apt update & apt upgrade, antes de empezar)

Instalación y configuración del servidor

A continuación, abrimos el archivo /etc/hosts para editarlo con nuestro editor preferido, (nano en este caso).  Dentro del archivo, agregamos una entrada que especifique la dirección IP del servidor, el FQDN y el nombre de host en este formato: server-IP hostname.domain.com hostname.
Al final del archivo agregamos la siguiente línea:

 

192.168.10.2 dc1.iga.cu dc1

sudo nano /etc/hosts
Finalmente, ejecutamos los siguientes comandos para verificar el FQDN del servidor Samba.
# verificamos el FQDN
hostname -f
# verificamos si el FQDN es capaz de resolver la dirección Ip del Samba
ping -c3 dc1.iga.cu   (donde –c3 es para que mande solo 3 pings)

Desactivando el DNS Resolver

El servicio systemd-resolved controla la configuración de DNS en el servidor Ubuntu, que no es compatible con Samba Active Directory. Para configurar Samba Active Directory, primero deberá deshabilitar el servicio systemd-resolved y reemplazar el archivo de configuración /etc/resolv.conf.
1. Ejecutamos los siguientes comandos para deshabilitar y detener el servicio systemd-resolved de una vez, y elimine el enlace simbólico al archivo /etc/resolv.conf, en ese orden.
sudo systemctl disable --now systemd-resolved
Removemos el enlace simbólico al archivo /etc/resolv.conf
sudo unlink /etc/resolv.conf
2. Ahora creamos el archivo /etc/resolv.conf
touch /etc/resolv.conf
sudo nano /etc/resolv.conf
touch /etc/resolv.conf
# Samba server IP address
nameserver 192.168.10.2
# fallback resolver
nameserver 1.1.1.1
# main domain for Samba
search iga.cu
4. Finalmente corremos el siguiente commando para hacer inmutable el archivo /etc/resolv.conf. Este paso garantiza que la resolución no cambie de forma inesperada por ningún motivo.
# Adicionando el atributo inmutable al archivo /etc/resolv.conf
sudo chattr +i /etc/resolv.conf

Instalando samba

Después de configurar el FQDN y configurar la resolución de nombres, instalaremos Samba en el sistema y habilitaremos el servicio Samba Active Directory
1. Ejecutamos el comando apt a continuación para actualizar el índice de paquetes de nuestro servidor Ubuntu.
sudo apt update
2. Ahora, ejecutamos el siguiente comando para instalar Samba con todos los paquetes y dependencias.
sudo apt install -y acl attr samba samba-dsdb-modules samba-vfs-modules smbclient winbind libpam-winbind libnss-winbind libpam-krb5 krb5-config krb5-user dnsutils chrony net-tools
3. Escribimos el nombre de dominio predeterminado en mayúsculas. En este ejemplo, el FQDN es dc1.iga.cu, por lo que el nombre de dominio predeterminado debe ser IGA.CU. Oprimimos Aceptar y presionamos Enter.
 
4. En el siguiente mensaje, escribimos el FQDN del servidor. Este paso define el servidor Kerberos predeterminado. Oprimimos Aceptar y presionamos Enter.
5. A continuación, volvemos a escribir el FQDN del servidor para especificar el servidor administrativo de Kerberos. Resalte Ok y presione Enter para completar la configuración inicial de Samba.

Presionamos Ok y Enter para completar la configuración inicial de Samba.

 

 

6. Después de la instalación de Samba, ejecute el siguiente comando para detener y deshabilitar los servicios que el servidor de Active Directory de Samba no requiere (*smbd, nmbd* y *winbind*). El servidor solo necesita *samba-ac-dc* para funcionar como Active Directory y controlador de dominio.

sudo systemctl disable --now smbd nmbd winbind
7. Por último, ejecute los siguientes comandos para activar y habilitar el servicio *samba-ad-dc*.
sudo systemctl unmask samba-ad-dc
sudo systemctl enable samba-ad-dc

Configurando Samba Active Directory

Ahora hemos instalado Samba en el sistema. Hay varios pasos más a seguir para configurar Samba Active Directory. La instalación de Samba vino con una herramienta de línea de comandos llamada samba-tool para aprovisionar Samba Active Directory.
1. Primero, creamos una copia de seguridad del archivo /etc/samba/smb.conf por si acaso. El proceso de aprovisionamiento reemplazará este archivo.
sudo mv /etc/samba/smb.conf /etc/samba/smb.conf.orig
2. Ahora, ejecutamos el comando samba-tool a continuación para comenzar a aprovisionar Samba Active Directory.
sudo samba-tool domain provision
3. En el indicador Realm, aceptamos el valor predeterminado y presione Enter. (es posible que no aparezca el valor como me sucedió a mi en este paso entonces ponemos el valor de nuestro dominio en mayúsculas IGA.CU

 

4. En el indicador Dominio, presione Entrar nuevamente para aceptar el valor predeterminado.

 

5. En la solicitud de función del servidor, deje el valor predeterminado y presione Enter.

 

6. En el aviso del servidor DNS, deje el valor como predeterminado (SAMBA_INTERNAL) y presione Enter.

 

7. A continuación, escriba la dirección IP del reenviador de DNS adicional. En este ejemplo se agregará Cloudflare DNS 1.1.1.1 como el reenviador 

de DNS. Esta opción solo está disponible cuando está utilizando el backend DNS SAMBA_INTERNAL.

 

8. Escriba su contraseña de administrator de Active Directory de Samba y presione Entrar. (Admin2023*)

El aprovisionamiento crea automáticamente el nuevo archivo de configuración de Samba (/etc/samba/smb.conf) y el archivo de configuración de Kerberos (/var/lib/samba/private/krb5.conf).

9. Ahora, ejecutamos los siguientes comandos para hacer una copia de seguridad de la configuración predeterminada de Kerberos y la reemplazamos con el archivo /var/lib/samba/private/krb5.conf.
sudo mv /etc/krb5.conf /etc/krb5.conf.orig
sudo cp /var/lib/samba/private/krb5.conf /etc/krb5.conf
10. Finalmente, ejecute los siguientes comandos systemctl para iniciar el servicio Samba Active Directory samba-ad-dc y verifique que el estado del servicio sea activo (en ejecución).
sudo systemctl start samba-ad-dc
sudo systemctl status samba-ad-dc

Configurando la sincronización de tiempo.

Samba Active Directory depende del protocolo Kerberos, y el protocolo Kerberos requiere que los tiempos del servidor AD y de la estación de trabajo estén sincronizados. Para garantizar una sincronización de tiempo adecuada, también deberemos configurar un servidor de Protocolo de tiempo de red (NTP) en Samba.

 

 

Los beneficios de la sincronización de tiempo de AD incluyen la prevención de ataques de repetición y la resolución de conflictos de replicación de AD.

1. Ejecute los siguientes comandos para cambiar el permiso y la propiedad predeterminados del directorio /var/lib/samba/ntp_signd/ntp_signed. El usuario/grupo _chrony debe tener permiso de lectura en el directorio ntp_signed.

sudo chown root:_chrony /var/lib/samba/ntp_signd/
sudo chmod 750 /var/lib/samba/ntp_signd/
2. Ahora, abra el archivo de configuración /etc/chrony/chrony.conf con nano y agregue la siguiente configuración al final del archivo. Esta configuración habilita el servidor NTP de chrony y apunta la ubicación del socket NTP a /var/lib/samba/ntp_signd. Guardamos el archivo de configuración y salga del editor.
sudo nano /etc/chrony/chrony.conf
sudo systemctl restart chronyd
sudo systemctl status chronyd
3. Luego, ejecutamos los siguientes comandos para reiniciar y verificar el servicio chronyd en el servidor Samba AD.

Verificando Samba Active Directory

Después de la instalación, debe verificar la configuración de Samba para asegurarnos de que lo que hemos hecho hasta ahora funciona. Podemos hacerlo verificando la configuración DNS de Samba, la carpeta compartida predeterminada (servidor de archivos) y probando la autenticación Kerberos.

1. Ejecutamos los siguientes comandos de host para verificar el nombre de dominio AD iga.cu y dc1.iga.cu.
host -t A iga.cu
host -t A dc1.iga.cu
2. A continuación, verificamos que los registros de servicio _kerberos y _ldap apunten al FQDN de su servidor Samba Active Directory.
host -t SRV _kerberos._udp.iga.cu
host -t SRV _ldap._tcp.iga.cu
3. Ejecutamos el siguiente comando smbclient para verificar los recursos predeterminados disponibles en Samba Active Directory.
smbclient -L iga.cu -N
4. Por último, ejecutamos los siguientes comandos kinit para autenticarse en el servidor de Kerberos mediante el administrador de usuarios y verificamos los vales de Kerberos almacenados en caché en su sistema.

Nota: La parte del dominio debe estar en mayúsculas.
kinit administrator@IGA.CU
klist

Creación de un nuevo usuario de directorio activo de Samba

En este punto, hemos terminado de configurar Samba Active Directory. Pero como saben, todavía no hay usuarios. Ahora es el momento de crear nuestra primera cuenta de usuario de Samba AD usando el comando samba-tool.

1. Ejecutamos el siguiente comando para crear un nuevo usuario llamado omar, cuya contraseña es Omar2023*.
sudo samba-tool user create omar Omar2023*
2. A continuación, ejecutamos el siguiente comando samba-tool para verificar los usuarios disponibles en Samba.
sudo samba-tool user list

Unirse e iniciar sesión en el dominio de Active Directory de Samba

Ahora que hemos creado un nuevo usuario, lo que queda es unir una estación de trabajo al dominio de Active Directory. Luego, podemos iniciar sesión en la estación de trabajo con las credenciales de usuario de Samba AD.

1. Iniciamos sesión en nuestra PC con Windows y abrimos PowerShell como administrador.
2. Ejecutamos el siguiente comando para enumerar los adaptadores de Ethernet disponibles en nuestra PC con Windows.
Get-NetAdapter-Nombre "*"
3. Ejecutamos el siguiente comando para cambiar el servidor DNS del adaptador a la dirección IP de Samba Active Directory con Cloudflare DNS 1.1.1.1 de reserva adicional. Al realizar este paso, se asegura de que su estación de trabajo use el servidor Samba AD para la resolución de nombres.
Set-DNSClientServerAddress "Ethernet" –ServerAddresses ("192.168.10.2","1.1.1.1")
4. Ejecutamos el siguiente comando para verificar su resolución de DNS y nos aseguramos de que nuestra computadora use el servidor Samba AD como la resolución de DNS predeterminada.
Get-DnsClientServerAddress
5. Ahora, hacemos ping al nombre de host y al dominio del servidor.
ping dc1.iga.cu
ping iga.cu
6. A continuación, ejecute el siguiente comando para unir la estación de trabajo al dominio de Samba Active Directory
Add-Computer -DomainName "iga.cu" -Restart
7. Después de reiniciar, haemos clic en Otros usuarios en la pantalla de inicio de sesión. Ingresamos el usuario y contraseña de Active Directory del usuario Samba AD que creamos anteriormente (omar@iga.cu), y presionamos Enter para iniciar sesión.

8. Después de un inicio de sesión exitoso, abrimos una ventana de PowerShell y ejecutamos uno o ambos comandos a continuación para verificar el nombre de usuario actualmente conectado.
whoami
query user

Comandos útiles.

Crear un usuario en un OU específico
samba-tool user add raul Password123 –given-name=”Raul” –surname=”Perez” –department=”Dpto Informatica” –mail=raul@iga.cu –userou=OU=Adminred –company=”IGA” –job-title=”Administrador de red”
 
Comprobar si una cuenta de usuario ha sido creada
samba-tool user list | grep raul
 
Cambiar el password
samba-tool user setpassword raul
 
Eliminar un usuario
samba-tool user delete raul
 
Desabilitar usuario
samba-tool user disable raul
 
Habilitar usuario
samba-tool user enable raul
 
Listar todos los usuarios del controlador de dominio
samba-tool group listmembers “Domain Users”
Que no expire el password
samba-tool user setexpiry Administrator –noexpiry
 
Grupos de usuario
 
Listar grupos
samba-tool group list
 
Crear grupo
samba-tool group add Adminred
 
Comprobar si un grupo ya existe
samba-tool group list | grep Adminred
 
Listar miembros de un grupo
samba-tool group listmembers “Adminred”
 
Agregar un miembro a un grupo
samba-tool group addmembers Adminred raul
 
Eliminar un miembro de un grupo
samba-tool group removemembers Adminred raul
 
Añadir grupos a una unidad organizativa diferente. Por defecto, samba-tool añade los grupos a la unidad organizativa Users (ou=Users):
samba-tool group add estudiantes
samba-tool group add profesores
 
DNS
 
Crear Puntos del Dominio
samba-tool dns zonecreate localhost 10.168.192.in-addr.arpa -U ‘administrator’%’Admin2023*’ #Lo que esta entre comillas es el user y el password
samba-tool dns add localhost 10.168.192.in-addr.arpa 101 PTR iga.cu -U ‘administrator’%’Admin2023*’
 
Record del servidor dns
samba-tool dns add localhost iga.cu dns A 192.168.10.2 -U ‘administrator’%’Admin2023*’
samba-tool dns add localhost 10.168.192.in-addr.arpa 2 PTR dns.iga.cu -U ‘administrator’%’Admin2023*’
 
Record del servidor de correo:
samba-tool dns add localhost iga.cu mail A 192.168.10.3 -U ‘administrator’%’Admin2023*’
samba-tool dns add localhost 10.168.192.in-addr.arpa 3 PTR mail.iga.cu -U ‘administrator’%’Admin2023*’
samba-tool dns add localhost iga.cu @ MX ‘mail.iga.cu 10’ -U ‘administrator’%’ Admin2023*’
samba-tool dns add localhost 10.168.192.in-addr.arpa @ MX ‘mail.iga.cu 10’ -U ‘administrator’%’ Admin2023*’
samba-tool dns add localhost iga.cu _submission._tcp SRV ‘mail.iga.cu. 587 100 0’ -U ‘administrator’%’ Admin2023*’
samba-tool dns add localhost iga.cu _pop3s._tcp SRV ‘mail.iga.cu. 995 100 0’ -U ‘administrator’%’ Admin2023*’
samba-tool dns add localhost iga.cu _imaps._tcp SRV ‘mail.iga.cu. 993 100 0’ -U ‘administrator’%’ Admin2023*’
 
Record del servidor proxy:
samba-tool dns add localhost iga.cu proxy A 192.168.10.4 -U ‘administrator’%’ Admin2023*’
samba-tool dns add localhost 10.168.192.in-addr.arpa 4 PTR proxy.iga.cu. -U ‘administrator’%’ Admin2023*’
 
Record del servidor jabber:
samba-tool dns add localhost iga.cu jabber A 192.168.10.5 -U ‘administrator’%’ Admin2023*’
samba-tool dns add localhost 10.168.192.in-addr.arpa 5 PTR jabber.iga.cu. -U ‘administrator’%’ Admin2023*’
 
Comandos para chequeo de servicio, listas recursos disponibles
smbclient -L localhost -U%
 
Chequear autentificación
smbclient //localhost/netlogon -Uitlinux -c ‘ls’
 
Seguridad. Mostrar la configuracion del password en el AD
samba-tool domain passwordsettings show
 
Para modificar la política de contraseñas de dominio de samba, como el nivel de complejidad de la contraseña, antigüedad de la contraseña, longitud, cuántas contraseñas antiguas recordar y otras características de seguridad necesarias para un controlador de dominio, utilice la siguiente imagen como guía.

Consideraciones finales


Todas las configuraciones expuestas en esta guía han sido probadas satisfactoriamente -si los pasos descritos se siguen a cabalidad.

Si el despliegue es realizado sobre Proxmox 7, los CT que ejecuten servicios que utilicen autenticación kerberos, deben crearse con las características fuse, nesting y la opción Unprivileged mode desmarcada.

En CT para que el servidor Samba AD DC funcione correctamente; además de lo descrito en el párrafo anterior, debe activarse la característica cifs.

Para un correcto funcionamiento del servidor NTP en CT se debe eliminar la restricción de acceso al reloj del sistema, editando el fichero de configuración del contendor y agregando al final las líneas lxc.cap.drop: y lxc.cap.drop: mac_admin mac_override sys_module sys_rawio sys_time. Ejemplo:
nano /etc/pve/lxc/101.conf       # 101 es el numero del container LXC


OJO IMPORTANTE: Para poder unir kerio control al dominio es preciso editar con nano el archivo smb.conf que esta en /etc/samba/smb.conf y agregar en la sección global la siguiente línea al final de la sección.

Todo lo relacionado con el manejo del Dominio puede ser realizado con las herramientas RSAT de windows

ldap server require strong auth = no

Referencias utilizadas en la elaboración de este artículo.