LDAP: Instalar y configurar OpenLDAP

Instalar y configurar openLDAP


Este how-to está basado en la Instalación de openLDAP en un computador corriendo Red Hat, Fedora, CentOS o cualquier distribución basada en el instalador de paquetes “yum”.

En caso de utilizar distribuciones basadas en otro instalador deberemos instalar los mismos paquetes pero con el instalador correspondiente (aptitude para distros basadas en Debian)

TODAS LAS TAREAS LAS REALIZAREMOS COMO SUPER USUARIO ( su - o sudo su )

1) instalamos LDAP
[root@kike ~]# yum install openldap-servers openldap-clients nss_ldap
….

2) Copiamos DB_CONFIG.example al direcotrio de ldap
[root@kike ~]# cd /etc/openldap/
[root@kike ~]# cp DB_CONFIG.example /var/lib/ldap/DB_CONFIG

3) Creamos un password para el LDAP
[root@kike openldap]# slappasswd
New password:
Re-enter new password:
{SSHA}V7IS3vYe8P0/IcOvJmfEdjY1LXuWPV3U
Copiamos la salida de este comando (la password SSHA) para añadirla a sldap.conf:

/etc/openldap/slapd.conf

En principio lo único que modificamos ens lo que aparece en negrita:

database bdb
suffix “dc=ldap-kike,dc=com,dc=uy”
rootdn “cn=Manager,dc=ldap-kike,dc=com,dc=uy”
# Cleartext passwords, especially for the rootdn, should
# be avoided. See slappasswd(8) and slapd.conf(5) for details.
# Use of strong authentication encouraged.
# rootpw secret
# rootpw {crypt}ijFYNcSNctBYg
rootpw {SSHA}V7IS3vYe8P0/IcOvJmfEdjY1LXuWPV3U

Notas: en el tag “database” seleccionamos bdb que corresponde al formato de almacenamiento de datos por defecto de OpenLDAP (se puede elegir Mysql, Postgresql u otros formatos de bases de datos http://www.openldap.org/doc/admin24/backends.html pese a no ser recomendados en el sitio oficial del proyecto openldap.

En suffix se “arma” el dominio al que va a atender LDAP (en este caso ldap-kike.com.uy)
Rootdn corresponde el nombre con que se autentica el administrador de openLDAP (en este caso Manager pero puede ser modificado por el que se considere conveniente)

Rootpw es la password del usuario administrador (Manager en el ejemplo)

4) Estamos listos para arrancar el servidor:
[root@kike openldap]# service ldap start
Checking configuration files for slapd: config file testing succeeded [ OK ]
Starting slapd: [ OK ]

5) Toda la información a cargar se introduce en archivos con formato ldif.
http://en.wikipedia.org/wiki/LDAP_Data_Interchange_Format

6) Creamos un archivo para inicializar la base de LDAP
En este caso lo llamé ldap-init.ldif y contiene:
[root@kike openldap]# cat ldap-init.ldif
dn: dc=ldap-kike,dc=com,dc=uy
objectclass: dcObject
objectclass: organization
o: Servidor LDAP ldap-kike
dc: ldap-kike
dn: cn=Manager,dc=ldap-kike,dc=com,dc=uy
objectclass: organizationalRole
cn: Manager

7) Inicializamos la base con el siguiente comando
[root@kike openldap]# /usr/bin/ldapadd -a -x -D ‘cn=Manager,dc=ldap-kike,dc=com,dc=uy’ -W -f ldap-init.ldif
Enter LDAP Password: (ingresar la password del administrador)
adding new entry “dc=ldap-kike,dc=com,dc=uy”
adding new entry “cn=Manager,dc=ldap-kike,dc=com,dc=uy”

8) Visualizar el contenido de la base
[root@kike openldap]# ldapsearch -h 127.0.0.1 -x -b “dc=ldap-kike,dc=com,dc=uy”
Devolverá algo similar a esto:

# extended LDIF
#
# LDAPv3
# base with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# ldap-kike.com.uy
dn: dc=ldap-kike,dc=com,dc=uy
objectClass: dcObject
objectClass: organization
o: Servidor LDAP ldap-kike
dc: ldap-kike
# Manager, ldap-kike.com.uy
dn: cn=Manager,dc=ldap-kike,dc=com,dc=uy
objectClass: organizationalRole
cn: Manager
# search result
search: 2
result: 0 Success
# numResponses: 3
# numEntries: 2

9) El comando authconfig-tui
Nos va a configurar el archivo /etc/nsswitch.conf, /etc/ldap.conf, pam y otros. Esto lo ejecutamos en cosola nos abre un menú de texto donde lo configuramos para que soporte autentificaciones LDAP y completamos los datos que nos pide (por omisión están seleccionadas con * las opciones a elegir)

10) Crear un usuario en el directorio LDAP.
También utilizamos un archivo con formato ldif
[root@kike openldap]# cat user.ldif
dn: uid=usuario1,dc=ldap-kike,dc=com,dc=uy
uid: usuario1
cn: usuario1
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {crypt}$1$TEDFGNB3$m24Mo06Q06EXMop7INKrC/
shadowLastChange: 14335
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 10000
gidNumber: 10000
homeDirectory: /home/usuario1
gecos: usuario1
En este caso el userPassword se generó de esta forma:
[root@kike openldap]# openssl passwd -1 -salt TEDFGNB345RTErea
Password:
$1$TEDFGNB3$m24Mo06Q06EXMop7INKrC/
El parámetro -1 es de MD5 y el -salt son caracteres aleatorios.

11) Lo agregamos al directorio ldap también con el comando ldapadd
[root@kike openldap]# ldapadd -a -x -D ‘cn=Manager,dc=ldap-kike,dc=com,dc=uy’ -W -f user.ldif
Verificamos que el usuario está andando con el comando id
[root@kike openldap]# id usuario1
uid=10000(usuario1) gid=10000 groups=10000

12) Para agregar un grupo usamos tambien un archivo con formato ldif
(en este caso group.ldif)

[root@kike openldap]# cat group.ldif
dn: cn=users,dc=ldap-kike,dc=com,dc=uy
objectClass: posixGroup
gidNumber: 10000
cn: users
memberUid: usuario1
description: Grupo Users

13 ) Lo añadimos a LDAP también con ldapadd de la siguiente forma:
[root@kike openldap]# ldapadd -a -x -D ‘cn=Manager,dc=ldap-kike,dc=com,dc=uy’ -W -f group.ldif
Para probar si se agregó con éxito:
[root@kike openldap]# id usuario1
uid=10000(usuario1) gid=10000(users) groups=10000(users)
Vemos que el usuario esta en el grupo “users”.

14) Ahora creamos home del user y copiamos los archivos de skel.
[root@kike openldap]# mkdir /home/usuario1
[root@kike openldap]# rsync -a /etc/skel/ /home/usuario1
[root@kike openldap]# chown -R usuario1.users /home/usuario1
[root@kike openldap]# chmod 700 /home/usuario1
[root@kike openldap]# ls -la /home/usuario1
total 20
drwx—— 2 users 4096 Jan 15 15:37 .
drwxr-xr-x 4 root root 4096 Jan 15 15:37 ..
-rw-r–r– 1 usuario1 users 33 Dec 29 2010 .bash_logout
-rw-r–r– 1 usuario1 users 176 Dec 29 2010 .bash_profile
-rw-r–r– 1 usuario1 users 124 Dec 29 2010 .bashrc

15) Loguear un usuario
Una vez finalizado vamos a probar si todo funciona bien. En el ejemplo el servidor openLDAP corre en un equipo con dirección IP 192.168.150.24 e intentamos una conexión a dicho equipo desde otro con el comando ssh (corroborar que el demonio sshd esté corriendo en el servidor donde instalamos openLDAP)
$ ssh -l usuario1 192.168.150.24
usuario1@192.168.150.24′s password:
Last login: Sat Jan 15 21:24:50 2010 from 192.168.150.207
[usuario1@kike ~]$ id
uid=10000(usuario1) gid=10000(users) grupos=10000(users)
[usuario1@kike ~]$ pwd
/home/usuario1
El usuario se encuentra logueado en el servidor autenticado por el servidor openLDAP.

16) En caso de necesitar agregar otro usuario editaremos CON CUIDADO el archivo user.ldif utilizado anteriormente.
[root@kike openldap]# cat user.ldif
dn: uid=usuario2,dc=ldap-kike,dc=com,dc=uy
uid: usuario2
cn: usuario2
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {crypt}$1$TEDFGNB3$ogOvJKTt/CviC47q/dBon1
shadowLastChange: 14335
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 10001
gidNumber: 10000
homeDirectory: /home/usuario2
gecos: usuario2
Lo agregamos a la base de LDAP:
[root@kike openldap]# ldapadd -x -D ‘cn=Manager,dc=ldap-kike,dc=com,dc=uy’ -W -f user.ldif
Enter LDAP Password:
adding new entry “uid=usuario2,dc=ldap-kike,dc=com,dc=uy”
Luego creamos el home y compiamos los files de skel, cambiamos permisos como lo hicimos con el otro usuario.

17)Para agregarlo al grupo users:
# cat group.ldif
dn: cn=users,dc=ldap-kike,dc=com,dc=uy
objectClass: posixGroup
gidNumber: 10000
cn: users
memberUid: usuario1
memberUid: usuario2
description: Grupo Users

18) Para actualizar la base de datos LDAP utilizamos el comando ldapmodify
[root@kike openldap]# ldapmodify -x -D ‘cn=Manager,dc=ldap-kike,dc=com,dc=uy’ -W -f group.ldif
Enter LDAP Password:
modifying entry “cn=users,dc=ldap-kike,dc=com,dc=uy”
Listo, comprobamos los datos con ldapsearch:
[root@kike openldap]# ldapsearch -h 127.0.0.1 -x -b “dc=ldap-kike,dc=com,dc=uy”
……
……
Verificamos que todo esté funcionando correctamente:
[root@kike openldap]# id usuario2
uid=10001(usuario2) gid=10000(users) groups=10000(users)


19) Seguridad básica LDAP
Mediante ACLs agregaremos mínimos controles de seguridad como restringir el acceso a la base de datos de LDAP más que nada,que no puedan ver los passwords de los demás usuarios (al estilo shadow)


Agregamos al archivo sldap.conf
access to attrs=userPassword
by dn=”cn=Manager,dc=ldap-kike,dc=com,dc=uy” write
by self write
by anonymous auth
by * none
access to dn.base=”" by * read
access to *
by dn=”cn=Manager,dc=ldap-kike,dc=com,dc=uy” write
by * read
Reiniciamos el servicio ldap
[root@kike openldap]# service ldap restart
Ahora, si hacemos un:
ldapsearch -h 127.0.0.1 -x -b “dc=ldap-kike,dc=com,dc=uy”
NO van a poder observar todos los password de los usuarios, sólo el de ustedes, si se autentifican al LDAP.
ldapsearch -h 127.0.0.1 -x -b “dc=ldap-kike,dc=com,dc=uy” -D “uid=usuario2,dc=ldap-kike,dc=com,dc=uy” -W

# usuario1, ldap-kike.com.uy
dn: uid=usuario1,dc=ldap-kike,dc=com,dc=uy
uid: usuario1
cn: usuario1
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
shadowLastChange: 14335
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 10000
gidNumber: 10000
homeDirectory: /home/usuario1
gecos: usuario1
# usuario2, ldap-kike.com.uy
dn: uid=usuario2,dc=ldap-kike,dc=com,dc=uy
uid: usuario2
cn: usuario2
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword:: e2NyeXB0fSQxJFRFREZHTkIzJG9nT3ZKS1R0L0N2aUM0N3EvZEJvbjE=
shadowLastChange: 14335
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 10001
gidNumber: 10001
homeDirectory: /home/usuario2
gecos: usuario2


Quedan otras tareas interesantes para realizar como por ejemplo configurar un servidor de réplica LDAP (para lograr redundancia y alta disponibilidad de servicio). En otro post crearé un how-to de este otro punto.

Saludos!

LDAP: Instalar y configurar OpenLDAP

1 comentario - LDAP: Instalar y configurar OpenLDAP

gis_ma
Para centos 7 no existe los mismos archivos.. sera que nos puden ayudar con esa referencia para configurar LDAP en centos 7