El directorio activo de Microsoft es simplemente una integración completa del estándar de directorio LDAP con autenticación Kerberos y resolución DNS, ligeramente modificado, al estilo Microsoft, para
complicar las cosas.
Desde hace tiempo quería probar si se podía integrar fácilmente una máquina Linux con un servidor de dominio Windows, para que cualquier usuario del dominio pueda acceder a la máquina y, pese a que la documentación disponible está desfasada, sí, es posible, y dentro de lo que cabe bastante sencillo. En los artículos consultados se propone el uso de herramientas de terceros, pero el procedimiento que voy a describir hace uso únicamente de samba y de algunas herramientas de autenticación necesarias también incluidas en los repositorios.
Empecemos con el proceso. Se describe la integración con Windows Server 2003 y 2008 (supongo que también funcionará con el 2000) para Ubuntu 10.04, 12.04 y 14.04. El resto de distribuciones desde hace un par de años seguirán un proceso muy similar, exceptuando la instalación de paquetes y la ubicación de algunos archivos. Otras anteriores seguirían un procedimiento más laborioso en la segunda parte del artículo.
Tendremos por tanto un dominio midominio.com con un servidor Windows llamado servidor y una máquina linux que se llama ubuntu.
Lo primero es instalar los programas necesarios:
sudo apt-get install winbind samba krb5-user libpam-mount
En la 14.04:
sudo apt-get install winbind samba krb5-user libpam-mount libpam-winbind libnss-winbind acl
Durante la configuración postinstalación se pide el nombre del reino predeterminado. Se introducirá en mayúsculas el nombre del dominio. Según versión también preguntará el servidor de kerberos y el servidor administrativo, que corresponden a la máquina del servidor de dominio Windows servidor.MIDOMINIO.COM.
Los datos anteriores se guardan en el archivo /etc/krb5.cnf. En caso de que no se pregunten en la postinstalación, habrá que editar dicho archivo e introducirlo manualmente en cada una de las secciones siguientes. En cualquier caso, puede confirmarse que los datos son correctos:
[libdefaults]
default_realm =MIDOMINIO.COM
[realms]
MIDOMINIO.COM = {
kdc = servidor.MIDOMINIO.COM
admin_server = servidor.MIDOMINIO.COM
default_domain = MIDOMINIO.COM
}
[domain_realm]
.midominio.com = MIDOMINIO.COM
midominio.com = MIDOMINIO.COM
En la 14.04 no parece ser necesario el bloque domain_realm. En la configuración de la interfaz de red hay que indicar el dominio de búsqueda. Si se usa NetworkManager se indicará gráficamente en la pestaña Ajustes de IPV4, pero si se trata de un servidor sin entorno de escritorio instalado, se editará /etc/resolv.conf y se añadirá la IP del servidor DNS si no estuviera ya indicado (puede ser distinto al servidor de dominio Windows), y el dominio de búsqueda:
domain midominio.com
search midominio.com
nameserver 192.168.1.10
En Ubuntu 14.04 sin entorno de escritorio, en lugar de resolv.conf se modificará el archivo /etc/resolvconf/resolv.conf.d/base y posteriormente se actualizará:
sudo resolvconf -u
Se indica también el nombre y dirección IP en la red de la máquina propia en /etc/hosts:
127.0.1.1 ubuntu
192.168.1.29 ubuntu ubuntu.midominio.com
En un directorio Windows es muy importante la sincronización horaria debido a la autenticación por kerberos, por lo que hay que configurar como servidor horario el mismo servidor que tenga el servidor de dominio, o al propio servidor de dominio. Se edita /etc/default/ntpdate:
NTPSERVERS="servidor.midominio.com"
NTPOPTIONS="-u"
La segunda opción evita usar puertos privilegiados.
Ya está preparada la configuración básica. Vamos a empezar a tocar la de Samba, que se ha de configurar como cliente de ADS.
Primero es recomendable hacer un respaldo del archivo original para evitar problemas y como referencia, ya que es una buena fuente de información sobre los parámetros existentes:
cd /etc/samba
mv smb.conf smb.conf.orig
He preparado un archivo funcional smb.conf que puede usarse como base. Atención a workgroup, que ha de llevar guión, y a las mayúsculas:
[global]
workgroup = MIDOMINIO-COM
realm = MIDOMINIO.COM
server string = Servidor %h (Samba, Ubuntu)
security = ADS
map to guest = Bad User
obey pam restrictions = Yes
pam password change = Yes
passwd program = /usr/bin/passwd %u
passwd chat = *Introduzca\snueva\s*\sclave:* %n\n *Repita\snueva\s*\sclave:* %n\n *clave\sactualizada\scorrectamente* .
unix password sync = Yes
restrict anonymous = 2
syslog = 0
log file = /var/log/samba/log.%m
max log size = 1000
announce version = 4
announce as = NT Workstation
os level = 0
local master = No
domain master = No
dns proxy = No
usershare allow guests = Yes
panic action = /usr/share/samba/panic-action %d
template shell = /bin/bash
winbind cache time = 10
winbind enum users = Yes
winbind enum groups = Yes
winbind use default domain = Yes
winbind refresh tickets = Yes
winbind offline logon = Yes
invalid users = root
En Ubuntu 14.04 cambia ligeramente. En lugar de security = ADS:
server role = member server
A continuación, según versión, se añadirá también:
- En Ubuntu 10.04
idmap uid = 167771-335549
idmap gid = 167771-335549
passdb backend = tdbsam
- En Ubuntu 12.04 y 14.04:
idmap config * : range = 167771-335549
idmap config * : backend = tdb
Lo siguiente viene por defecto en el original y se añadirá al final:
[printers]
comment = All Printers
path = /var/spool/samba
create mask = 0700
printable = Yes
print ok = Yes
browseable = No
[print$]
comment = Printer Drivers
path = /var/lib/samba/printers
Si se configura una copia del original o se realiza cualquier otro cambio, es recomendable, por no decir imprescindible, utilizar la utilidad de verificación de samba:
testparm
Lo que devuelve será la configuración corregida en su caso y podrá sustituirse el actual smb.conf por lo que devuelva.
Vamos a empezar a probar lo que hemos configurado. Probemos Kerberos:
sudo kinit Administrador@MIDOMINIO.COM
Para lo anterior y para los casos siguientes puede usarse cualquier otra cuenta con permisos de administración del dominio en lugar de Administrador.
Si todo va bien, no debe mostrar ningún mensaje. Para visualizar los tiques kerberos almacenados:
sudo klist
Y ahora vamos a meter de una vez la máquina en el dominio:
en el dominio:
sudo net ads join -U administrador
Para los dominios NT en lugar de ads se hubiera usado domain. Introducido esto, el sistema contestará:
Using short domain name -- MIDOMINIO-COM
Joined 'UBUNTU' to realm 'midominio.com'
DNS Update for ubuntu.midominio.com failed: ERROR_DNS_GSS_ERROR
DNS update failed!
El error DNS es normal si el servidor de dominio no es servidor DNS, ya que lógicamente no ha podido actualizar el registro DNS de la máquina.
Para el caso de querer abandonar el dominio se introduciría algo muy similar a lo anterior:
net ads leave -U Administrador
Una vez introducida la máquina en el dominio, se puede probar la conexión con el directorio activo:
sudo net ads testjoin
Desde el servidor Windows ya constará la máquina como miembro y podrá organizarse en el grupo que convenga. En la segunda parte del artículo se indicará cómo configurar la máquina Linux para que valide usuarios contra el dominio.