LDAP Linux · 5 min read · Dec 13, 2025
Autenticación LDAP en Linux

Este howto te mostrará cómo almacenar tus usuarios en LDAP y autenticar algunos de los servicios contra él. No mostraré cómo instalar paquetes particulares, ya que depende de la distribución/sistema. Me centraré en la configuración “pura” de todos los componentes necesarios para tener autenticación/almacenamiento de usuarios en LDAP. El howto asume de alguna manera que estás migrando de una autenticación regular de passwd/shadow, pero también es adecuado para personas que lo hacen desde cero.
Requisitos
- OpenLDAP
- pam_ldap
- nss_ldap
- herramientas de migración PADL
Introducción
Lo que queremos lograr es tener nuestros usuarios almacenados en LDAP, autenticados contra LDAP (directo o pam) y tener alguna herramienta para gestionar esto de una manera comprensible para los humanos.
De esta manera, podemos usar todo el software que tiene soporte para LDAP o recurrir al módulo PAM LDAP, que actuará como un puente PAM->LDAP.
Más información sobre la idea de LDAP se puede encontrar en Wikipedia: LDAP wikipedia
Configurando OpenLDAP
OpenLDAP consiste en los demonios slapd y slurpd. Este howto cubre un servidor LDAP sin replicación, por lo que nos centraremos solo en slapd. También asumo que has instalado e inicializado tu instalación de OpenLDAP (depende del sistema/distribución). Si es así, pasemos a la parte de configuración.
En mi sistema (Gentoo), la configuración de OpenLDAP se almacena en /etc/openldap, nos interesa el archivo /etc/openldap/slapd.conf. Pero primero tenemos que generar una contraseña para el administrador de LDAP, para ponerla en el archivo de configuración:
slappasswd -h {md5}La configuración se ve así:
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/nis.schema
allow bind_v2
pidfile /var/run/openldap/slapd.pid
argsfile /var/run/openldap/slapd.args
modulepath /usr/lib/openldap/openldap
access to attrs=userPassword
by dn="uid=root,ou=People,dc=domain,dc=com" write
by dn="cn=Manager,dc=domain,dc=com" write
by anonymous auth
by self write
by * none
access to dn.base="" by * read
access to *
by dn="cn=Manager,dc=domain,dc=com" write
by * read
database bdb
suffix "dc=domain,dc=com"
rootdn "cn=Manager,dc=domain,dc=com"
rootpw {MD5}Tk1sMytv5ipjr+Vhcf03JQ==
directory /var/lib/openldap-data
index objectClass eq
Recuerda cambiar el sufijo y las rutas según tus necesidades.
Estas son opciones básicas con algunos ACL básicos necesarios para cambiar contraseñas por el usuario. Si deseas más funcionalidad, consulta el manual sobre OpenLDAP. Ahora que tenemos una configuración adecuada para slapd, podemos iniciar el demonio:
service slapd startPor favor, recuerda tener algo así en el archivo de configuración responsable de los argumentos pasados a slapd (la ruta debe apuntar a slapd.sock):
OPTS="-h 'ldaps:// ldapi://%2fvar%2frun%2fopenldap%2fslapd.sock'"Ahora podemos probar si openldap está funcionando correctamente. No tenemos ningún dato aún en el directorio, pero podemos intentar enlazarnos como cn=Manager,dc=domain,dc=com. Cuando se te pida la contraseña, debes usar la que generaste (por supuesto, la versión en texto plano de la misma):
ldapsearch -D "cn=Manager,dc=domain,dc=com" -WMigrar/Agregar datos al directorio
Ahora que tenemos un servidor LDAP en funcionamiento, tenemos que llenarlo con datos, ya sea creando o migrando entradas. Te mostraré cómo migrar entradas existentes desde el regular /etc/passwd, /etc/shadow, /etc/groups.
El primer paso es configurar las herramientas de migración según tus necesidades. El archivo de configuración en Gentoo se encuentra en /usr/share/migrationtools/migrate_common.ph.
Generalmente, solo necesitas cambiar estos:
$DEFAULT_BASE = "dc=domain,dc=com";
$EXTENDED_SCHEMA = 1;
Ahora estás listo para migrar los datos (en realidad funciona incluso sin el comando de exportación):
export ETC_SHADOW=/etc/shadow
./migrate_base.pl > /tmp/base.ldif
./migrate_group.pl /etc/group /tmp/group.ldif
./migrate_hosts.pl /etc/hosts /tmp/hosts.ldif
./migrate_passwd.pl /etc/passwd /tmp/passwd.ldifAhora tenemos los datos en el formato entendido por el servidor LDAP. Por favor, abre uno de los archivos con un editor de texto para acostumbrarte a la sintaxis. Después de eso, podemos agregar los datos desde los ldifs.
ldapadd -D "cn=Manager,dc=domain,dc=com" -W -f /tmp/base.ldifldapadd -D "cn=Manager,dc=domain,dc=com" -W -f /tmp/group.ldifldapadd -D "cn=Manager,dc=domain,dc=com" -W -f /tmp/passwd.ldifldapadd -D "cn=Manager,dc=domain,dc=com" -W -f /tmp/hosts.ldifPuedes intentar buscar algunos datos:
ldapsearch uid=foouserConfiguración del cliente
Por cliente, me refiero a la máquina que se conecta al servidor LDAP para obtener usuarios y autorizar. También puede ser la máquina en la que se ejecuta el servidor LDAP. En ambos casos, tenemos que editar tres archivos: /etc/ldap.conf, /etc/nsswitch.conf y /etc/pam.d/system-auth.
Comencemos con ldap.conf, el cliente de ldap:
BASE dc=domain, dc=com
scope sub
suffix "dc=domain,dc=com"
## cuando quieras cambiar la contraseña de un usuario por root
rootbinddn cn=Manager,dc=domain,dc=com
## son necesarios cuando tu ldap falla
timelimit 5
bind_timelimit 5
uri ldap://ldap.domain.com/
pam_password exop
ldap_version 3
pam_filter objectclass=posixAccount
pam_login_attribute uid
pam_member_attribute memberuid
nss_base_passwd ou=Computers,dc=cognifide,dc=pl
nss_base_passwd ou=People,dc=cognifide,dc=pl
nss_base_shadow ou=People,dc=cognifide,dc=pl
nss_base_group ou=Group,dc=cognifide,dc=pl
nss_base_hosts ou=Hosts,dc=cognifide,dc=pl
Ahora es el momento de nsswitch.conf y pam.
Agrega esto a nsswitch.conf:
passwd: files ldap
shadow: files ldap
group: files ldap
Y cambia el system-auth (o lo que tengas como login, sshd, etc.) a:
auth required pam_env.so
auth sufficient pam_unix.so likeauth nullok
auth sufficient pam_ldap.so use_first_pass
auth required pam_deny.so
account sufficient pam_unix.so
account sufficient pam_ldap.so
account required pam_ldap.so
password required pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 retry=3
password sufficient pam_unix.so nullok md5 shadow use_authtok
password sufficient pam_ldap.so use_first_pass
password required pam_deny.so
session required pam_limits.so
session required pam_unix.so
session optional pam_ldap.so
Es hora de probarlo. La mejor herramienta para ello es el viejo getent. Elige un usuario de tu sistema y emite:
getent passwd | grep foouserDeberías obtener el resultado dos veces, si es así, nss_ldap funciona bien. La parte de pam se puede probar eliminando un usuario del /etc/passwd y tratando de iniciar sesión a través de ssh.
Apache mod_auth_ldap
Para tener autorización LDAP en apache, tienes que cargar el módulo mod_auth_ldap.
LoadModule mm_auth_ldap_module modules/mod_auth_ldap.soAhora es suficiente hacer .htaccess así:
AuthName "Restringido"
AuthType Basic
AuthLDAPURL ldap://ldap.domain.com:389/ou=People,dc=domain,dc=com?uid
AuthLDAPBindDN "cn=Manager,dc=domain,dc=com"
AuthLDAPBindPassword "tu_contraseña_secreta_a_ldap_admin"
require valid-user
Ten en cuenta que este método también se puede utilizar para la autorización de subversion WebDAV.
Herramientas de administración para LDAP
Hay algunas herramientas que recomiendo usar para administrar el servidor OpenLDAP:
- phpldapadmin - herramienta basada en web
- ldapvi - navegación con vim
- herramientas de migración PADL - herramientas de migración
- herramientas IDEALX sambaldap - herramientas de samba LDAP
Otras aplicaciones compatibles con ldap
- Postfix
- Courier IMAP
- jabberd
- eGroupware
Resumen
Si alguien tiene algo que agregar, por favor hágalo. Sé que la configuración puede no ser perfecta.
Recibe nuevas publicaciones en tu bandeja de entrada.
No spam. Cancela la suscripción en cualquier momento.