Renuncia de responsabilidad:
Este documento está aún en desarrollo y no debería ser condiderado todavía
cómo oficial.
|
Guía Gentoo para la autenticación con OpenLDAP
1.
Empezando con OpenLDAP
¿Qué es LDAP?
LDAP significa Lightweight Directory Access Protocol (Protocolo
Ligero de Acceso a Directorios). Basado en X.500, abarca muchas de sus
funciones principales, pero carece de las funciones más esotéricas de
X.500. Pero, ¿qué es este X.500 y por qué hay un LDAP?
X.500 es un modelo de Servicio de Directorio basado en el concepto OSI
(interconexión de sistemas abiertos). Contiene definiciones de
espacios de nombres y los protocolos para preguntar y actualizar el
directorio. Sin embargo, X.500 ha sido creado para ser excesivamente
estricto en algunas situaciones. Entrando en LDAP, al igual que X.500,
proporciona un modelo de datos/espacio de nombres para el directorio y
el protocolo. No obstante, LDAP está diseñado para ejecutarse
directamente sobre la pila TCP/IP. Vea a LDAP como una versión ligera
de X.500.
No lo entiendo. ¿Qué es un directorio?
Un directorio es una base de datos especializada diseñada para
frecuentes consultas pero para infrecuentes actualizaciones. A
diferencia de las bases de datos generalistas, no contiene soporte
para transacciones o funcionalidad de vuelta atrás
("roll-back"). Los directorios son fácilmente replicados
para incrementar disponibilidad y fiabilidad. Cuando los directorios
son replicados, se permiten inconsistencias temporales con tal de que
acaben siendo finalmente sincronizadas.
¿Cómo está estructurada la información?
Toda la información dentro de un directorio está estructurada
jerárquicamente. Aún más, si usted intenta introducir datos en el
directorio, el directorio debe conocer cómo almacenar estos datos en
un árbol. Eche un vistazo a la compañía de ficción y a su organigrama:
Listado de Código 1.1: Estructura organizativa de GenFic, una empresa Gentoo Ficticia |
dc: com
|
dc: genfic
/ \
ou: personas servidores
/ \ ..
uid: .. john
|
Puesto que usted no puede alimentar la base de datos con este tipo de
"ascii-art", cada nodo de tal árbol debe ser definido. Para
nombrar tales nodos, LDAP usa un sistema de definición de nombres. La
mayor parte de distribuciones de LDAP (incluyendo OpenLDAP) ya
contienen un buen número de esquemas predefinidos (y comúnmente
aprobados), como el "inetorgperson", frecuentemente
utilizado para definir usuarios.
Animamos a las personas interesadas a leer la Guía de Administración
OpenLDAP.
Pero ... ¿para qué se utiliza?
LDAP puede ser utilizado con varios propósitos. En este documento se
trata la administración centralizada de usuarios, manteniendo todas
las cuentas de usuario en una única ubicación LDAP (lo que no
significa que esté albergada en un único servidor, puesto que LDAP
soporta alta disponibilidad y redundancia), y sin embargo LDAP puede
utilizarse igualmente para otros fines:
- Infraestructura de clave pública
- Calendario compartido
- Libreta de direcciones compartida
- Almacenamiento para DHCP, DNS, ...
-
Directivas de configuración para las clases del sistema (guardando
registro de las configuraciones de varios servidores)
- ...
2.
Configurando OpenLDAP
Configuración inicial
Nota:
En este documento utilizamos la dirección genfic.com como
ejemplo. Usted deberá, desde luego, cambiarlo. Sin embargo, asegúrese
que el nodo superior es un dominio oficial de primer nivel (net, com,
cc, be, ...).
|
Primero instale OpenLDAP:
Listado de Código 2.1: Instalación de OpenLDAP |
# emerge openldap
|
Ahora cree una contraseña que usará después:
Listado de Código 2.2: Generar una contraseña |
# slappasswd
New password: mi-contraseña
Re-enter new password: mi-contraseñ
{SSHA}EzP6I82DZRnW+ou6lyiXHGxSpSOw2XO4
|
Now edit the LDAP Server config at /etc/openldap/slapd.conf:
Ahora edite la configuración del Servidor LDAP en
/etc/openldap/slapd.conf:
Listado de Código 2.3: /etc/openldap/slapd.conf |
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/nis.schema
modulepath /usr/lib/openldap/openldap
# moduleload back_shell.so
# moduleload back_relay.so
# moduleload back_perl.so
# moduleload back_passwd.so
# moduleload back_null.so
# moduleload back_monitor.so
# moduleload back_meta.so
moduleload back_hdb.so
# moduleload back_dnssrv.so
access to dn.base="" by * read
access to dn.base="cn=Subschema" by * read
access to *
by self write
by users read
by anonymous auth
database hdb
suffix "dc=genfic,dc=com"
checkpoint 32 30 # <kbyte> <min>
rootdn "cn=Manager,dc=genfic,dc=com"
rootpw {SSHA}EzP6I82DZRnW+ou6lyiXHGxSpSOw2XO4
directory /var/lib/openldap-ldbm
index objectClass eq
|
Luego edite el fichero de configuración del cliente LDAP:
Listado de Código 2.4: /etc/openldap/ldap.conf |
# nano -w /etc/openldap/ldap.conf
BASE dc=genfic, dc=com
URI ldap://auth.genfic.com:389/
TLS_REQCERT allow
|
Ahora edite /etc/conf.d/slapd y añada lo siguiente,
comentando la línea existente:
Listado de Código 2.5: /etc/conf.d/slapd |
OPTS="-h 'ldap:// ldapi://%2fvar%2frun%2fopenldap%2fslapd.sock'"
|
Inicie slapd:
Listado de Código 2.6: Iniciar SLAPd |
# /etc/init.d/slapd start
|
Puede probarlo con la siguiente instrucción:
Listado de Código 2.7: Prueba del servicio SLAPd |
# ldapsearch -x -D "cn=Manager,dc=genfic,dc=com" -W
|
Si recibe un error, pruebe a añadir -d 255 para incrementar el
nivel de detalle de los avisos y poder resolver el problema que pueda
tener.
3.
Configuración del cliente
Migrar los datos existentes a ldap
Go to http://www.padl.com/OSS/MigrationTools.html
y busque los guiones allí. La configuración está establecida en la
página. Nosotros ya no los proporcionamos porque los guiones son un
potencial agujero de seguridad si los deja en el sistema después de
haberlos trasladado. Cuando haya acabado de migrar los datos, continue
en la sección siguiente.
Configuración de PAM
En primer lugar, configuraremos PAM para permitir la autorización con
LDAP. Instalemos sys-auth/pam_ldap ya que PAM soporta la
autentificación LDAP, y sys-auth/nss_ldap porque nuestro
sistema puede negociar con servidores LDAP para obtener información
adicional (usado por nsswitch.conf).
Listado de Código 3.1: Instalar pam_ldap y nss_ldap |
# emerge pam_ldap nss_ldap
|
Ahora añada las siguientes líneas en los lugares adecuados de
/etc/pam.d/system-auth:
Listado de Código 3.2: /etc/pam.d/system-auth |
auth sufficient pam_ldap.so use_first_pass
account sufficient pam_ldap.so
password sufficient pam_ldap.so use_authtok use_first_pass
session optional pam_ldap.so
#%PAM-1.0
auth required pam_env.so
auth sufficient pam_unix.so try_first_pass likeauth nullok
auth sufficient pam_ldap.so use_first_pass
auth required pam_deny.so
account sufficient pam_ldap.so
account required pam_unix.so
password required pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 try_first_pass retry=3
password sufficient pam_unix.so try_first_pass use_authtok nullok md5 shadow
password sufficient pam_ldap.so use_authtok use_first_pass
password required pam_deny.so
session required pam_limits.so
session required pam_unix.so
session optional pam_ldap.so
|
Ahora cambie /etc/ldap.conf para que tenga:
Listado de Código 3.3: /etc/ldap.conf |
suffix "dc=genfic,dc=com"
uri ldap://auth.genfic.com/
pam_password exop
ldap_version 3
pam_filter objectclass=posixAccount
pam_login_attribute uid
pam_member_attribute memberuid
nss_base_passwd ou=People,dc=genfic,dc=com
nss_base_shadow ou=People,dc=genfic,dc=com
nss_base_group ou=Group,dc=genfic,dc=com
nss_base_hosts ou=Hosts,dc=genfic,dc=com
scope one
|
Luego, copie el fichero (OpenLDAP) ldap.conf del servidor en el
cliente para que éste tenga en cuenta el entorno LDAP:
Listado de Código 3.4: Copiar el OpenLDAP ldap.conf |
# scp ldap-server:/etc/openldap/ldap.conf /etc/openldap
|
Finalmente, configure sus clientes para que verifiquen en LDAP las
cuentas de sistema:
Listado de Código 3.5: /etc/nsswitch.conf |
passwd: files ldap
group: files ldap
shadow: files ldap
|
Para probar los cambios, escriba:
Listado de Código 3.6: Prueba de la autorización con LDAP |
# getent passwd|grep 0:0
root:x:0:0:root:/root:/bin/bash
root:x:0:0:root:/root:/bin/bash
|
Si observa, una de las lineas copiadas en su
/etc/ldap.conf está comentada (the rootbinddn
line): no la necesita salvo que quiera cambiar la contraseña de un
usuario como superusuario. En este caso, necesita escribir la
contraseña de root en /etc/ldap.secret con texto en
claro. Esto es PELIGROSO por lo que debería tener
permisos "600". Lo que yo hago es mantener el fichero vacío
y cuando necesito cambiar cualquier contraseña que está tanto en ldap
como en /etc/passwd escribo la contraseña en él durante
10 segundos mientras hago los cambios y la borro cuando he acabado.
4.
Seguridad del servidor LDAP
Permisos de OpenLDAP
Si echamos un vistazo a /etc/openldap/slapd.conf podrá
ver que se pueden especificar ACLs (listas de control de acceso, o
permisos, si lo prefiere) de qué datos pueden los usuarios leer y/o
escribir:
Listado de Código 4.1: /etc/openldap/slapd.conf |
access to *
by dn="uid=root,ou=people,dc=genfic,dc=com" write
by users read
by anonymous auth
access to attrs=userPassword,gecos,description,loginShell
by self write
|
Esto le da acceso a todo a lo que a un usuario le está permitido
cambiar. Si es su información, entonces tiene acceso de escritura; si
es la de otro usuario, entonces puede leerla; un usuario anónimo puede
enviar un usuario/contraseña para ser conectado. Hay cuatro niveles,
del menor al mayor: autorización búsqueda lectura escritura.
La siguiente ACL es un poco más segura puesto que impide a los
usuarios normales leer la contraseña enmascarada de otros usuarios:
Listado de Código 4.2: /etc/openldap/slapd.conf |
access to attrs="userPassword"
by dn="uid=root,ou=people,dc=genfic,dc=com" write
by dn="uid=John,ou=People,dc=genfic,dc=com" write
by anonymous auth
by self write
by * none
access to *
by dn="uid=root,ou=People,dc=genfic,dc=com" write
by * search
|
Este ejemplo le da acceso a root y John para leer/escribir/buscar en
todo el árbol por debajo de dc=genfic,dc=com. También
permite a los usuarios cambiar su propia userPassword. Y
en la sentencia final cualquier otro tiene la capacidad de búsqueda,
lo que significa que puede introducir un filtro de búsqueda pero no
puede leer los resultados de la búsqueda. Puede tener múltiples ACLs
pero la regla de procesamiento es de abajo arriba, por lo que su nivel
superior debe ser el más restrictivo.
5.
Trabajando con OpenLDAP
Manteniendo el directorio
Puede empezar utilizando el directorio para autentificar usuarios en
apache/proftpd/qmail/samba. Puede administrarlo con Webmin, que
proporciona una interfaz de administración sencilla. Puede también
usar phpldapadmin, luma, diradm, jxplorer o lat.
6.
Agradecimientos
Quisiera agradecer a Matt Heler el préstamo de su equipo para poder
realizar esta guía. Gracias también a toda la gente simpática de #ldap
@ irc.freenode.net.
El contenido de este documento está registrado bajo los términos de
la licencia
Creative Commons - Reconocimiento / Compartir Igual
|