Configuración LDAP

El servicio LDAP utiliza el puerto 389, algo que puede que tengamos que tener en cuenta si tenemos un cortafuegos.

La configuración ldap se guarda en en la carperta /etc/openldap/, y el fichero de configuración es /etc/openldap.slapd.conf, que ateniéndose a los parámetros establecidos, debe quedar de la siguiente  forma:

 

 

include         /etc/openldap/schema/corba.schema
include         /etc/openldap/schema/core.schema
include         /etc/openldap/schema/cosine.schema
include         /etc/openldap/schema/duaconf.schema
include         /etc/openldap/schema/dyngroup.schema
include         /etc/openldap/schema/inetorgperson.schema
include         /etc/openldap/schema/java.schema
include         /etc/openldap/schema/misc.schema
include         /etc/openldap/schema/nis.schema
include         /etc/openldap/schema/openldap.schema
include         /etc/openldap/schema/ppolicy.schema
include         /etc/openldap/schema/collective.schema
include         /etc/openldap/schema/samba.schema
 
allow bind_v2
 
pidfile         /var/run/openldap/slapd.pid
argsfile        /var/run/openldap/slapd.args
 
TLSCipherSuite HIGH:MEDIUM:+TLSv1:!SSLv2:+SSLv3:DES-CBC-SHA
 
TLSCACertificateFile /etc/pki/CA/cacert.pem
TLSCertificateFile /etc/pki/caronte.bez.ies/caronte.bez.ies .pem
TLSCertificateKeyFile /etc/pki/caronte.bez.ies/caronte.bez.ies.sc.key
TLSVerifyClient never
 
#######################################################################
# ldbm and/or bdb database definitions
#######################################################################
 
database        bdb
suffix          "dc=bez.ies,dc=net"
checkpoint      1024 15
rootdn          "cn=root,dc=bez.ies,dc=net"
# Cleartext passwords, especially for the rootdn, should
# be avoided.  See slappasswd(8) and slapd.conf(5) for details.
# Use of strong authentication encouraged.
rootpw          claveldap
# rootpw        {SSHA}ZB4dJQoik5+J/HPLVKTo7pVbr4yZDSMG
 
# The database directory MUST exist prior to running slapd AND
# should only be accessible by the slapd and slap tools.
# Mode 700 recommended.
directory       /var/lib/ldap/bez.ies
 
# Indices to maintain for this database
index objectClass                       eq,pres
index ou,cn,mail,surname,givenname      eq,pres,sub
index uidNumber,gidNumber,loginShell    eq,pres
index uid,memberUid                     eq,pres,sub
index nisMapName,nisMapEntry            eq,pres,sub
 
 
## required to support pdb_getsambapwrid()
index displayName                       pres,sub,eq
index sambaSID                          eq
index sambaPrimaryGroupSID              eq
index sambaDomainName                   eq
index default                           sub
 
# users can authenticate and change their password
access to attrs=userPassword,sambaNTPassword,sambaLMPassword,sambaPwdMustChange,sambaPwdLastSet
      by self write
      by anonymous auth
      by * none
 
# those 2 parameters must be world readable for password aging to work correctly
# (or use a priviledge account in /etc/ldap.conf to bind to the directory)
access to attrs=shadowLastChange,shadowMax
      by self write
      by * read
 
# all others attributes are readable to everybody
access to *
      by * read
# enable monitoring
database monitor  
 
access to *
        by dn.exact="cn=root,cn=config" read
        by * none
 

Para crear una contraseña ldap ejecutamos

 slappasswd
New password:  (tecleado “claveldap”)
Re-enter new password:  (tecleado “claveldap”)
{SSHA}ZB4dJQoik5+J/HPLVKTo7pVbr4yZDSMG

y ahora podemos poner el resultado en slapd.conf.

rootpw {SSHA}ZB4dJQoik5+J/HPLVKTo7pVbr4yZDSMG”

Si no vamos a utilizar TLS, podemos eliminar los certificados de la configuración.

Crear directorio para la base de datos

mkdir /var/lib/ldap/bez.ies
chown ldap.ldap /var/lib/ldap/bez.ies

 

Como veremos, ldap es bastante exigente con los propietarios y permisos de los ficheros involucrados.


 

Generar el directorio de configuración

Este paso es sólo para las nuevas versiones de ldap. Estas versiones usan un directorio de configuración que vamos a crear a partir del fichero slapd.conf.

Primero creamos el directorio

mkdir /etc/openldap/slapd.d

Ahora creamos la configuración

slaptest -F /etc/openldap/slapd.d -f /etc/openldap/slapd.conf
chown -R ldap.ldap  /etc/ openldap/slapd.d


 

Ese fichero contiene cierta información par el arranque de LDAP. Su contenido será:

# OpenLDAP server configuration
# see 'man slapd' for additional information
# Where the server will run (-h option)
# - ldapi:/// is required for on-the-fly configuration using client tools
#   (use SASL with EXTERNAL mechanism for authentication)
# - default: ldapi:/// ldap:///
# - example: ldapi:/// ldap://127.0.0.1/ ldap://10.0.0.1:1389/ ldaps:///
 
SLAPD_URLS="ldapi:///  ldap:///  ldaps:///"
 
# Any custom options
#SLAPD_OPTIONS=""
 
# Keytab location for GSSAPI Kerberos authentication
KRB5_KTNAME="FILE:/etc/openldap/ldap.keytab"


 

Para lanzar el servidor LDAP ejecutamos

service slapd start

Igualmente podemos usar stop o restart para para o reiniciar, respectivamente.

Para que se inicie automáticamente en el arranque ejecutamos:

chkconfig slapd on

 

Depurar la configuración

Para depurar posible errores podemos ejecutar:

slapd -d1 -u ldap

donde 1 es el nivel de depuración que queremos. Cuidado si ejecutamos slapd como usuario root cambiarán los permisos en el directorio /var/lib/ldap/bezmi.ies y ldap no funcionará normalmente hasta que no cambiemos el propietario y el grupo de estos ficheros:

chown -R ldap.ldap  /var/lib/lda/bezmi.es

 

El fichero /etc/ldap.conf

Enseñamos al sistema como conectarse al servidor LDAP. El contenido significativo de ese fichero es:

base dc=bezmi.ies,dc=es
 binddn cn=proxyuser,dc=bezmi.ies,dc=es
bindpw claveproxyuser
 rootbinddn cn=root,dc=bezmi.ies,dc=es
 
timelimit 120
bind_timelimit 120
idle_timelimit 3600
 
nss_base_passwd dc=bezmi.ies,dc=es?sub
nss_base_shadow ou=People,dc=bezmi.ies,dc=es?sub
nss_base_group          ou=Group,dc=bezmi.ies,dc=es?one
nss_base_hosts          ou=Hosts,dc=bezmi.ies,dc=es?one
nss_base_services       ou=Services,dc=bezmi.ies,dc=es?one
nss_base_networks       ou=Networks,dc=bezmi.ies,dc=es?one
nss_base_protocols      ou=Protocols,dc=bdat,dc=net?one
nss_base_rpc            ou=Rpc,dc=bezmi.ies,dc=es?one
nss_base_ethers ou=Ethers,dc=bezmi.ies,dc=es?one
nss_base_netmasks       ou=Networks,dc=bezmi.ies,dc=es?ne
nss_base_bootparams     ou=Ethers,dc=bezmi.ies,dc=es?one
nss_base_aliases        ou=Aliases,dc=bezmi.ies,dc=es?one
nss_base_netgroup       ou=Netgroup,dc=bezmi.ies,dc=es?one
 
nss_initgroups_ignoreusers root,ldap,named,avahi,haldaemon,dbus,radvd,tomcat,radiusd,news,mailman,nscd,gdm,polkituser
uri ldap://127.0.0.1/
ssl no
tls_cacertdir /etc/openldap/cacerts
pam_password md5
 

Este fichero le indica al sistema como buscar ciertos datos en un servidor ldap, por ejemplo usuarios del sistema. El sistema buscará en ldap si así lo indicamos en el fichero /etc/nsswitch.conf. Este fichero especifica todos los mecanismos de búsqueda de información.

Tendremos que añadir, si no lo está en ldap a cn=proxyuser,dc=bezmi.ies,dc=es. Más adelante veremos como hacerlo.


 

El fichero /etc/ldap.secret

Este fichero debe tener permisos 600 y ser propiedad de root. Este fichero contiene la contraseña del administrador de la base de datos para cuando el sistema necesite hacer alguna modificación. En nuestro caso el contenido será:

claveldap

 

El fichero /etc/openldap/ldap.conf

BASE dc=bezmi.ies,dc=es
URI ldap://caronte.bezmi.ies
 
#SIZELIMIT      12
#TIMELIMIT      15
#DEREF          never
 
TLS_CACERTDIR /etc/openldap/cacerts
#ssl on
TLS_CACERT /etc/pki/CA/cacert.pem
TLS_REQCERT never
SASL_NOCANON    on

 

Configurando el usuario proxy

La siguiente etapa, consiste en la creación de una entrada especial en el servidor LDAP, que servirá como usuario proxy. Este usuario se utilizará para leer las entradas userPassword de las otras entradas, de tal manera que suministre esa información a los clientes que necesiten autenticarse. Con esto, permitiremos autenticar a aquellos servicios que poseen una interfaz con el servidor LDAP, pero que mantienen su propio esquema de autenticación y por lo tanto no usan la operación auth provista por el servidor LDAP.

 

El primer paso es crear un archivo LDIF, por ejemplo en /tmp/proxy.ldif cuyo contenido sea el siguiente:

 

dn: cn=proxyuser,dc=bezmi.ies,dc=es
cn: proxyuser
sn: proxyuser
objectclass: top
objectclass: person
userPassword: {SSHA}QhAD9SsZnK+QkNKzp/p/JXpa1I9yF1Qu

 

La contraseña se debe crear con el comando slappasswd como se vió anteriormente. En el ejemplo la clave es “claveproxyuser”:

Una vez escrito correctamente el archivo LDIF, lo agregamos al servidor ejecutando el comando ldapadd de la siguiente forma:

ldapadd -x -D "cn=root,dc=bezmi.ies,dc=es" -W -f /tmp/proxy.ldif

 

Este comando pedirá la contraseña que se estableció como rootpw en el archivo de configuración, y si todo está correcto, agregará la entrada donde corresponde en la jerarquía de árbol del servidor LDAP.


 

nss-pam-ldapd

Nss-pam-ldapd es un demonio que busca nombres y autenticacion en un servidor ldap para suministrarlo al sistema. Este servicio se configura en el fichero /etc/nslcd

El fichero /etc/nslcd

uid nslcd
gid ldap
base   group  ou=Groups,dc=bezmi.ies,dc=es
base   passwd ou=People,dc=bezmi.ies,dc=es
base   shadow ou=People,dc=bezmi.ies,dc=es
uri ldap://caronte.bezmi.ies
base dc=bezmi.ies,dc=es
binddn cn=proxyuser,dc=bezmi.ies,dc=es
bindpw claveproxyuser
ssl off
tls_cacertdir /etc/openldap/cacerts
timelimit 120
bind_timelimit 120
idle_timelimit 3600

 

Inciar nslcd

service nslcd start

Igualmente podemos usar stop o restart para para o reiniciar, respectivamente.

Para que se inicie automáticamente en el arranque ejecutamos:

chkconfig nslcd on

 

El fichero /etc/nsswitch.conf

En este fichero deberemos tener, al menos:

passwd:     files ldap
shadow:     files ldap
group:      files ldap

Esto quiere decir que el sistema buscará usuarios y grupo, primero en los ficheros locales y en ldap a continuación.  Si añadimos winbind también buscará usuarios preguntando a Samba.