LDAP (OpenLDAP): instalación y configuración (I)
LDAP (OpenLDAP): instalación y configuración (I):
Llevaba tiempo queriendo probar LDAP y finalmente me he decidido, sobre todo por el hecho de utilizarlo para autenticación y gestión de usuarios de forma centralizada. Pese a no poder ponerlo en práctica de momento a gran escala, me conformo con hacer alguna que otra prueba con pequeños entornos virtuales.
En esta entrada voy a tratar de momento lo más básico de OpenLDAP. Sobre todo no voy a entrar prácticamente en todo lo relacionado con creación “manual” de arboles de directorios pues de momento no domino al 100% la estructuración de objetos y demás, vamos a usar los scripts que ofrece OpenLDAP para migración e importación de objetos.
La instalación de OpenLDAP (implementación Open Source de LDAP) la vamos a hacer a través de YUM (RHEL, CentOS, Fedora…), en Debian o similar podéis hacerlo por APT, no tiene mayor complicación.
La configuración básica que tenemos que revisar una vez instalado se encuentra en el fichero de configuración slapd.conf. Lo primero que especificamos es la definición de una base de datos o directorio en la que almacenaremos toda la información (bdb en este caso), la información/sufijo del dominio (ldap-db.com en nuestro caso) y el DN que tendrá acceso total (root, Manager o como queráis llamarlo) sin restricciones a la información (rootdn).
A tener en cuenta respecto al suffix, que en este caso es ldap-db.com es que al especificarlo se separa el nombre del dominio (ldap-db) y su TLD (com). Se pueden especificar varios pero es necesario mínimo uno para cada base de datos:
La string que véis en rootpw es la clave del usuario de gestión (rootdn), la hemos generado con el comando slappaswd:
Ya podemos arrancar el servidor ldap, también lo configuramos para que arranque de forma automática tras reinicios:
Ahora mismo ya tenemos inicializada nuestra base de datos bdb, pero no hay ningún dato en ella. Todo lo relacionado con la arquitectura y estructuración de la base de datos es un tema muy extenso y complejo, así que os emplazo a la documentación en www.openldap.org para familiarizaros con ella. Lo que vamos a hacer en este caso es exportar los usuarios y grupos de sistema (junto con sus claves) a formato ldif para tenerlos dentro del directorio LDAP y poder usar la autenticación a través de él. Para ello utilizamos los scripts en perl que nos ofrece el propio OpenLDAP. Se encuentran en:
Estos scripts permiten migrar al formato ldif toda la información del sistema. Lo primero que hacemos es configurar unas variables en el script migrate_common.ph:
Después importamos la base de la configuración:
Después podemos ya hacer lo mismo para los usuarios y grupos del sistema, de esta forma ya tendremos los objetos base de la base de datos/árbol LDAP y todos los usuarios y grupos del sistema:
E importamos al árbol LDAP:
Y si ahora lanzamos una consulta contra LDAP veremos estas entradas reflejadas:
Una vez configurado OpenLDAP podemos hacer lo propio con el sistema para que utilice su directorio de forma activa. En este caso utilizando la autenticación en el sistema de usuarios a través de LDAP.
Tenemos que modificar el fichero /etc/nsswitch.conf e indicarle que la autenticación a través de passwd/shadow/group también se puede hacer vía LDAP:
Luego modificamos el fichero /etc/ldap.conf indicando:
Bien, ahora usando el comando getent podemos verificar si está cogiendo los datos vía LDAP, si salen los usuarios dos veces es que lo coge bien (una por passwd y otra por LDAP):
Si ahora borraramos el usuario “alex” del passwd y shadow (visudo, vipw y vigr: editando ficheros críticos en Linux de forma segura), aparecería sólo una vez, pero podríamos seguir haciendo login con el usuario, porque lo coge de LDAP. Guardar un backup antes de los ficheros que modifiquéis:
Vamos a activar el logging de LDAP para verificar que todo funciona OK. Para ello añadimos la siguiente línea al fichero /etc/openldap/slapd.conf:
Luego a nivel de syslog, en el fichero /etc/syslog.conf:
Y reiniciamos:
Volviendo a la prueba de antes, si la hacéis de nuevo y hacéis login con un usuario veréis que autentica vía LDAP en el log:
En próximas entradas veremos entre otras cosas como por ejemplo configurar ssh para que use también la autenticación LDAP, añadir y borrar registros, tareas de mantenimiento en el árbol de directorios, etc.
LDAP son las siglas de Lightweight Directory Access Protocol (en español Protocolo Ligero de Acceso a Directorios) que hacen referencia a un protocolo a nivel de aplicación el cual permite el acceso a un servicio de directorio ordenado y distribuido para buscar diversa información en un entorno de red. LDAP también es considerado una base de datos (aunque su sistema de almacenamiento puede ser diferente) a la que pueden realizarse consultas.
Llevaba tiempo queriendo probar LDAP y finalmente me he decidido, sobre todo por el hecho de utilizarlo para autenticación y gestión de usuarios de forma centralizada. Pese a no poder ponerlo en práctica de momento a gran escala, me conformo con hacer alguna que otra prueba con pequeños entornos virtuales.
En esta entrada voy a tratar de momento lo más básico de OpenLDAP. Sobre todo no voy a entrar prácticamente en todo lo relacionado con creación “manual” de arboles de directorios pues de momento no domino al 100% la estructuración de objetos y demás, vamos a usar los scripts que ofrece OpenLDAP para migración e importación de objetos.
Instalación de OpenLDAP
La instalación de OpenLDAP (implementación Open Source de LDAP) la vamos a hacer a través de YUM (RHEL, CentOS, Fedora…), en Debian o similar podéis hacerlo por APT, no tiene mayor complicación.
# yum install -y openldap openldap-servers openldap-clients
Configuración inicial/básica de OpenLDAP
La configuración básica que tenemos que revisar una vez instalado se encuentra en el fichero de configuración slapd.conf. Lo primero que especificamos es la definición de una base de datos o directorio en la que almacenaremos toda la información (bdb en este caso), la información/sufijo del dominio (ldap-db.com en nuestro caso) y el DN que tendrá acceso total (root, Manager o como queráis llamarlo) sin restricciones a la información (rootdn).
A tener en cuenta respecto al suffix, que en este caso es ldap-db.com es que al especificarlo se separa el nombre del dominio (ldap-db) y su TLD (com). Se pueden especificar varios pero es necesario mínimo uno para cada base de datos:
# vim /etc/openldap/slapd.conf database bdb suffix "dc=ldap-db,dc=com" rootdn "cn=gestion,dc=ldap-db,dc=com" rootpw {SSHA}6SPjVCdtjv2aC3O+pvddSiFkdKGEAa3sH
La string que véis en rootpw es la clave del usuario de gestión (rootdn), la hemos generado con el comando slappaswd:
# slappasswd New password: Re-enter new password: {SSHA}6SPjVCdtjv2aC3O+pvddSiFkdKGEAa3sH
Ya podemos arrancar el servidor ldap, también lo configuramos para que arranque de forma automática tras reinicios:
# /etc/init.d/ldap start Checking configuration files for slapd: config file testing succeeded [ OK ] Starting slapd: [ OK ] # chkconfig ldap on
Cómo insertar o importar registros en la base de datos LDAP
Ahora mismo ya tenemos inicializada nuestra base de datos bdb, pero no hay ningún dato en ella. Todo lo relacionado con la arquitectura y estructuración de la base de datos es un tema muy extenso y complejo, así que os emplazo a la documentación en www.openldap.org para familiarizaros con ella. Lo que vamos a hacer en este caso es exportar los usuarios y grupos de sistema (junto con sus claves) a formato ldif para tenerlos dentro del directorio LDAP y poder usar la autenticación a través de él. Para ello utilizamos los scripts en perl que nos ofrece el propio OpenLDAP. Se encuentran en:
/usr/share/openldap/migration
Estos scripts permiten migrar al formato ldif toda la información del sistema. Lo primero que hacemos es configurar unas variables en el script migrate_common.ph:
$DEFAULT_MAIL_DOMAIN = "ldap-db.com"; $DEFAULT_BASE = "dc=ldap-db,dc=com"; # Las siguientes variables es por si queremos evitar # la exportación de usuarios y grupos de sistema que # no interesan... $IGNORE_UID_BELOW = 1000; $IGNORE_GID_BELOW = 100; $IGNORE_UID_ABOVE = 9999; $IGNORE_GID_ABOVE = 9999;
Después importamos la base de la configuración:
# /usr/share/openldap/migration/migrate_base.pl > base.ldif # ldapadd -x -W -D 'cn=gestion, dc=ldap-db, dc=com' -h 127.0.0.1 -f base.ldif Enter LDAP Password: adding new entry "dc=ldap-db,dc=com" adding new entry "ou=Hosts,dc=ldap-db,dc=com" adding new entry "ou=Rpc,dc=ldap-db,dc=com" adding new entry "ou=Services,dc=ldap-db,dc=com" adding new entry "nisMapName=netgroup.byuser,dc=ldap-db,dc=com" adding new entry "ou=Mounts,dc=ldap-db,dc=com" adding new entry "ou=Networks,dc=ldap-db,dc=com" adding new entry "ou=People,dc=ldap-db,dc=com" adding new entry "ou=Group,dc=ldap-db,dc=com" adding new entry "ou=Netgroup,dc=ldap-db,dc=com" adding new entry "ou=Protocols,dc=ldap-db,dc=com" adding new entry "ou=Aliases,dc=ldap-db,dc=com" adding new entry "nisMapName=netgroup.byhost,dc=ldap-db,dc=com"
Después podemos ya hacer lo mismo para los usuarios y grupos del sistema, de esta forma ya tendremos los objetos base de la base de datos/árbol LDAP y todos los usuarios y grupos del sistema:
# /usr/share/openldap/migration/migrate_group.pl /etc/group /tmp/group.ldif # /usr/share/openldap/migration/migrate_passwd.pl /etc/passwd /tmp/passwd.ldif
E importamos al árbol LDAP:
# ldapadd -x -W -D 'cn=gestion, dc=ldap-db, dc=com' -h 127.0.0.1 -f passwd.ldif Enter LDAP Password: adding new entry "uid=root,ou=People,dc=ldap-db,dc=com" adding new entry "uid=bin,ou=People,dc=ldap-db,dc=com" adding new entry "uid=daemon,ou=People,dc=ldap-db,dc=com" adding new entry "uid=adm,ou=People,dc=ldap-db,dc=com" adding new entry "uid=lp,ou=People,dc=ldap-db,dc=com" adding new entry "uid=sync,ou=People,dc=ldap-db,dc=com" adding new entry "uid=shutdown,ou=People,dc=ldap-db,dc=com" ... ... ... # ldapadd -x -W -D 'cn=gestion, dc=ldap-db, dc=com' -h 127.0.0.1 -f group.ldif Enter LDAP Password: adding new entry "cn=root,ou=Group,dc=ldap-db,dc=com" adding new entry "cn=bin,ou=Group,dc=ldap-db,dc=com" adding new entry "cn=daemon,ou=Group,dc=ldap-db,dc=com" adding new entry "cn=sys,ou=Group,dc=ldap-db,dc=com" adding new entry "cn=adm,ou=Group,dc=ldap-db,dc=com" adding new entry "cn=uucp,ou=Group,dc=ldap-db,dc=com" adding new entry "cn=man,ou=Group,dc=ldap-db,dc=com" ... ... ... ...
Y si ahora lanzamos una consulta contra LDAP veremos estas entradas reflejadas:
# ldapsearch -x -b 'dc=ldap-db,dc=com' '(objectclass=*)' # extended LDIF # # LDAPv3 # base with scope subtree # filter: (objectclass=*) # requesting: ALL # # ldap-db.com dn: dc=ldap-db,dc=com ... ...
Configurar el sistema para autenticar contra LDAP
Una vez configurado OpenLDAP podemos hacer lo propio con el sistema para que utilice su directorio de forma activa. En este caso utilizando la autenticación en el sistema de usuarios a través de LDAP.
Tenemos que modificar el fichero /etc/nsswitch.conf e indicarle que la autenticación a través de passwd/shadow/group también se puede hacer vía LDAP:
passwd: files ldap group: files ldap shadow: files ldap
Luego modificamos el fichero /etc/ldap.conf indicando:
URI ldap://<IP_SERVIDOR_LDAP_O_FQDN:389/ base dc=ldap-db,dc=com
Bien, ahora usando el comando getent podemos verificar si está cogiendo los datos vía LDAP, si salen los usuarios dos veces es que lo coge bien (una por passwd y otra por LDAP):
# getent passwd | grep alex alex:x:27:27:Alex Garcia:/var/lib/mysql:/bin/bash alex:x:27:27:Alex Garcia:/var/lib/mysql:/bin/bash
Si ahora borraramos el usuario “alex” del passwd y shadow (visudo, vipw y vigr: editando ficheros críticos en Linux de forma segura), aparecería sólo una vez, pero podríamos seguir haciendo login con el usuario, porque lo coge de LDAP. Guardar un backup antes de los ficheros que modifiquéis:
# getent passwd | grep alex alex:x:27:27:Alex Garcia:/var/lib/mysql:/bin/bash
Activar log de LDAP
Vamos a activar el logging de LDAP para verificar que todo funciona OK. Para ello añadimos la siguiente línea al fichero /etc/openldap/slapd.conf:
loglevel 128
Luego a nivel de syslog, en el fichero /etc/syslog.conf:
local4.* /var/log/ldap.log
Y reiniciamos:
# /etc/init.d/syslog restart && /etc/init.d/ldap restart
Volviendo a la prueba de antes, si la hacéis de nuevo y hacéis login con un usuario veréis que autentica vía LDAP en el log:
Aug 31 01:19:16 cluster02 slapd[2312]: => access_allowed: search access to "uid=alex,ou=People,dc=ldap-db,dc=com" "objectClass" requested Aug 31 01:19:16 cluster02 slapd[2312]: => access_allowed: backend default search access granted to "(anonymous)" Aug 31 01:19:16 cluster02 slapd[2312]: => access_allowed: search access to "uid=alex,ou=People,dc=ldap-db,dc=com" "uid" requested Aug 31 01:19:16 cluster02 slapd[2312]: => access_allowed: backend default search access granted to "(anonymous)" Aug 31 01:19:16 cluster02 slapd[2312]: => access_allowed: read access to "uid=alex,ou=People,dc=ldap-db,dc=com" "entry" requested
En próximas entradas veremos entre otras cosas como por ejemplo configurar ssh para que use también la autenticación LDAP, añadir y borrar registros, tareas de mantenimiento en el árbol de directorios, etc.
Comentarios
Publicar un comentario