17.3.08

FreeRADIUS + MySQL


FreeRADIUS + MySQL
Gestión de usuarios

En el siguiente manual, vamos a ver cómo utilizar el gestor de bases de datos MySQL para administrar usuarios y grupos de usuarios de un servidor de autenticación RADIUS.

Instalamos mysql

# apt-get install mysql mysql-sever-4.1
# apt-get install freeradius-mysql

Creamos la base de datos para utilizar con radius:

mysql> create database radius;
mysql> grant all privileges on radius.* to radius@localhost;
mysql> set password for radius@localhost = old_password('radius');


Ejecutamos el script para generar tablas y demás:
primero descomprimimos en /usr/share/doc/freeradius/examples/mysql.sql

# gzip -d mysql.sql.gz
# mysql -u root -p radius < /usr/share/doc/freeradius/examples/mysql.sql

Creamos un usuario para ver si funciona:

Seguir Leyendo...


Las tablas que usa RADIUS para la gestión de usuarios son las siguientes:

usergroup: Aquí se define a qué grupo pertenece cada usuario.
Campos:

  • id. Identificador de registro.
  • UserName. Nombre de usuario.
  • GroupName. Grupo al que pertenece el usuarios

radcheck: Aquí se definen las contraseñas de cada usuario.
Campos:

  • id. Identificador de registro.
  • UserName. Nombre de usuario.
  • Attribute. Tipo de contraseña. En nuestro caso, ‘User-Password’.
  • Op. Es el operador que se usará para la comprobación. Para nosotros ‘==’.
  • Value. La contraseña.

radreply: En esta tabla se definen los atributos sobre la conexión y sesión de los usuarios; por ejemplo, IP asignada y tiempo de espera máximo. En nuestro caso, permitimos que se asignen los de DEFAULT contenidos en el archivo ‘users’; por lo tanto, no insertamos nada en la tabla.

radgroupreply: Similar a radcheck pero permite establecer atributos a un grupo de usuarios completo.
Campos:

  • id. Identificador de registro.
  • GroupName. Nombre de grupo.
  • Attribute. Nombre del atributo que se quiere agregar.

Nosotros sólo hicimos uso de uno, el tipo de autenticación: ‘Auth-Type’.
Op. Es el operador que se usará para la comprobación. Para nosotros ‘:=’.
Value. El valor del atributo. Nuestro Auth-Type es ‘EAP’.

Creamos usuario usuario_admin en el grupo admin:

mysql> insert into usergroup values ('usuario_admin','admin','');

Añadimos la contraseña para el usuario admin:

mysql> insert into radcheck values ('','usuario_admin','Password','==','[password]');

Añadimos el atributo local al grupo admin: (no es necesario)

mysql> insert into radgroupcheck values ('','admin','Auth-Type',':=','local');

Esteblecemos atributos del grupo admin

mysql> insert into radgroupreply values ('', 'admin', 'Framed-Protocol', ':=', 'PPP');
mysql> insert into radgroupreply values ('', 'admin', 'Service-Type', ':=', 'Framed-User');
mysql> insert into radgroupreply values ('', 'admin', 'Framed-Compression', ':=', 'Van-Jacobsen-TCP-IP')

Configuramos RADIUS para que gestione los ususarios con MySQL:
Editamos /usr/local/etc/raddb/clients.conf y configuramos las IPs o subrredes desde las que se aceptarán peticiones. En este caso, además de localhost, se aceptarán peticiones de un AP con IP 192.168.6.1:

client 127.0.0.1{
ipaddr = 127.0.0.1
secret = secretradius
shorname = AP
nastype = other
}
client 192.168.6.1{
ipaddr = 192.168.6.1
secret = secretradius
netmask = 32
shortname = windows
nastype = other
}

Ahora editamos /usr/local/etc/raddb/clients.conf para indicar a RADIUS IP del servidor MySQL, usuario y password:

# Connect info
server = "localhost"
login = "radius"
password = "password_basededatos"

# Database table configuration
radius_db = "radius"

A continuación editamos /usr/local/etc/raddb/sites-avaliable/default y terminamos de configurar los parámetros necesarios:

authorize {
preprocess
chap
mschap
suffix
eap
sql
}

authenticate {
Auth-Type PAP {
pap
}
Auth-Type CHAP {
chap
}
Auth-Type MS-CHAP {
mschap
}
}
preacct {
preprocess
acct_unique
suffix
}

accounting {
detail
radutmp
sql
}

session {
radutmp
sql
}

post-auth {
sql
}

pre-proxy {
}

post-proxy {
eap

}

Si el servidor mysql está en otro host, en /etc/mysql/my.cnf parcheamos la linea bind-address=127.0.0.1

(Al arrancar el servicio radiusd -X me daba error con el puerto 1812 y he tenido que detener los servicios smb)

A mí me ha dado error en una tabla y he tenido que modificar las columnas de la tabla radpostauth:

mysql> alter table radpostauth change user username varchar(64);
mysql> alter table radpostauth change date authdate timestamp;

En el sql.conf he desparcheado el parámetro read_groups y lo he puesto a "no" porque me daba error con una tabla que no existía que hacía referencia a los grupos


Para exportar/importar bade de datos (por si hicera falta):
Para exportar la base de datos radius:

# mysqldump -u [user] -p --opt [nombre_db] > fichero.sql

Para importarla:
Primero la creamos

# mysql -u [user] -p
mysql> create database radius;
mysql> \q
# mysql -u [user] -p [nombre_db] <>

Podemos instalar phpmyadmin para gestionar MySQL

# apt-get install phpmyadmin

Yo he tenido un problema con la configuración y he tenido que hacer lo siguiente:
He cambiado el fichero /var/www/phpmyadmin/config.inc.php porque me daba un error de blowfish, lo que he hecho es cambiarlo por config.sample.inc.php y en este último he borrado el valor del parámetro "controluser" y el de "controlpass" y los he dejado vacíos.
Así ya me ha funcionado.

Podremos instalar phpmyadmin para gestionar via web MySQL y poder administrar los usuarios más fácilmente:

# apt-get install phpmyadmin

Nos muestra un asistente durante la instalación para configurar phpmyadmin automáticamente. Primero nos pregunta qué servidor web esatmos utilizando, en nuestro caso indicamos apache2 (aunque es altamente recomendable utilizar apache-ssl).
Indicamos el usuario para el sitema de configuración ("admin" por defecto) e indicamos la contraseña.
Reiniciamos apache y accedemos desde un navegador a https://[ip_servidor]/phpmyadmin
Cuando accedemos, podremos encontrarnos con un error que nos dice que necesitamos configurar una clave secreta blowfish (algoritmo de cifrado simétrico que utiliza una passprhase para encriptar el password)
En realida lo que tenemos que hacer es modificar los permisos de los ficheros:
/etc/phpmyadmin/blowfish_secret.inc.php
/etc/phpmyadmin/htpasswd.setup


Es recomendable cambiar la passphrase que viene por defecto ya que por defecto les asigna el grupo www-data y nosotros usamos el usuario y grupo httpd:

# chown root:httpd blowfish_secret.inc.php
# chown root:httpd htpasswd.setup

Ya podemos acceder con un usuario que tenga privilegios en la base de datos. Por ej. root.

Ahora desde phpmyadmin podremos añadir usuarios.
Sólo hay que añadir un registro en usergroup y otro en radcheck por cada usuario (ver imagen).

4 comentarios:

David Loor dijo...

Gracias por esta información, me fue de gran ayuda.

Saludos.

mary dijo...

me parecio interesante tu post, una pregunta si yo quisiera enviar datos mediante radius a mysql crees que se podria, es que pienso implementar un landing page que pida un correo electronico ademas lo pienso usar como portal cautivo, pero crees que sea posible enviar el correo del usuario a mysql y despues le de acceso a internet. disculpa pero soy nueva con respecto a este tema.

Diego dijo...

Gracias Loco!!

Zafrillera dijo...

Se puede modificar el aspecto de la pagina de registros de usuarios.

Gracias