Alejandro Valdés Jimenez avaldes@utalca.cl Diciembre 2005 1. Introducción Este artículo pretende entregar una guía para configurar un servidor Proftpd con autenticación con un servidor LDAP. Como muestra la Figura 1, los clientes que intenten conectarse al servidor FTP deben: Enviar su nombre de usuario y la clave cuando se le solicite. Una ves enviado estos datos, el servidor FTP debe verificar la existencia de tal usuario y validar la clave en el servidor LDAP. El servidor LDAP, una ves verificado y autenticado el usuario, envia la información necesaria del home del usuario. En estos momentos el usuario puede interactuar con el servidor (subir/bajar archivos). Figura 1. Diagrama Autenticación 1
2. Proftpd Mini Howto Proftpd + LDAP Professional FTP Daemon es un servidor FTP (File Transfer Protocolo, Protocolo de Transferencia de archivos) escrito para ser usado en sistemas operativos Unix y sabores-unix. No tiene soporte nativo para usar bajo Microsoft Windows. Algunas de las características de este servidor FTP son; Archivo de configuración principal, con directivas y grupos de directivas muy intuitivas, similares a las utilizadas en el Servidor web Apache. Fácil para configurar multiples servidores FTP virtuales y el servicio anonymous. Oculta directorios y archivos basandose en el estilo Unix para los permisos y grupos. Diseño modular, permitiendo al servidor extender fácilmente sus funcionalidades con módulos. Algunos módulos han sido escritos para soportar comunicación con bases de datos SQL, servidores LDAP, encriptación SSL/TLS, conección a RADIUS, etc. 3. LDAP LDAP (Lightwieght Directory Access Protocol), o Protocolo de Acceso a Directorios Ligeros es un servicio de directorio, muy similar a los directorios del sistema de archivos al que estamos acostumbrados o a la guía de teléfonos que usamos para buscar números de teléfono, o al servicio DNS (Domain Name Service). LDAP es una base de datos especializada. Es muy importante recordar que LDAP no es otra base de datos mas, LDAP etá optimizada para hacer búsquedas (leer datos). Las lecturas en LDAP e realizan de manera mucho mas frecuente que las escrituras. 4. Programas a instalar Esta configuración la estamos realizando en una máquina con sistema operativo GNU/Linux con ditribución GNU/Debian (testing/unstable), con kernel 2.6.13. Los programas/versiones utilizados son: proftpd-common 1.2.10-26 proftpd-doc 1.2.10-26 proftpd-ldap 1.2.10-26 slapd 2.2.26-5 2
5. Configuraciones Mini Howto Proftpd + LDAP En esta sección veremos la configuración básica para la autenticación. 5.1. /etc/proftpd.conf En este archivo debemos indicar la información del servidor LDAP y la base de búsqueda: (1) AuthOrder mod_ldap.c (2) LDAPServer "server_ldap" (3) LDAPDoAuth on ou=usuarios,dc=midominio,dc=cl (uid=%v) (4) LDAPAuthBinds on (1) indica el orden del los módulos para la autenticación, en este caso sólo utilizará el módulo de LDAP. (2) dirección IP o nombre de la máquina donde corre LDAP. (3) filtro para la búsqueda. (4) para enlazar con el servidor LDAP con el mismo usuario que se conecta. 5.2. Esquema LDAP Para que la autenticación funcione, el esquema debe tener algunos atributos y clase de objeto adicionales, estos son: # Posix attributes attributetype ( 1.3.6.1.1.1.1.3 NAME homedirectory DESC The absolute path to the home directory SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) attributetype ( 1.3.6.1.1.1.1.4 NAME loginshell DESC The path to the login shell SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) attributetype ( 1.3.6.1.1.1.1.1 NAME gidnumber DESC An integer uniquely identifying a group in an administrative domain EQUALITY integermatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) attributetype ( 1.3.6.1.1.1.1.0 NAME uidnumber DESC An integer uniquely identifying a user in an administrative domain 3
EQUALITY integermatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) attributetype ( 1.3.6.1.1.1.1.12 NAME memberuid SUBSTR caseexactia5substringsmatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) objectclass ( 2.5.6.6 NAME person DESC RFC2256: a person SUP top STRUCTURAL MUST ( rut $ dv $ userpassword $ uid $ apepat $ apemat $ prinom ) MAY ( segnom $ homedirectory $ loginshell $ gidnumber $ uidnumber ) ) # Posix objectclass objectclass ( 1.3.6.1.1.1.2.0 NAME posixaccount SUP top AUXILIARY DESC Abstraction of an account with POSIX attributes MUST ( cn $ uid $ uidnumber $ gidnumber $ homedirectory ) MAY ( userpassword $ loginshell $ description ) ) objectclass ( 1.3.6.1.1.1.2.2 NAME posixgroup SUP top STRUCTURAL DESC Abstraction of a group of accounts MUST ( cn $ gidnumber ) MAY ( userpassword $ memberuid $ description ) ) 5.2.1. Ejemplo LDIF Este es un ejemplo para subir los grupos al LDAP. grupos.ldif dn: cn=grupos, dc=midominio, dc=cl objectclass: posixgroup cn: grupos gidnumber: 100 memberuid: usuario1 memberuid: usuario2 usuarios.ldif dn: uid=usuario1,ou=usuarios,dc=mydominio,dc=cl objectclass: person uid: usuario1 apepat: valdes apemat: jimenez 4
prinom: alejandro segnom: mauricio userpassword: {CRYPT}AYa.0zPsSa2vA gidnumber: 100 loginshell: /bin/bash homedirectory: /home/usuarios/usuario1/ uidnumber: 1050 Para agregar estos datos, ejecutar el siguiente comando: ldapadd -x -f grupos.ldif -D "cn=admin,dc=midominio,dc=cl" -W 5.3. /etc/nsswitch.conf Además, se debe indicar al sistema que para algunas bases de datos debe buscar la información en otro lugar. También se establecen alternativas de búsqueda en caso de no encontrarla en una de ellas. passwd: group: shadow: Aquí se indica que la información correpondientes a usuarios, grupos y claves las busque en primer lugar en el servidor ldap, de no encontrar la información, entonces buscar en los archivos (files). Nunca hay que dejar fuera la alternativa files, pues para el caso del usuario root la información siempre debe estar local y no depender de otro servicio. 6. Enlaces Estos son algunos enlaces que se utilizaron para la implementación de proftpd + ldap. The ProFTPD Project Home: http://www.proftpd.org/ Modulo LDAP para Proftpd: http://horde.net/~jwm/software/mod_ldap/ 5