Empleando el servicio INTRODUCCIÓNLDAP (Lightweight Directory Access Protocol) es un protocolo para mantener e intercambiar información almacenada en directorios (i.e bases de datos especiales). Un uso típico de LDAP es mantener en un servidor información de los usuarios de una organización para permitir su autenticación en los computadores (e.g nombres, apellidos, dirección, teléfono, login, clave). OpenBSD incluye (desde OpenBSD 4.8) un servidor para LDAP versión 3, INSTALACIÓN Y CONFIGURACIÓNLa instalación de todos los paquetes es directa: # pkg_add openldap-client # pkg_add phpldapadmin También se requiere el esquema !ldapd Para configurar el servidor, verifique que exista el usuario _ldapd, y edite /etc/ldapd.conf: schema "/etc/ldap/core.schema" schema "/etc/ldap/inetorgperson.schema" schema "/etc/ldap/nis.schema" lan_if = "re1" listen on $lan_if ldaps certificate www.pasosdeJesus.org listen on lo0 listen on "/var/run/ldapi" namespace "dc=www,dc=pasosdeJesus,dc=org" { rootdn "cn=root,dc=www,dc=pasosdeJesus,dc=org" rootpw "tadamOgg" index sn index givenName index cn index mail index objectClass index sn fsync on } Copie los esquemas y el archivo de configuración del servidor: # mkdir /etc/openldap # cp /usr/local/share/examples/openldap/slapd.conf /etc/openldap/ # cp -rf /usr/local/share/examples/openldap/schema /etc/openldap/ Asegurse de copiar también authldap.schema, por ejemplo si instala # cp /usr/local/share/examples/courier-authlib/authldap.schema /etc/openldap/schema Edite include /etc/openldap/schema/core.schema include /etc/openldap/schema/cosine.schema include /etc/openldap/schema/nis.schema include /etc/openldap/schema/inetorgperson.schema include /etc/openldap/schema/openldap.schema include /etc/openldap/schema/authldap.schema allow bind_v2 y modifique las líneas database ldbm suffix "dc=correo,dc=pasosdeJesus,dc=org" rootdn "cn=Manager,dc=correo,dc=pasosdeJesus,dc=org" rootpw secret Note que:
* se permite LDAPv2 porque es el empleado por # slappasswd -v -u -h {CRYPT} -s secret que en el caso de la clave ' La configuración por defecto emplea # mkdir /var/openldap-data # chown _openldap:_openldap /var/openldap-data # chmod 700 /var/openldap-data Cada vez que modifique el archivo de configuración del servidor, puede verificarlo con: # slaptest Para iniciar el servidor LDAP en modo de depuración para ver posibles errores: # /usr/local/libexec/slapd -d 1 Tras verificar el funcionamiento, para que en cada arranque se inicie el servidor puede agregar a #LDAP if ![ -x /usr/local/libexec/slapd ]; then echo -n " slapd"; /usr/local/libexec/slapd fi Cuando lo requiera podrá detener el servidor con: # pkill slapd Puede verificar que el servidor está corriendo con: ldapsearch -x -b 'dc=correo,dc=pasosdeJesus,dc=org' '(objectclass=*)' ! login_ldap La configuración de este paquete es sencilla pues sólo debe ejecutar
ldap:\ :auth=-ldap:\ :x-ldap-server=localhost:\ :x-ldap-port=389:\ :x-ldap-noreferrals:\ :x-ldap-uscope=subtree:\ :x-ldap-basedn=ou=gente,dc=correo,dc=pasosdeJesus,dc=org:\ :x-ldap-binddn=cn=Manager,dc=correo,dc=pasosdeJesus,dc=org:\ :x-ldap-bindpw=secret:\ :x-ldap-filter=(&(objectclass=posixAccount)(uid=%u)):\ Si ADICIÓN DE DATOS Y USUARIOSUna vez esté corriendo dn: dc=correo,dc=pasosdeJesus,dc=org objectClass: dcObject objectClass: organization o: Pasos de Jesús dc: correo dn: cn=Manager,dc=correo,dc=pasosdeJesus,dc=org objectClass: organizationalRole cn: Manager dn:ou=gente, dc=correo,dc=pasosdeJesus,dc=org objectClass: top objectClass: organizationalUnit ou: gente dn:ou=grupos,dc=correo,dc=pasosdeJesus,dc=org objectClass: top objectClass: organizationalUnit ou: grupos dn:ou=sendmail,dc=correo,dc=pasosdeJesus,dc=org ou: sendmail objectClass: top objectClass: organizationalUnit userPassword: sendmail Nota: Al agregar información verifique no dejar espacios en blanco al final de cada línea. Se pueden agregar ldapadd -x -D "cn=Manager,dc=correo,dc=pasosdeJesus,dc=org" -W \ -h correo.pasosdeJesus.org -f org.ldif Note que el archivo ldif recién presentados y los que siguen emplean "campos" de los esquemas Además de poder revisar los mensajes que ldapsearch -x -b 'dc=correo,dc=pasosdeJesus,dc=org' '(objectclass=*)' Con el actual esquema de autenticación de OpenBSD cada usuario que pueda ingresar al sistema debe tener una entrada en el archivo # useradd -m -d /home/pablo -s /bin/sh -L ldap pablo que agregará un usuario Tras tener el dn:uid=pablo,ou=gente,dc=correo,dc=pasosdeJesus,dc=org uid: pablo cn: Pablo sn: Ramirez userPassword: !MiClave loginShell: /bin/ksh uidNumber: 1003 gidNumber: 10 homeDirectory: /home/pablo/ shadowMin: -1 shadowMax: 999999 shadowWarning: 7 shadowInactive: -1 shadowExpire: -1 shadowFlag: 0 objectClass: top objectClass: person objectClass: posixAccount objectClass: shadowAccount objectClass: !CourierMailAccount mail: pablo\@correo.pasosdeJesus.org mailbox: maildir/ quota: 0 Para que posteriormente puede autenticar con Courier-POP tenga en cuenta que la línea mail: pablo@correo.pasosdeJesus.org tenga el nombre completo del servidor de correo que ha empleado al agregar datos al directorio (en lugar de sólo pablo@pasosdeJesus.org). Al igual que la clave general del servidor LDAP, en lugar de la clave plana del usuario puede poner la retornada por slappasswd. Si emplea tildes o eñes, tenga en cuenta que el archivo ldif debe tener codificación Unicode (se ha probado UTF-8 con éxito). Esto lo puede lograr bien empleando un editor que soporte UTF-8 o recodificando el archivo. Por ejemplo puede recodificar un texto ( recode txt..UTF-8 p.ldif Tras agregar el usuario al directorio (con ldapsearch -P 2 -H !ldap://localhost:389 -w secret \ -D "cn=Manager,dc=correo,dc=pasosdeJesus,dc=org" -x \ -b 'dc=correo,dc=pasosdeJesus,dc=org' y después un usuario particular (el recién ingresado): ldapsearch -P 2 -H !ldap://localhost:389 -w secret \ -D "cn=Manager,dc=correo,dc=pasosdeJesus,dc=org" \ -x -b "ou=gente,dc=correo,dc=pasosdejesus,dc=org" \ "(&(objectClass=posixGroup)(memberUid=pablo))" Si las busquedas le funcionaron también debería funcionar: /usr/libexec/auth/login_-ldap -d -s login pablo ldap; echo $? así como: $ login login: pablo ... ELIMINACIÓN DE INFORMACIÓNPara eliminar un usuario puede emplear ldapdelete -v -P 2 -H !ldap://localhost:389 -w secret \ -D "cn=Manager,dc=correo,dc=pasosdeJesus,dc=org" \ -x 'uid=pablo,ou=gente,dc=correo,dc=pasosdeJesus,dc=org' Si necesita borrar el directorio completo utilice: # pkill slapd # rm /var/openldap-data/* EFICIENCIAPara lograr búsquedas veloces deben crearse indices sobre los campos que
se realizan las búsquedas y configurarse caches. Cada índice se configura en el archivo index objectClass eq index mail eq index uid eq cachesize 1000000 dbcachesize 10000000 Configuran caches e índices sobre los campos Después de hacer esta configuración deben regenerarse índices con: # pkill slapd # slapindex y después reiniciar SEGURIDADEs recomendable emplear SSL para encriptar las conexiones que consultan a En todos los casos tendrá que crear un certificado para su servidor y una solicitud para que sea firmado por su autoridad certificadora, ver http://structio.sourceforge.net/guias/servidor_OpenBSD/apache.html#ssl Además de su certificado firmado (digamos Después agregue en !TLSCipherSuite HIGH:MEDIUM:+SSLv2 !TLSCACertificateFile /etc/ssl/cacert.pem !TLSCertificateFile /etc/ssl/server.crt !TLSCertificateKeyFile /etc/ssl/private/server.key !TLSVerifyClient allow Modifique su script de arranque #LDAP if ![ -x /usr/local/libexec/slapd ]; then echo -n " slapd"; /usr/local/libexec/slapd -h "ldap:/// ldaps:///" fi Detenga y reinicie $ telnet localhost 389 y # openssl s_client -connect localhost:636 -showcerts -state \ -CAfile /etc/ssl/cacert.pem este último además de dejarlo en una sesión con el servidor, debe indicar: Verify return code: 0 (ok) Note que es indispensable la llave pública de la autoridad certificadora para lograr conexiones exitosas con el puerto 636. Es recomndable que emplee AUTOMATIZACIÓN
CONCLUSIONESAunque el esquema de autenticación de OpenBSD requiera crear una cuenta del sistema por cada usuario LDAP a autenticar, esta configuración resulta apropiada para:
BIBLIOGRAFÍA
Inconveniente con
La necesidad de permitir LDAPv2 se vió en un correo, disponible hasta hace poco en el cache de google. Seguridad y autoridad certificadora: * http://www.openldap.org/pub/ksoper/OpenLDAP_TLS_howto.html#2.1 Información dedicada al Padre protector y liberada al dominio público. 2005. vtamara@pasosdeJesus.org |