Вы находитесь на странице: 1из 11

Autenticacin en GNU/Linux con usuarios de un Directorio Activo | D...

https://albertomolina.wordpress.com/2012/02/12/autenticacion-en-gnu...

Desde lo alto del Cerro


Autenticacin en GNU/Linux con usuarios de un
Directorio Activo

i
1 Votes
Si tienes experiencia con Directorio Activo de Windows y autenticacin en sistemas GNU/Linux
esta entrada puede resultarte interesante, pero no est pensada para gente que est empezando
con estos temas porque se dan por sabidos conceptos de Kerberos, LDAP, nss y PAM.

Esta entrada tiene dos objetivos, el principal es utilizar un Directorio Activo montado sobre un
equipo con Windows 2008R2 como mecanismo de autenticacin vlido para usuarios de un
equipo GNU/Linux, pero la forma de hacerlo ser paso a paso y sin utilizar Samba; quizs no
sea la forma ms sencilla de hacerlo, pero s la que cumple mejor con el segundo objetivo que no
es otro que comprender de forma precisa todos los componentes implicados. La parte de la
centralizacin de las cuentas de usuario, bien por el protocolo CIFS (SMB), bien por NFS se deja
para una entrada posterior.
Como equipo cliente se utilizar Debian Squeeze y como ya se ha mencionado como servidor se
utilizar Windows Server 2008R2. Es importante tener en cuenta la versin de Windows server
porque el esquema LDAP para UNIX de que se incluye cada versin de Windows Server es
diferente, por lo que aqu se explica no tiene por qu servir para otras versiones de Windows
Server.

Equipos para el montaje

1 de 11

Nombre del Dominio: casa.local


Nombre del servidor: calamardo (calamardo.casa.local)
Direccin IP del servidor: 10.0.0.3
Nombre del cliente: patricio (patricio.casa.local)
Direccin IP del cliente: 10.0.0.2
24/5/2016 23:25

Autenticacin en GNU/Linux con usuarios de un Directorio Activo | D...

https://albertomolina.wordpress.com/2012/02/12/autenticacion-en-gnu...

Nota: Los nombres no estn al azar, son los elegidos para los servidores del prcticas por los
alumnos de 2 de ASIR de este curso ;).

Elementos de la configuracin
Aunque un Directorio Activo se congure en los sistemas Windows Server como si se tratara de
una sola cosa, realmente es un conjunto de servicios y conexiones entre ellos congurado para
trabajar de forma coordinada. Los servicios ms relevantes del Directorio Activo son un
servidor LDAP para almacenar toda la informacin de los objetos del dominio (equipos,
usuarios, grupos, etc.) y un servidor Kerberos para autenticar cada uno de ellos. Adems de
estos dos servicios, es necesario que exista un servidor DNS congurado completamente en el
que estn incluidos todos los equipos del Dominio y se suele utilizar el protocolo NTP, para
asegurar que todos los equipos del dominio tienen sus relojes coordinados; paso que
obviaremos en esta conguracin por una simple sincronizacin manual de los relojes de los
dos equipos utilizados.

En nuestro caso, partimos de un Directorio Activo ya congurado sobre la base LDAP


dc=casa,dc=local, que adaptaremos para que permita conexiones desde equipos GNU/Linux y
en el equipo cliente conguraremos los siguientes componentes:
Cliente DNS
Cliente nss-ldap
Cliente Kerberos
Cliente PAM para Kerberos

Consideraciones previas sobre LDAP


El directorio Activo est congurado inicialmente slo para albergar informacin de usuarios de
sistemas Windows, no de usuarios de un equipo GNU/Linux o en general de cualquier UNIX.
De forma ms precisa esto signica que el Directorio Activo por defecto no incluye ningn
objeto que pertenezca a una clase (objectClass) con los atributos necesarios para albergar la
informacin de usuarios de UNIX.
Un objeto de LDAP con los atributos mnimos necesarios para almacenar informacin de
usuarios UNIX (conforme a la RFC 2307) sera:

2 de 11

1
2
3
4
5
6
7
8
9
10

dn: uid=usuario,ou=People,dc=casa,dc=local
objectClass: account
objectClass: posixAccount
objectClass: top
uid: usuario
cn: Nombre Apellido1 Apellido2
loginShell: /bin/bash
uidNumber: 2001
gidNumber: 2001
homeDirectory: /home/usuario

24/5/2016 23:25

Autenticacin en GNU/Linux con usuarios de un Directorio Activo | D...

https://albertomolina.wordpress.com/2012/02/12/autenticacion-en-gnu...

Lo que necesitamos es que el Directorio Activo tenga objetos con atributos en los que guardar
exactamente la misma informacin, aunque los atributos tengan otros nombres. En el caso del
Directorio Activo de Windows 2008R2, Un objeto de LDAP destinado a almacenar informacin
de usuarios sera algo como:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

dn: CN=Nombre Apellido1 Apellido2,CN=Users,DC=casa,DC=local


objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: user
cn: Nombre Apellido1 Apellido2
sn: Apellido1 Apellido2
givenName: Nombre
distinguishedName: CN=Nombre Apellido1 Apellido2,CN=Users,DC=casa,DC=local
instanceType: 4
whenCreated: 20120211185610.0Z
whenChanged: 20120211185610.0Z
displayName: Nombre Apellido1 Apellido2
uSNCreated: 65578
uSNChanged: 65583
name: Nombre Apellido1 Apellido2
objectGUID:: lBMijOgChUWibgWekXtVfQ==
userAccountControl: 512
badPwdCount: 0
codePage: 0
countryCode: 0
badPasswordTime: 0
lastLogoff: 0
lastLogon: 0
pwdLastSet: 129734601707528000
primaryGroupID: 513
objectSid:: AQUAAAAAAAUVAAAA+nllo3NnxVVOoZfVWAQAAA==
accountExpires: 9223372036854775807
logonCount: 0
sAMAccountName: usuario
sAMAccountType: 805306368
userPrincipalName: usuario@casa.local
objectCategory: CN=Person,CN=Schema,CN=Configuration,DC=casa,DC=local
dSCorePropagationData: 16010101000000.0Z

Hay varias cosas que podemos deducir de lo anterior:

El ObjectClass utilizado por Active Directory para almacenar informacin de usuarios es


user en lugar de posixAccout
El atributo que dene el nombre de usuario es sAMAccountName en lugar de uid en
sistemas GNU/Linux
El atributo que dene el nombre completo del usuario es en ambos casos cn.
El atributo que dene el nombre de usuario no se utiliza como rdn, en su lugar se utiliza el
nombre completo del usuario (atributo cn).

En el caso de los grupos la cosa es ms sencilla, pero vamos a ver la diferencia entre un objeto
con los atributos mnimos para almacenar informacin de grupos UNIX (RFC 2307) y un grupo
del Directorio Activo. El primero sera algo como:

3 de 11

24/5/2016 23:25

Autenticacin en GNU/Linux con usuarios de un Directorio Activo | D...

1
2
3
4
5

https://albertomolina.wordpress.com/2012/02/12/autenticacion-en-gnu...

dn: cn=grupo1,ou=Group,dc=casa,dc=local
objectClass: posixGroup
objectClass: top
cn: grupo1
gidNumber: 2001

Mientras que un grupo tpico en AD es:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

dn: CN=grupo1,CN=Users,DC=casa,DC=local
objectClass: top
objectClass: group
cn: grupo1
distinguishedName: CN=grupo1,CN=Users,DC=casa,DC=local
instanceType: 4
whenCreated: 20120211191507.0Z
whenChanged: 20120211191507.0Z
uSNCreated: 65585
uSNChanged: 65585
name: grupo1
objectGUID:: SHTAgQ8Q5UmYgpCnJOvpog==
objectSid:: AQUAAAAAAAUVAAAA+nllo3NnxVVOoZfVWQQAAA==
sAMAccountName: grupo1
sAMAccountType: 268435456
groupType: -2147483646
objectCategory: CN=Group,CN=Schema,CN=Configuration,DC=casa,DC=local
dSCorePropagationData: 16010101000000.0Z

Este caso es ms sencillo, porque lo nico que nos hace falta es incluir un atributo en el que
almacenar el GID del grupo (gidNumber en RFC 2307).

Configuracin del servidor


Configuracin del DNS
En el caso de que el equipo cliente no estuviera en la zona DNS, se incluye mediante la Consola
de Administracin de DNS

Configuracin del LDAP


Accedemos a la herramienta Administracin del Servidor > Roles > Servicios de dominio de
Directorio Activo y agregamos el servicio del Rol Administracin de Identidades para UNIX,
para que el directorio Activo pueda contener objetos con Atributos para UNIX. Una vez
reiniciado el servidor, el Directorio Activo ser capaz de almacenar informacin de usuarios y
grupos UNIX.
Para aadir los atributos necesarios para almacenar informacin de usuarios y grupos UNIX,
seleccionamos las propiedades de un grupo cualquiera en la consola Usuarios y Equipos del
4 de 11

24/5/2016 23:25

Autenticacin en GNU/Linux con usuarios de un Directorio Activo | D...

https://albertomolina.wordpress.com/2012/02/12/autenticacion-en-gnu...

Active Directory y veremos la nueva pestaa UNIX a ributes:

(h ps://albertomolina.les.wordpress.com/2012/02/pantallazo-calamardo-mc3a1quina-virtual2.png)
Y de forma anloga, seleccionamos un usuario y rellenamos las casillas de la pestaa UNIX
A ributes:

5 de 11

24/5/2016 23:25

Autenticacin en GNU/Linux con usuarios de un Directorio Activo | D...

https://albertomolina.wordpress.com/2012/02/12/autenticacion-en-gnu...

(h ps://albertomolina.les.wordpress.com/2012/02/pantallazo-calamardo-mc3a1quina-virtual3.png)

Esos atributos son los realmente los mnimos necesarios para almacenar la informacin de
usuarios y grupos UNIX, pero el problema es que Microsoft va siempre a su aire y los nombres
de esos atributos en el LDAP no siguen la RFC 2307, por lo que tendremos que averiguar qu
nombres se utilizan y ajustar el cliente GNU/Linux para esos atributos. Para ver qu nombres se
han utilizado para los atributos, lo mejor es hacer una consula LDAP desde el equipo cliente:
1

patricio:~$ ldapsearch -x -LLL -D "cn=Administrador,cn=Users,dc=casa,dc=local" -W

1
2
3
4
5
6
7
8

unixUserPassword: ABCD!efgh12345$67890
uid: usuario
msSFU30Name: usuario
msSFU30NisDomain: casa
uidNumber: 2001
gidNumber: 2001
unixHomeDirectory: /home/usuario
loginShell: /bin/bash

en la que aparecen los siguientes atributos nuevos:

Donde tenemos todos los atributos necesarios para la cuenta del usuario UNIX, adems en esta
versin de Active Directory los nombres de los atributos son los esperados, salvo
homeDirectory que aparece como unixHomeDirectory-

Configuracin del cliente


Configuracin del DNS
Editamos el chero /etc/resolv.conf:
1
2

domain casa.local
nameserver 10.0.0.3

Configuracin del cliente nss-ldap


Para que un sistema GNU/Linux pueda obtener la informacin de las cuentas de los usuarios de
un servidor LDAP, hay que instalar en el sistema alguna de las bibliotecas de nss para ldap. Hay
dos paquetes en Debian squeeze que proveen estas bibliotecas, nos decantamos por libnss-ldapd
6 de 11

24/5/2016 23:25

Autenticacin en GNU/Linux con usuarios de un Directorio Activo | D...

https://albertomolina.wordpress.com/2012/02/12/autenticacion-en-gnu...

porque permite una mejor depuracin de la consulta LDAP. Adems es habitual instalar las
bibliotecas nss de ldap junto con las de autenticacin LDAP (libpam-ldap), pero como en esta
ocasin la autenticacin ser va Kerberos, por lo que instalamos el paquete libnss-ldapd sin los
paquetes que recomienda:
1

# apt-get --no-install-recommends install libnss-ldapd

En la instalacin se nos piden los parmetros de la conguracin, que podemos ignorar o poner
los parmetros por defecto porque hay que realizar en cualquier caso una conguracin
manual, por lo que editamos el chero /etc/nslcd.conf y dejamos el siguiente contenido:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

# The user and group nslcd should run as.


uid nslcd
gid nslcd

# The location at which the LDAP server(s) should be reachable.


uri ldap://calamardo.casa.local (ldap://calamardo.casa.local)
# The search base that will be used for all queries.
base dc=casa,dc=local
# The LDAP protocol version to use.
ldap_version 3

# The DN to bind with for normal lookups.


binddn cn=usuario,cn=Users,dc=casa,dc=local
bindpw asd-123
# The search scope.
scope sub

# Objeto que contiene los usuarios (por defecto es posixAccount)


filter passwd (objectClass=User)
# Objeto que contiene los grupos (por defecto es posixGroup)
filter group (objectClass=Group)

# Mapeo de los atributos que no son los esperados por RFC2703


map passwd homeDirectory unixHomeDirectory
map passwd gecos name
map group memberUid member

Donde hay que comentar que a diferencia de la conguracin estndar de OpenLDAP, en


Active Directory no se permiten consultas de LDAP annimas, por lo que hay que incluir el dn
de un usuario y su contrasea en claro (no hay ni que decir que ese usuario debera tener
permisos muy restringidos en el Directorio Activo). Reiniciamos el servicio nslcd y podemos
comprobar cmo nuestro sistema GNU/Linux puede identicar los usuarios del directorio
activo que tengan atributos UNIX, como usuarios propios:
1
2
3

# /etc/init.d/nslcd restart
# getent passwd usuario
usuario:*:2001:2001:Nombre Apellido1 Apellido2:/home/usuario:/bin/bash

O si con getent no nos queda claro, podemos probar lo siguiente:

7 de 11

24/5/2016 23:25

Autenticacin en GNU/Linux con usuarios de un Directorio Activo | D...

1
2
3
4

https://albertomolina.wordpress.com/2012/02/12/autenticacion-en-gnu...

root@patricio:~# touch /tmp/prueba.txt


root@patricio:~# chown 2001:2001 /tmp/prueba.txt
root@patricio:~# ls -l /tmp/prueba.txt
-rw-r--r-- 1 usuario grupo1 0 feb 11 23:32 /tmp/prueba.txt

Configuracin de Kerberos
Los datos de la cuenta se obtienen de una consulta LDAP, pero la autenticacin se realiza con
Kerberos, por lo que instalamos el cliente de Kerberos del MIT:
1

# aptitude install krb5-config krb5-user

1
2
3
4
5
6
7
8

[libdefaults]
default_realm = CASA.LOCAL
...
[realms]
CASA.LOCAL = {
kdc = calamardo.casa.local
admin_server = calamardo.casa.local
}

1
2
3
4
5
6
7
8
9

root@patricio:~# kinit usuario


Password for usuario@CASA.LOCAL: (se introduce la contrasea)
root@patricio:~# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: usuario@CASA.LOCAL

Y modicamos los siguientes parmetros del chero /etc/krb5.conf:

Simplemente con esta conguracin, se puede probar la autenticacin de algn usuario del
directorio activo con Kerberos:

Valid starting
Expires
02/11/12 23:54:11 02/12/12 09:54:19
renew until 02/12/12 23:54:11

Service principal
krbtgt/CASA.LOCAL@CASA.LOCAL

Configuracin del cliente PAM Kerberos


Ahora slo falta que el sistema utilice el servidor Kerberos del Directorio Activo para autenticar
los usuarios, para lo que instalamos el paquete libpam-krb5:
1

# aptitude install libpam-krb5

Ahora los usuarios del directorio activo que tengan atributos UNIX, se pueden utilizar como
usuarios del sistema y podemos comprobarlo con el programa login:

8 de 11

24/5/2016 23:25

Autenticacin en GNU/Linux con usuarios de un Directorio Activo | D...

1
2
3
4
5
6
7
8
9
10
11
12

https://albertomolina.wordpress.com/2012/02/12/autenticacion-en-gnu...

root@patricio:~# login
patricio nombre: usuario
Password:
Linux patricio 2.6.32-5-amd64 #1 SMP Fri Sep 9 20:23:16 UTC 2011 x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Sin directorio, entrando con HOME=/

El ltimo mensaje nos advierte que el home que tiene denido el usuario en el directorio LDAP
no existe en patricio, por lo que utiliza como directorio HOME el directorio raz. Hay dos
soluciones para esto, lo que en terminologa del directorio activo se conoce como perl jo o
perl mvil, es decir que el usuario tenga sus documentos en el equipo local o los tenga
centralizados en algn recurso de la red.
Aqu presentamos la conguracin ms sencilla, que es crear el directorio home de forma
automtica en local la primera vez que entra el usuario, para lo que editamos el chero
/etc/pam.d/common-session y aadimos la lnea:
1

session

optional

pam_mkhomedir.so

Si volvemos a entrar ahora con el mismo usuario, obtendremos:


1
2
3
4
5
6
7
8
9
10
11
12
13

root@patricio:~# login
patricio nombre: usuario
Password:
ltimo inicio de sesin:sb feb 11 23:59:03 CET 2012en pts/0
Linux patricio 2.6.32-5-amd64 #1 SMP Fri Sep 9 20:23:16 UTC 2011 x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Creando directorio '/home/usuario'.

Nuestro equipo GNU/Linux ya es capaz de utilizar sin problemas los usuarios del directorio
activo como usuarios propios, que pueden crear una sesin en el sistema y si su directorio home
no existe, se crea al vuelo la primera vez que se entra.
Comprender bien los elementos que intervienen en esta conguracin es bsico si uno se quiere
enfrentar a la conguracin de sistemas heterogneos de cuentas centralizadas y precisamente
por eso en este caso hemos preferido obviar samba, que es ms sencillo de congurar para
unirse a un dominio Windows a travs de winbind, pero que a la vez es ms opaco. El siguiente
paso en la conguracin sera conseguir perles mviles, pero es mejor tratarlo por separado
porque esta entrada ya se hace demasiado larga

9 de 11

24/5/2016 23:25

Autenticacin en GNU/Linux con usuarios de un Directorio Activo | D...

https://albertomolina.wordpress.com/2012/02/12/autenticacion-en-gnu...

Referencias
Arthur de Jong nss pam ldapd (h p://arthurdejong.org/nss-pam-ldapd/)

active directory , admin , debian , kerberos , ldap , libnss-ldapd , nss , squeeze ,


windows

Esta entrada se public el 12-02-12, 1:35 am y se archiv como General. Puedes seguir cualquier
respuesta a esta entrada a travs de RSS 2.0. Puedes saltar hasta el nal para dejar una
respuesta. Servicio de ping est actualmente deshabilidado.

10 de 11

COMENTARIOS (7)

#1 por Juan Antonio el 13-02-12 - 11:07 pm

Muy interesante, me lo apunto para probarlo en el laboratorio.


Enhorabuena por el articulo!
#2 por albertomolina el 13-02-12 - 11:18 pm

Pues espero tus comentarios cuando lo pruebes :-)

#3 por Arturo Borrero el 15-02-12 - 7:53 pm

No se suele encontrar documentacin buena y precisa en el idioma de Cervantes. Estupendo!


Te basaste en documentacin ocial de Microsoft? Conoces las diferencias tcnicas entre
nscd y nslcd, as como, por ejemplo, libpam-ldap y libpam-ldapd, etc..?
Estupendo lo del home directory y el login shell, que me estaba sacando de quicio.
Un saludo.

#4 por albertomolina el 15-02-12 - 8:55 pm


Gracias por los comentarios.

De la documentacin ocial de Microsoft es difcil sacar algo ;), parece muy completa
24/5/2016 23:25

Autenticacin en GNU/Linux con usuarios de un Directorio Activo | D...

11 de 11

https://albertomolina.wordpress.com/2012/02/12/autenticacion-en-gnu...

pero luego no entra nunca en los detalles precisos. Realmente sali todo por las
bsquedas con LDAP desde el cliente y sobre todo con nslcd en modo debug, qu
bueno! porque puedes trazar la consulta perfectamente y fue como me di cuenta que
haba que especicar el objectClass user.

Con respecto a libnss-ldapd y dems, es un fork de las bibliotecas originales de PADL, tal
como explican en el sitio del proyecto (ver Referencias). Despus de trabajar con ellas
creo que no vuelvo a utilizar libnss-ldap que no s cmo depurar.
En n, me alegro de que te sea til.

#5 por ARC el 22-08-12 - 6:01 pm

Hola Alberto!
Primero me gustara darte la enhorabuena por tu blog, simplemente es genial!
Me gustara iniciarme en el tema de LDAP sobre Linux pero por ms que busco
documentacin al intentar implementarla siempre falla algo, podras darme referencias
sobre este tema? Quiero empezar desde cero.
Muchas gracias.

#6 por albertomolina el 24-08-12 - 1:58 pm


Hola ARC,

Podras empezar con el documento de LDAP que hay en la seccin Manuales de este
blog (h ps://albertomolina.les.wordpress.com/2008/07/autenticacion_ldap.pdf), que ya
est un poco anticuado y hay cosas que han cambiado, pero puede ayudar a entender los
conceptos.

#7 por Chelox el 4-12-12 - 4:52 pm

estimado, he probado la solucion mencionda, todo bien hasta el punto donde agredo el user
AD con kinit y klist, pero al salir de la maquina y volver a logearme no entra el susario,
espero puedas darme una mano.
Saludos.

Crea un blog o un sitio web gratuitos con WordPress.com. El tema Fusion.

24/5/2016 23:25

Вам также может понравиться