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.