Inicio > CentOS, How-to, Linux, OpenLDAP, Servidor de Autenticación > Cómo implementar OpenLDAP

Cómo implementar OpenLDAP

Pero para comenzar, empecemos por el principio.
– Que es LDAP?
LDAP (Lightweight Directory Access Protocol) es un protocolo a nivel de aplicación que 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.

– Y entonces, que es OpenLDAP?
Se trata de una implementación libre del protocolo que soporta múltiples esquemas por lo que puede utilizarse para conectarse a cualquier otro LDAP.

Tiene su propia licencia, la OpenLDAP Public License. Al ser un protocolo independiente de la plataforma, varias distribuciones Linux y BSD lo incluyen, al igual que AIX, HP-UX, Mac OS X, Solaris, Windows (2000/XP) y z/OS.

OpenLDAP tiene tres componentes principales:

* slapd – demonio LDAP autónomo.
* syncrepl – opción para replicar ldap
* Rutinas de biblioteca de soporte del protocolo LDAP.
* Utilidades, herramientas y clientes.

– Cómo lo instalo y como lo configuro?
Este howto se va a enfocar a como instalar OpenLDAP y cómo configurarlo en CentOS ya que es la distribución que utilizo en mis servidores.

La instalación es trivial

yum install openldap openldap-clients openldap-servers

Esto como superusuario.

Para usuarios novatos siempre resulta útil enterarse de que archivos instaló yum, para dar un vistazo a los paquetes que instaló yum se puede hacer con un

rpm -ql openldap
rpm -ql openldap-clients
rpm -ql openldap-servers

El siguiente paso es crear un directorio en donde OpenLDAP va a guardar su base de datos

mkdir /var/lib/ldap/auth
chown ldap.ldap /var/lib/ldap/auth
chmod 700 /var/lib/ldap/auth


Enseguida se copia el siguiente archivo y se modifica el nombre

cp /usr/share/doc/openldap-servers-2.4.8/DB_CONFIG.example /var/lib/ldap/auth/DB_CONFIG
Se ejecuta el siguiente comando (de nuevo, si)
chmod -R 700 /var/lib/ldap/auth && chown ldap.ldap /var/lib/ldap/auth

Ahora tenemos que crear la contraseña que el usuario administrativo va a utilizar para modificar y conectarse a OpenLDAP, esto se hace con el siguiente comando en la línea de comando:

slappasswd
New password:
Re-enter new password:
{SSHA}xXxXxXxXxXxXxXxXxXxXxXxXxXxXx


Guarda el output de este comando pues se va a tener que agregar en el archivo de configuración de OpenLDAP.

El siguiente paso es editar el archivo de configuración de OpenLDAP el cuál está en
/etc/openlda/slapd.conf

Es preferible que la comunicación entre los hosts y el servidor de LDAP sea a través de un canal seguro, en este caso vamos a utilizar TLS.

En el archivo de configuración (/etc/openldap/slapd.conf) se debe de configurar de la siguiente manera:

TLSCACertificateFile /var/lib/ldap/cert/ca-bundle.crt
TLSCertificateFile /var/lib/ldap/cert/yoda.pem
TLSCertificateKeyFile /var/lib/ldap/cert/yoda.pem

Para que esto funcione, se tiene que hacer lo siguiente

cd /etc/pki/tls/certs
make yoda.pem
{Contesta las línes con la información pertinente}

mkdir -pv /var/lib/ldap/cert
mv /etc/pki/tls/certs/yoda.pem /var/lib/ldap/cert/
mv /etc/pki/tls/certs/ca-bundle.crt /var/lib/ldap/cert
chown -R ldap.ldap /var/lib/ldap/cert
chmod -R 700 /var/lib/ldap/cert


El siguiente paso es configurar el dominio y el usuario que tendra acceso administrativo a esta instancia de OpenLDAP, esto se hace en la siguiente sección:

database bdb
suffix "dc=mi_nombre_de_dominio,dc=com"
rootdn "cn=admin,dc=mi_nombre_de_dominios,dc=com"
# Cleartext passwords, especially for the rootdn, should
# be avoided. See slappasswd(8) and slapd.conf(5) for details.
# Use of strong authentication encouraged.
# rootpw secret
rootpw {SSHA}xXxXxXxXxXxXxXxXxXxXxXxXxXxXx
# 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/auth


Esto debe de ser suficiente para tener una configuración de OpenLDAP completa y segura.

Ahora, para iniciar el servicio
/etc/init.d/ldap start
Configuramos el servicio para que cada que el sistema sea reiniciado ldap inicie
chkconfig --level 345 ldap on

Puesto que configuramos a OpenLDAP para utilizar conexiones seguras, nos debemos de asegurar que el puerto adecuado no está siendo bloqueado por nuestro firewall.

Primero, solo para re-confirmar que OpenLDAP está escuchando en el puerto requerido se puede confirmar con un

netstat -luntp | grep 636
Debes de ver un output como este:

[root@yoda ~]# netstat -luntp| grep 636
tcp 0 0 0.0.0.0:636 0.0.0.0:* LISTEN 2450/slapd
tcp 0 0 :::636 :::* LISTEN 2450/slapd
[root@yoda ~]#

Por preferencia personal, recomiendo deshabilitar SELinux, puedes verificar si SELinux está activado con el siguiente comando:

[root@yoda ~]# sestatus
SELinux status: disabled
[root@yoda ~]#

Si tu sistema tiene SELinux activado recomiendo editar el archivo

vim /etc/selinux/config
y modificar la siguiente linea que está como:
SELINUX=enforcing
por
SELINUX=disabled

Una pregunta que puede surgir es, como diantres supe en que puerto está escuchando ldap?

Hay muchas maneras de saber esto:

netstat -a| grep -i ldap
cat /etc/services | grep -i ldap

El siguiente paso es poblar nuestro servidor de OpenLDAP, para hacer esto haremos uso de los migration tools scripts. Estos scripts lo que hacen es crear una serie de OU’s para nuestro servidor de OpenLDAP.

Localiza el archivo migrate_common.ph, edítalo con vim y busca la sección:
# Default DNS domain
$DEFAULT_MAIL_DOMAIN = "padl.com";
# Default base
$DEFAULT_BASE = "dc=padl,dc=com";

Y modifícalo para que despliegue los valores de tu dominio.
Una ves modificado este archivo, ejecuta el siguiente perl script de la siguiente manera:

./migrate_base.pl > /tmp/base.ldif

En las líneas comentadas de este perl script vemos que lo que hace es generar “# LDIF entries for base DN”
.
Si te das un minuto para darle un vistazo a /tmp/base.ldif vas a ver que es lo que generó el script migrate_base.pl

La pregunta es “Porque LDIF?” Según la man page de ldif, esto es:

DESCRIPTION
The LDAP Data Interchange Format (LDIF) is used to represent LDAP entries and change
records in text form. LDAP tools, such as ldapadd(1) and ldapsearch(1), read and write
LDIF entry records. ldapmodify(1) reads LDIF change records.

This manual page provides a basic description of LDIF. A formal specification of LDIF is
published in RFC 2849.

Que traducido es (saludos Billy!):

DESCRIPCION
El LDAP Formato de Intercambio de Información (LDIF) es utilizado para representar entradas de LDAP
y modificar campos en modo texto. Las herramientas LDAP, cómo ldapadd(1) y ldapsearch(1), leen y escriben
archivos LDIF. ldapmodify(1) lee cambios a realizarse con LDIF.

Este manual provee una descripción básica de LDIF. La norma formal de LDIF esta publicada en el RFC 2849.

Para importar este ldif (/tmp/base.ldif) lo puedes hacer desde la consola con un:

ldapadd -a -D 'cn=admin, dc=tu_dominio, dc=com' -h localhost -f /tmp/base.ldif

Una vez que tienes poblado tu OpenLDAP server con los OU’s básicos puedes comenzar a agregar entradas. Para fines de probar tu servidor vamos a crear un usuario de prueba:

En tu consola ejecuta el siguiente comando:
vim usuarioTest

dn: cn=usuarioTest, ou=Group, dc=tu_dominio,dc=com
gidNumber: 900
description: Usuario Test
objectClass: top
objectClass: posixGroup
cn: usuarioTest

dn: uid=usuarioTest, dc=tu_dominio,dc=com
sn: usuarioTest
userPassword:: e01ENX1NamFMMitHOElDVlF5ZGVyMlR1RHJRPT0=
loginShell: /bin/bash
uidNumber: 900
gidNumber: 900
objectClass: top
objectClass: posixAccount
objectClass: shadowAccount
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
uid: usuarioTest
cn: Usuatio Test
homeDirectory: /home/usuarioTest

Para agregar a este usuario a tu servidor ldap puedes usar ya sea ldapbrowser o lo puedes hacer desde la consola. Para hacerlo desde la consola puedes hacer un

ldapadd -a -D 'cn=admin, dc=tu_dominio, dc=com' -h localhost -f /tmp/usuarioTest.ldif

Hasta aquí solo hemos hablado de como instalar y configurar OpenLDAP, ahora vamos a ver cuál es la utilidad de usar OpenLDAP como servidor de autenticación.

Por la parte de OpenLDAP no hay nada que hacer si ’solamente’ queremos utilizarlo como un servidor de autenticación, lo que tenemos que hacer ahora son unas pequeñas modificaciones a nuestros hosts (o clientes) para decirles que cuando un usuario trate de logearse al sistema, haga un query al servidor OpenLDAP.

Hay 2 maneras “sencilla” de lograr esto:

1. Utilizando system-config-authentication
2. Utilizando authconfig-tui
3. Modificando los siguientes archivos
– /etc/ldap.conf
– /etc/nsswitch.conf
– /etc/pam.d/system-auth

Para los pasos 1 y 2 puedes ver las siguientes imágenes:

o

O checa el video (y si, lo se, está chafa, pero sirve creo yo)

auth

Para el paso 3 esto es lo que se tiene que modificar

/etc/ldap.conf

# The distinguished name of the search base.
base dc=example,dc=com

por

# The distinguished name of the search base.
base dc=mi_dominio,dc=com

y

uri ldap://127.0.0.1/
ssl no
tls_cacertdir /etc/openldap/cacerts
pam_password md5

por

uri ldaps://172.16.11.100/
ssl no
tls_cacertdir /etc/openldap/cacerts
pam_password md5

/etc/nsswitch.conf

# Example:
#passwd: db files nisplus nis
#shadow: db files nisplus nis
#group: db files nisplus nis

passwd: files
shadow: files
group: files

por

# Example:
#passwd: db files nisplus nis
#shadow: db files nisplus nis
#group: db files nisplus nis

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

/etc/pam.d/system-auth

Solo voy a pegar mi archivo system-auth modificado, van a poder ver lo que modifiqué.

#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth required pam_env.so
auth sufficient pam_unix.so nullok try_first_pass
auth requisite pam_succeed_if.so uid >= 500 quiet
auth sufficient pam_ldap.so use_first_pass
auth required pam_deny.so

account required pam_unix.so broken_shadow
account sufficient pam_succeed_if.so uid < 500 quiet
account [default=bad success=ok user_unknown=ignore] pam_ldap.so
account required pam_permit.so

password requisite pam_cracklib.so try_first_pass retry=3
password sufficient pam_unix.so md5 shadow nullok try_first_pass use_authtok
password sufficient pam_ldap.so use_authtok
password required pam_deny.so

session optional pam_keyinit.so revoke
session required pam_limits.so
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required pam_unix.so
session optional pam_ldap.so


Y con esto, guardan los archivos y listo! Su host está configurado para utilizar OpenLDAP como servidor de autenticación. Recuerdan esa cuenta de usuarioTest que creamos a la mitad del documento? Bueno, ese usuario NO está creado localmente en nuestro host, pero si hacemos un
id usuarioTest
finger usuarioTest

[root@centos ~]# id usuarioTest
uid=900(usuarioTest) gid=900(usuarioTest) groups=900(usuarioTest)
[root@centos ~]# finger usuarioTest
Login: usuarioTest Name: usuarioTest
Directory: /home/usuarioTest Shell: /bin/bash
Never logged in.
No mail.
No Plan.
[root@centos ~]#

Vemos que la información del usuario está ahí! Esto es porque el host está haciendo un query al servidor OpenLDAP. Ahora, que pasa cuando haces un ssh al host con las credenciales del usuarioTest, deberías poder logearte, a mi me aparece esto:

[dan@centos ~]$ ssh usuarioTest@host_usando_openldap_como_auth_server
usuarioTest@centos's password:
Last login: Thu Jul 31 11:19:17 2008 from otro.host.de_mi_red.com
Could not chdir to home directory /home/usuarioTest: No such file or directory
-bash-3.1$


Esto es porque el usuario no tiene un directorio en /home en este host, la manera de solucionar esto es

1. Creándo el /home/usuarioTest a mano
o
2. Modificando /etc/pam.d/sshd y agregándo al final una línea como esta:

session required pam_mkhomedir.so skel=/etc/skel/ umask=0022

Trata de logearte de nuevo al sistema, y verás algo cómo esto:

[dan@centos ~]$ ssh usuarioTest@host_usando_openldap_como_auth_server
usuarioTest@centos's password:
Creating directory '/home/usuarioTest'.
Last login: Fri Aug 8 08:38:26 2008 from otro.host.de_mi_red.com
[usuarioTest@centos ~]$

Listo! Ahora configura tus demás hosts para que utilicen OpenLDAP como su servidor de autenticación.

Los temas a ver a continuación van a ser

– Limitando al usuario a logearse a determinados hosts
– Configurando OpenLDAP con replicación
– Configurando OpenLDAP para funcionar también como libreta de direcciones

Fuente: http://kwame.informatux.net/?p=63

  1. Aún no hay comentarios.
  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: