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 start

Por 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" -W

Migrar/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.ldif

Ahora 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.ldif
ldapadd -D "cn=Manager,dc=domain,dc=com" -W -f /tmp/group.ldif
ldapadd -D "cn=Manager,dc=domain,dc=com" -W -f /tmp/passwd.ldif
ldapadd -D "cn=Manager,dc=domain,dc=com" -W -f /tmp/hosts.ldif

Puedes intentar buscar algunos datos:

ldapsearch uid=foouser

Configuració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 foouser

Deberí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.so

Ahora 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.

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.