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.