28 agosto 2012

Integración Ubuntu Linux con "Active Directory" I: Unir máquina

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.

2 comentarios:

Freddy Taborda dijo...

Interesante articulo, lo he segui y funciona todo, he usado ubuntu 12.04 y Windows 2008.

Pero tengo una pregunta, si quiero tener carpetas compartidas en el samba con los usuarios y grupos de Linux, como puedo hacer.

Gracias de nuevo.

El 64 dijo...

Al autenticarse frente al dominio los usuarios deben ser los de éste. No recuerdo si he probado a hacer lo que dices, pero sólo sería válido desde máquinas que no fueran windows.