ICM / linux / Integración de Linux a Active Directory
Integración de Linux a Active Directory
25 mayo 2020 | Aleix Abrie
En este artículo vamos a hablar sobre como realizar una integración de un servidor Linux con nuestro Active Directory. Por ello, primero vamos a hablar de las opciones que tenemos para unir nuestra máquina Linux a Active Directory
Opciones para unir nuestra máquina Linux a Active Directory
Las opciones más comunes son:
- Winbind es un componente de la suite SAMBA, con más de 10 años de historia, que otorga servicios de autenticación a través del Name Service Switch, consultando a un controlador de domino. A día de hoy, es el que más capacidades de integración soporta, y sería la opción por defecto si no fuera por las caídas esotéricas que sufre y lo difícil que son depurarlas. Este componente soporta:
- Confianza entre bosques.
- MS-RPC para hablar con controladores de dominio NT 4.
- Autenticación NTLM en caso de que Kerberos falle.
- System Security Services Daemon (SSSD) es un componente que se ha convertido en el estándar en RHEL. No soporta todas las características de Winbind pero ha demostrado ser bastante sencillo de configurar, además de más estable y rápido.
- También hay otras soluciones comerciales, como Centrify.
¿Qué necesitamos para implementar el SSSD usando servidor Linux en Active Directory?
Para empezar la implementación, antes necesitamos una serie de elementos básicos. En este ejemplo hemos usado un servidor Linux cliente con Ubuntu 18.04 LTS:
- Un dominio de Active Directory en funcionamiento. En este ejemplo hemos utilizado AD DS de Windows Server 2016, en nivel funcional 2012 R2.
- Como ocurre en Windows, el servidor Linux tiene que usar los servidores DNS autoritativos para la zona del dominio.
- La hora del sistema tiene que estar sincronizada con la del controlador de dominio. Esto es vital para el buen funcionamiento del Kerberos.
- Debemos instalar los siguientes elementos en nuestra máquina: cliente de Kerberos, Samba, SSSD y NTP. Como podéis ver, Samba sigue haciendo falta, ya que las operaciones con Active Directory las sigue llevando a cabo él.
Para instalar los elementos en nuestro cliente Ubuntu es tan fácil como: $ sudo apt install krb5-user samba sssd ntp
A partir de este momento ya podemos empezar con la configuración de cada uno de los elementos.
Kerberos
Editamos el archivo de configuración /etc/krb5.conf y especificamos:
[libdefaults]
default_realm = EXAMPLE.COM
ticket_lifetime = 24h #
renew_lifetime = 7d
Sólo con esta configuración, el sistema debería ser capaz de encontrar los servidores KDC, es decir, nuestro controlador de dominio. En este punto, es importante configurar el NTP para que sincronice la hora de nuestro controlador de dominio primario, agregando a /etc/ntp.conf la siguiente línea:
server dc1.example.com
Configuración de Samba
Para realizar la configuración es tan sencillo como crear un nuevo archivo /etc/samba/smb.cof y agregar lo siguiente:
workgroup = EXAMPLE
client signing = yes
client use spnego = yes
kerberos method = secrets and keytab
realm = EXAMPLE.COM
security = ads
SSSD
En el archivo /etc/sssd/sssd.conf deberemos añadir la siguiente configuración:
[sssd]
services = nss, pam
config_file_version = 2
domains = EXAMPLE.COM
[domain/EXAMPLE.COM]
id_provider = ad
access_provider = ad
override_homedir = /home/%d/%u
Ahora es necesario establecer los permisos y propietario del archivo. Si no están correctos, el servicio SSSD no va a iniciarse:
$ sudo chown root:root /etc/sssd/sssd.conf
$ sudo chmod 600 /etc/sssd/sssd.conf
Name Service Switch
El Name Service Switch de GNU/Linux se configura en /etc/nsswitch.conf. Este sistema nos permitirá especificar, para cada una de las bases de datos definidas en la Librería de C estándar de GNU, que sistemas son los responsables de estas y el orden de preferencia a la hora de buscar usuarios.
En principio la instalación del servicio SSD ya modifica este archivo, pero debemos comprobar que tiene un aspecto parecido a este:
passwd: compat sss
group: compat sss
…
netgroup: nis sss
sudoers: files sss
/etc/hosts
Es muy recomendable que agregues a este archivo el FQDN de la máquina Linux que vas a unir al dominio, por ejemplo, en nuestro caso:
192.168.1.10 client-linux client-linux.example.com
Integrar Linux a Active Directory
Ahora que lo tenemos todo configurado, ya podemos empezar con la integración del cliente Linux al Active Directory. En primer lugar, hay que reiniciar los servicios NTP y Samba :
sudo systemctl restart ntp
sudo systemctl restart smbd nmbd
Ahora ya podemos solicitar un ticket Kerberos a nuestro controlador de dominio:
$ sudo kinit Administrator
Password for Administrator:
Si no sale ningún error es que hemos obtenido el ticket correctamente. Lo podemos comprobar de la siguiente forma:
$ sudo klist
Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: Administrator@EXAMPLE.COM
Valid starting: 25/05/2016 21:10:00
Expires 02/06/2020 07:10:00
Service principal: krbtgt/EXAMPLE.COM@EXAMPLE.COM
renew until 02/06/2020 21:09:58
Ya podemos unirnos al dominio:
$ sudo net ads join -k
Using short domain name – EXAMPLE
Joined ‘CLIENT-LINUX’ to dns domain ‘example.com’
Si no aparece ningún error, ya deberíamos estar unidos al dominio, por lo que sólo faltaría reiniciar el servicio SSSD para que aplique la configuración: $ sudo systemctl restart sssd
Una vez se haya reiniciado podemos verificar que todo funciona correctamente haciendo una consulta directamente a nuestro Active Directory desde Linux (en nuestro caso vamos a probar con un usuario de AD llamado test_ad):
$ getent passwd test_ad test_ad:*:6347736775:6347736775:Test_ad:/home/EXAMPLE.COM/test_ad
Si nos sale una salida parecida a la anterior, ya tenemos integrado el cliente Linux con el Active Directory. Por lo que, ya podremos iniciar sesión en nuestro cliente con los usuarios de dominio.
Creando un $HOME para los usuarios de dominio con pam_mkhomedir
En este paso vamos a configurar el módulo PAM para que, una vez inicien sesión los usuarios de dominio se les genere su espacio home dinámicamente.
Para ello tendríamos que ir al fichero /etc/pam.d/common-session y agregar la siguiente línea justo después del pam_unix.so
session required pam_mkhomedir.so skel=/etc/skel/ umask=0022
Esto solo funcionará si activamos el “override_homedir” en el sssd.conf como hemos hecho en este artículo.