La idea es poder usar los usuarios existentes en la aplicación construída con SowerPHP como usuarios para la autenticación y autorización de equipos de la red a través de Freeradius.
Básicamente se creará una vista llamada radcheck
con los usuarios y las contraseñas de la tabla usuario
del framework pero con el formato que usa Freeradius. Los usuarios que se podrán autenticar a través de radius son aquellos que estén dentro del grupo radius de la aplicación.
Se debe tener instalado SowerPHP con la extensión app funcionando y el esquema de usuarios por defecto que utiliza la extensión cargado en la base de datos.
La explicación se realiza para Debian GNU/Linux y una base de datos MariaDB. Es análogo con otras base de datos que son soportadas por el framework y Freeradius.
Instalar Freeradius y soporte para bcrypt
:
# apt-get install freeradius freeradius-mysql libxcrypt1
Se creará base de datos radius y usuarios radius para ser usados por Freeradius. Para esto se debe cargar el siguiente script SQL en la base de datos:
$ mysql -u root -p < sowerphp_radius.sql
CREATE DATABASE radius; GRANT ALL PRIVILEGES ON radius.* TO [email protected] IDENTIFIED BY 'password'; CREATE OR REPLACE VIEW radius.radcheck AS SELECT CONV(SUBSTRING(CAST(SHA(CONCAT(u.usuario, '|Crypt-Password')) AS CHAR), 1, 16), 16, 10) AS id, u.usuario AS username, 'Crypt-Password' AS attribute, ':=' AS op, u.contrasenia AS VALUE FROM appdb.usuario AS u, appdb.grupo AS g, appdb.usuario_grupo AS ug WHERE u.id = ug.usuario AND ug.grupo = g.id AND g.grupo = 'radius' AND g.activo = TRUE AND u.activo = TRUE ; CREATE OR REPLACE VIEW radius.radreply AS SELECT CONV(SUBSTRING(CAST(SHA(CONCAT(u.usuario, '|Reply-Message')) AS CHAR), 1, 16), 16, 10) AS id, u.usuario AS username, 'Reply-Message' AS attribute, ':=' AS op, CONCAT('Hola ', u.nombre) AS VALUE FROM appdb.usuario AS u, appdb.grupo AS g, appdb.usuario_grupo AS ug WHERE u.id = ug.usuario AND ug.grupo = g.id AND g.grupo = 'radius' AND g.activo = TRUE AND u.activo = TRUE ;
appdb
es la base de datos de la aplicación construída con SowerPHP.
Editar el archivo /etc/freeradius/clients.conf
y configurar el o los clientes que tendrán acceso al servidor Freeradius.
Verificar con:
echo "User-Name=test,User-Password=mypass" | /usr/local/bin/radclient localhost:1812 auth s3cr3t