SowerPHP

Framework PHP hecho en Chile

Herramientas de usuario

Herramientas del sitio


howto:freeradius

Integración con Freeradius

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.

Instalación

Instalar Freeradius y soporte para bcrypt:

# apt-get install freeradius freeradius-mysql libxcrypt1

Configuración base de datos

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
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.

Configuración Freeradius

Clientes

Editar el archivo /etc/freeradius/clients.conf y configurar el o los clientes que tendrán acceso al servidor Freeradius.

Pruebas

Verificar con:

echo "User-Name=test,User-Password=mypass" | /usr/local/bin/radclient localhost:1812 auth s3cr3t

Referencias

howto/freeradius.txt · Última modificación: 2016/04/14 14:59 por delaf