Por lo general en ambientes institucionales es una práctica muy común utilizar controladores de dominio debido a que estos brindan muchas facilidades a la hora de administrar toda una red de computadoras. Sin muchos preámbulos hoy pretendo monstrarles cómo unir una máquina con Debian 8 a un dominio Samba/AD.

samba-ad

1. Instalar dependencias

Las dependencias por fortuna están todas en los repositorios. Para instalarlas ejecutamos:

sudo aptitude install ntpdate samba smbclient samba-common winbind krb5-user \
libpam-krb5 libpam-winbind libnss-winbind

Si durante la instalación de las dependencias nos pide un REALM ponemos cualquiera de todas formas el fichero de autenticación por kerberos lo editaremos más adelante.

2. Sincronizar la hora

Antes de unirnos al dominio es muy conveniente sincronizar la hora de nuestra pc. Esto lo logramos ejecutando:

# Sustituyan la dirección ip por la del servidor de hora que tengan
# a su disposición.
sudo ntpdate -u 10.0.0.4

3. Hacer backup de los ficheros de configuración

Hacemos backup de cada uno de los ficheros originales para, en caso de una amenaza nuclear, podamos vivir para contar la historia.

sudo cp /etc/krb5.conf{,.bak}
sudo cp /etc/samba/smb.conf{,.bak}
sudo cp /usr/share/pam-configs/winbind{,.bak}

El backup del fichero winbind no puede quedarse dentro de la carpeta pam-configs porque genera conflictos asi que lo movemos para otra carpeta, que en este caso le puse backups.

mkdir backups && sudo mv /usr/share/pam-configs/*.bak backups

Limpiamos los ficheros a los que les hicimos backup o si lo prefieren pueden trabajar sobre ellos tal y como están en este momento.

sudo echo "" > /etc/krb5.conf
sudo echo "" > /etc/samba/smb.conf
sudo echo "" > /usr/share/pam-configs/winbind

4. Configurar kerberos

Ahora comenzamos a editar el archivo /etc/krb5.conf. Al el mismo le establecemos los valores que se muestran a continuación, modificando los valores UCI.CU y los kdc por los valores deseados. Como pueden observar si tienen más de un DC se puede poner sin problemas.

[logging]
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log

[libdefaults]
 default_realm = UCI.CU
 dns_lookup_realm = false
 dns_lookup_kdc = false
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true
 default_ccache_name = KEYRING:persistent:%{uid}

[realms]
 UCI.CU = {
 kdc = ucidc1.uci.cu
 kdc = ucidc2.uci.cu
 kdc = ucidc3.uci.cu
 admin_server = ucidc1.uci.cu
 }

[domain_realm]
 .uci.cu = UCI.CU
 uci.cu = UCI.CU

Guardamos el fichero y limpiamos toda la info que está en caché para luego probar si podemos obtener un nuevo ticket de kerberos. El primer klist no debería mostrar credenciales.

kdestroy
klist
kinit usuario@UCI.CU
klist

Si ya podemos obtener tickets desde el controlador de dominio entonces pasamos a configurar samba.

5. Configurar samba

Editamos el archivo /etc/samba/smb.conf y realizamos los siguientes cambios.

[global]
        workgroup = UCI
        security = ads
        realm = uci.cu
        password server = ucidc1.uci.cu ucidc2.uci.cu ucidc3.uci.cu
        kerberos method = secrets only
        domain logons = no
        template homedir = /home/%U
        template shell = /bin/bash
        winbind enum groups = yes
        winbind enum users = yes
        winbind use default domain = yes
        winbind offline logon = true
        domain master = no
        local master = no
        prefered master = no
        os level = 0
        idmap config *:backend = tdb
        idmap config *:range = 10000-20000
        idmap config UCI:backend = rid
        idmap config UCI:range=10000000-20000000
        server string = Welcome to %h server
        log file = /var/log/samba/log.%m
        max log size = 50

[homes]
        comment = Home Directories
        browseable = no
        writable = yes
;       valid users = %S
;       valid users = MYDOMAIN\%S

Si ya tenían carpetas compartidas con anterioridad conviene dejar inicialmente el fichero smb.conf como se mostró anteriormente hasta que se pruebe que la integración con el dominio funciona y nos permite loguearnos. Luego podemos volver a compartir las carpetas. Para comprobar que la sintaxis del fichero es la correcta pueden usar la herramienta testparm.

En este punto pudieramos ya unirnos al dominio pero se nos quedarían algunos cabos sueltos, que aunque no imprescindibles si son importantes como lo son la restricción de los usuarios y grupos del dominio que podrán loguearse en nuestro sistema, la creación del home del usuario al momento de loguearse y otros detalles relacionados con los scripts de inicio del winbind y samba.

6. Configurar nsswitch

De momento, continuamos con las configuraciones preparatorias. Lo primero, editar el fichero /etc/nsswitch.conf. De este fichero editamos las  líneas donde aparecen passwd y group agregándole al final la palabra winbind. Nos debe quedar como sigue:

passwd: compat winbind
group:  compat winbind

7. Configurar winbind

Editamos el fichero /usr/share/pam-configs/winbind, que es donde está la configuración del perfil de autenticación utilizando winbind. El fichero debe quedarnos como sigue:

Name: Winbind NT/Active Directory authentication
Default: yes
Priority: 192
Auth-Type: Primary
Auth:
	[success=end default=ignore]	pam_winbind.so krb5_auth krb5_ccache_type=FILE cached_login [require_membership_of=domain admins,sec-uci-security,yaiselhg] try_first_pass
Auth-Initial:
	[success=end default=ignore]	pam_winbind.so krb5_auth krb5_ccache_type=FILE cached_login [require_membership_of=domain admins,sec-uci-security,yaiselhg] 
Account-Type: Primary
Account:
	[success=end new_authtok_reqd=done default=ignore]	pam_winbind.so
Password-Type: Primary
Password:
	[success=end default=ignore]	pam_winbind.so use_authtok try_first_pass
Password-Initial:
	[success=end default=ignore]	pam_winbind.so
Session-Type: Additional
Session:
	required	pam_mkhomedir.so umask=0022 skel=/etc/skel
	optional	pam_winbind.so

Basicamente las diferencias entre este y el fichero original son la inclusión de la opción require_membership_of para establecer los grupos y usuarios del dominio que pueden loguearse y el empleo de pam_mkhomedir.so para la creación del home de los usuarios cuando se loguean por primera vez.

Noten que la opción require_membership_of está encerrada entre corchetes. En este caso requiere que así sea pues uno de los valores que recibe tiene espacio intermedio (grupo domain admins).

8. Deshabilitar Kerberos

En este punto es probable que algunos se sientan confundidos y se pregunten ¿configuramos el kerberos para luego deshabilitarlo? La respuesta es sí y no. En este paso deshabilitaremos al kerberos como mecanismo de autenticación directa pero aún así lo seguiremos utilizando, solo que a través de winbind que es lo que estamos buscando.

Para deshabilitar kerberos ejecutamos:

sudo pam-auth-update --remove krb5 --force

Si les sale una vista con una lista de los mecanismos de autenticación disponibles desmarquen la autenticación por Kerberos y seleccionen Ok para finalizar. En caso que no salga no pasa nada, coninúen con el tutorial.

pam2

9. Habilitamos el inicio automático de Winbind

Por defecto el winbind no viene habilitado para iniciar de forma automática (aunque esto puede variar entre distribuciones) por lo que debemos y tenemos que habilitarlo, de lo contrario no podremos loguearnos en el sistema utilizando ninguna cuenta del dominio. Esto lo logramos primeramente editando el script de inicio /etc/init.d/winbind y sustituyendo samba por smbd en la directiva Should-Start:

# Should-Start:      smbd

y luego ejecutando:

sudo update-rc.d winbind defaults
#En Ubuntu 14.04 probablemente no aparezca el comando systemctl
sudo systemctl enable winbind

Es posible que con solo uno de los comandos anteriores resuelvan, yo como soy paranoico con estas cosas para asegurarme ejecuto los dos, ustedes prueben. Habiendo habilitado el inicio automático de winbind ejecutamos:

sudo /etc/init.d/winbind stop
sudo /etc/init.d/smbd restart
sudo /etc/init.d/winbind start

10. Unir al dominio

Al fin!!! 🙂 Luego de tanto ir y venir llegamos al paso final de este “cómo se hace”. Para unirnos al dominio basta con ejecutar:

sudo net join -U yaiselhg # Sustituyan el usuario por el de ustedes

Escriben su contraseña y si todo fue bien ya estamos en el dominio. Es posible que haya algún problema con el dns si tratan de unirse con un nombre que ya existía. Pueden asegurarse de que el hombre no esté siendo utilizado ejecutando:

host example.uci.cu

Si les devuelve una salida diciendo algo como “example.uci.cu has address 10.11.12.13” entonces el nombre está en uso y provocará conflictos a la hora de unirnos al dominio.

Finalmente para comprobar si nos unimos correctamente al dominio ejecutamos:

sudo net ads testjoin

Si responde diciendo “Join is OK” es porque todo esta OK, valga la redundancia.

Conclusiones

Y esto es todo por hoy. Se que algunos prefieren utilizar LikeWiseOpen pero, creanme, LikeWiseOpen forma tremendo basurero en nuestro sistema y lo peor es que no sabemos a ciencia cierta todo lo que hace para lograr el mismo fin. Este tutorial funciona además en Ubuntu 14.04 (personalmente lo comprobé en otras PCs). Espero que el mismo les sea de utilidad.

Nota 1: Para los que no se lanzaron desesperadamente a ejecutar paso por paso de forma manual mientras leían el artículo y, quieran ahorrarse tooodo el trabajo de hacerlo… acá les comparto también un script que automatiza todo el proceso. Esto para que después no me digan que soy abusador 🙂 Se aceptan reportes de bugs en CodeComunidades (solo UCI) o GitHub.

join2domain-v0.2.3.tar.gz (612 descargas)

Nota 2: Si se han dado cuenta cuando salió el artículo la versión era la 0.1.0 y ahora ven una superior. Eso de debe a las mejoras que se le han hecho gracias a sugerencias y pruebas que le han hecho al script algunos miembros de la comunidad. Actualmente incluye soporte para Debian 8.x, Kali Linux 2.x, Ubuntu 14.x, 15.x y 16.x, Linux Mint 17.x y 18.x y, Nova 5.x. Recomiendo que cada vez que lo vayan a usar entren al artículo y revisen si hay una versión más actualizada. Gracias a todos…