Le he cogido gusto a lo del Radius y centralizar todos los temas de autentificación bajo su paraguas 😛 .
Por un lado hemos visto como crear vpn’s y puntos de acceso wireless con Radius y por otro cómo integrar vsftpd con MySQL utilizando usuarios de ftp virtuales. ¿Por qué no combinarlos? ¿Para qué vamos a querer mantener una nueva base de datos para ftp si ya tenemos nuestro Radius preparado para realizar autentificaciones? Está casi todo hecho, sólo nos falta tocar las teclas adecuadas.
Vamos a suponer que tu servidor Radius ya está funcionando y que ya has montado tu sistema vsftpd con usuarios virtuales, en los links anteriores se explica todo. Configuraremos ahora nuestro servidor ftp para que se autentique contra Radius en vez de contra MySQL directamente.
Como vsftpd utiliza PAM para autenticarse, deberemos solamente cambiar el módulo MySQL por el correspondiente a Radius. En aquél momento utilizábamos pam_mysql. ahora haremos lo mismo con pam_radius, así de sencillo.
En mi caso, como sabéis, utilizo CentOS5, y curiosamente no está disponible un rpm con este módulo, así que toca prepararlo a mano, la suerte es que en los fuentes viene el archivo .spec adecuado para crearlo directamente. Si para vuestro sistema tenéis el instalable adecuado podéis saltaros este paso.
Podríamos compilar e instalar directamente el tar, pero prefiero crear un rpm que permita actualizarlo y desinstalarlo a posteriori. Descargamos el código fuente desde aquí, lo desempaquetamos en una ruta temporal y copiamos el propio tar a la ruta adecuada para compilar el rpm:
#cp pam_radius-1.3.17.tar.gz /usr/src/redhat/SOURCES/pam_radius_auth-1.3.17.tar.gz #tar xvfz pam_radius-1.3.17.tar.gz #cp pam_radius-1.3.17/pam_radius_auth.spec /usr/src/redhat/SPECS
Ahora debemos hacer un pequeño cambio en este archivo spec. Deberemos editarlo y modificar la línea 2
%define version 1.3.15
actualizando el número de versión correspondiente:
%define version 1.3.17
Y añadimos la línea
BuildRequires: pam pam-devel
Después de la línea 15, de manera que queda
%define name pam_radius_auth %define version 1.3.17 %define release 0 Name: %{name} Summary: PAM Module for RADIUS Authentication Version: %{version} Release: %{release} Source: ftp://ftp.freeradius.org/pub/radius/pam_radius_auth-%{version}.tar URL: http://www.freeradius.org/pam_radius_auth/ Group: System Environment/Libraries BuildRoot: %{_tmppath}/%{name}-buildroot License: BSD-like or GNU GPL Requires: pam BuildRequires: pam pam-devel
Ya tenemos todo preparado para compilar el módulo
#rpmbuild -ba /usr/src/redhat/SPECS/pam_radius_auth.spec
Si todo va bien tendremos en /usr/src/redhat/RPMS/x86_64 el rpm del paquete preparado para instalar. En mi caso, como es un sistema de 64bits está en la carpeta x86_64, en tu caso puede estar en i386. Sólo nos queda instalarlo.
rpm -ivh /usr/src/redhat/RPMS/pam_radius_auth-1.3.17-0.x86_64.rpm
Vamos ahora a configurar lo poco que hay que configurar 😛 . Indicamos la dirección del servidor Radius y la clave de acceso al mismo:
/etc/raddb/server
127.0.0.1 claveSecretaRadius 1
Cambiamos la configuración PAM de vsftpd para que en vez autenticarse con MySQL utilice Radius:
/etc/pam.d/vsftpd
auth required /lib/security/pam_radius_auth.so debug account required /lib/security/pam_radius_auth.so debug
Eso es todo. Nuestro servidor FTP se autenticará contra el servidor Radius. Hemos añadido la opción de depuración (debug) para comprobar el funcionamiento, cuando estemos seguros de que todo funciona bien podemos eliminarla.
Si tienes algún problema, para verificar qué hace el módulo pam_radius debemos comprobar el log estándar de debug. Por defecto no viene activado en el demonio syslog, así que lo añadimos:
/etc/syslog.conf
*.debug /var/log/debug.log
Intentamos acceder al servidor FTP y comprobamos qué está haciendo el módulo de autentificación en este log:
cat /var/log/debug.log
Sep 28 17:11:09 osiris vsftpd: pam_radius_auth: Got user name XXX Sep 28 17:11:09 osiris vsftpd: pam_radius_auth: Sending RADIUS request code 1 Sep 28 17:11:09 osiris vsftpd: pam_radius_auth: DEBUG: getservbyname(radius, udp) returned 1214042784. Sep 28 17:11:09 osiris vsftpd: pam_radius_auth: Got RADIUS response code 2 Sep 28 17:11:09 osiris vsftpd: pam_radius_auth: authentication succeeded
Si hubiese algún problema deberíamos verlo ahí, pero si ya tenías Radius y vsftpd funcionando, todo debería ir bien.
Hasta aquí hemos llegado, hemos integrado un nuevo servicio de nuestra red en el mismo sistema de autentificación. Cualquier demonio que utilice PAM para autenticarse se debería configurar del mismo modo. Ssh es el ejemplo más claro, se haría prácticamente igual.