SQL

Sacado de cristobal.wiki, presentado sin garantia y con mucho <3.
Revisión del 11:15 8 ene 2026 de JP (discusión | contribs.)
(difs.) ← Revisión anterior | Revisión actual (difs.) | Revisión siguiente → (difs.)
Ir a la navegaciónIr a la búsqueda

¿Que es SQL y para que se usa?

SQL es un tipo de lenguaje de gestion de datos. Significa "Lenguaje de Consultas Estandar" (Standard Query Language), nos permite hacer preguntas a un servidor de base de datos relaciones como puede ser MariaDB, MySQL, PostgreSQL, etc.

El proyecto usa MariaDB/MySQL (Son practicamente intercambiables) para guardar la contraseña del router de profesores (Proximamente) y los usuarios de FreeRADIUS.

Hay un script, "aux/crear_cuentas_sql.sh" que nos ayuda a generar cuentas validas para RADIUS, dejandonos elegir entre si queremos crear cuentas con contraseñas en "plaintext" o contraseñas "cifradas", cifradas es mucho mas recomendable.

Tutoriales

Uso de SQL (General)

Para usar SQL necesitamos un set paquetes, en nuestro caso, un servidor de SQL y un cliente.

Notese: El cliente puede estar en otro equipo, aqui se toma como ejemplo un servidor con cliente local.

Para esto, podemos instalar los paquetes "mariadb-common" y "mariadb-client" con el comando de Debian, y distribuciones basadas en este, apt install mariadb-client mariadb-common freeradius

Notese: El paquete de freeradius es para este tutorial, no tienes por que usar freeradius si no vas a usar esto para freeradius.

Una vez tengamos los paquetes necesarios, podemos conectarnos a un servidor MySQL o MariaDB usando el comando de ejemplo: (Como superusuario, pues aun NO tenemos cuentas)

mysql

Lo que nos enviara a un tipo de shell de SQL. Puede tener un aspecto similar a:

MariaDB [(none)]> 

Esto nos indica que estamos en un servidor MariaDB, y que no estamos en ninguna base de datos. Mas abajo explicare como interactuar con una base de datos, pero primero voy a explicar como se puede conectar a otro servidor, a una base especifica, con otro usuario, o en otro puerto.

El comando "mysql" por defecto se quiere conectar al host "127.0.0.1" (Que es localhost) y con el usuario del sistema que este ejecutando el comando, sin usar contraseña.

Esto no funciona siempre, muchas veces nos encontraremos con una base de datos que tiene un usuario diferente al que estamos usando para el login, o que tiene contraseña, aaque no esta en nuestro ordenador local, asi que vamos a aprender algunos argumentos que mysql puede necesitar en algun momento. Observa el ejemplo de abajo.

mysql -h 10.0.0.1 -u JPGAMER666 -p -D MiBaseSuperEpicaDeHacksDelFornite

¿Que hace el comando? (Paso a paso)

  • mysql es el comando base (Como hemos visto antes
  • -h 10.0.0.1 le dice que el Host de la base de datos esta en 10.0.0.1
  • -u JPGAMER666 le indica que vamos a loguearnos con el usuario "JPGAMER666"
  • -p hace al servidor consciente que queremos entrar con contraseña (Que nos la pida)
  • -D MiBaseSuperEpicaDeHacksDelFornite es el nombre de la base de datos, con la "-D" para decirle que estamos entrando en esta base de datos.
    • Nota: La -D Es MAYUSCULA, minuscula significa otra cosa.

Genial! Con eso tenemos lo que nos hace falta para continuar con el tutorial, el cual asumes que sabes lo mas minimo de bash.

Uso de SQL (Para RADIUS)

Para lo siguiente necesitas haberte logueado en MySQL, tienes que tener el prompt ese de "mysql [none]" (O MariaDB), cuando estes dentro tienes que hacer una serie de cosas;

  • Crear un usuario
  • Crear una base de datos
  • Darle permisos al usuario sobre la base de datos
  • "Flush" los privilegios del usuario (Recargar)
  • Importar las tablas "plantillas" de FreeRADIUS
Creando un usuario

Crear un usuario es un proceso muy sencillo, podemos usar el siguiente comando (DE SQL) como referencia:

CREATE USER 'Fran' IDENTIFIED BY 'FranPassword';

Donde "Fran" es el nombre de nuestro usuario, y "FranPassword" es la contraseña.

Nos tiene que devolver algo como

Query OK, 0 rows affected (0,015 sec)

Esto nos dice que hemos creado el usuario correctamente.

Nota: El punto y coma al final NO es opcional. SQL TIENE que acabar de alguna forma, generalmente, esto se hace con un punto y coma.

Creando una base de datos

Crear una base de datos es muy sencillo, solo necesitamos un comando:

CREATE DATABASE baseradius;

Aunque tienes que tener en cuenta que la base de datos NO lleva comillas.

Dando permisos al nuevo usuario

Para darle permiso a nuestro usuario debemos ejecutar un comando similar al siguiente.

GRANT ALL ON baseradius.* TO 'Fran';

Aqui, el usuario SI LLEVA las comillas. El comando es simple, solo tenemos que saber un par de cosas.

GRANT ALL ON significa "Permitir (hacer) todo en", esto puede ser tambien GRANT READ ON o GRANT WRITE ON. (Pero tienes que usar ALL para este proyecto)

baseradius.* significa "Todas las tablas" de la base datos. Tambien puede ser SOLO una tabla o grupo de tablas.

Guardando

Para hacer que MariaDB 'vea' los cambios, aunque esto ya no es necesario, deberias ejecuta el siguiente comando

FLUSH PRIVILEGES;

Esto refresca las tablas de permisos (privilegios).

Importando las tablas

Para importar las tablas de plantilla de RADIUS tenemos que ejecutar un comando de bash, esto se tiene que hacer como superusuario.

mysql -u Fran -p -D baseradius < /etc/freeradius/3.0/mods-config/sql/main/mysql/schema.sql

Donde "Fran" es el usuario que hemos creado antes, y "baseradius" es la base de datos que hemos creado antes.

Si falla algo, es por que posiblemente no instalado el paquete de freeradius antes.

Usando SQL para añadir usuarios a RADIUS

Configurando RADIUS para que use SQL.

Para esto tenemos que tener tambien el paquete freeradius-mysql (Junto a freeradius)

apt install freeradius-mysql

Luego tenemos que cambiar algunas cosas del archivo /etc/freeradius/3.0/mods-available/sql, para esto usamos el comando

nano -l /etc/freeradius/3.0/mods-available/sql

Nota: Usa nano -l para los numeros de lineas

Cerca de la linea 27 encontraremos el principio de la declaracion de SQL:

sql {

Esto le dice a freeradius que esta es la configuracion de SQL, vamos cerca de la linea 40:

dialect = "sqlite"

La cual tendremos que cambiar a

dialect = "mysql"

Mas abajo, sobre la linea 60 o asi, encontraremos las lineas

driver = "rlm_sql_null"
#driver = "rlm_sql_${dialect}"

Podemos cambiar la linea que dice "null" a "mysql" quedando como

driver = "rlm_sql_db2"

O, alternativamente, y recomedablemente, tenemos que quitar esa linea y descomentar la siguiente, la que lleva la variable.

driver = "rlm_sql_${dialect}"

Luego, seguimos hasta la linea 84, donde declara "mysql {", Aqui tenemos que eliminar el certificado de TLS. O bien eliminando las lineas siguientes o comentandolas:

tls {
    ca_file = "/etc/ssl/certs/my_ca.crt" 
    ca_path = "/etc/ssl/certs/" 
    certificate_file = "/etc/ssl/certs/private/client.crt" 
    private_key_file = "/etc/ssl/certs/private/client.key" 
    cipher = "DHE-RSA-AES256-SHA:AES128-SHA" 
    tls_required = yes 
    tls_check_cert = no 
    tls_check_cert_cn = no 
}

Mas tarde, cerca de la linea 167 (SIX SEVEN!) tenemos que descomentar y cambiar las siguientes lineas:

#server = "localhost"
#port = 3306
#login = "radius"
#password = "radpass"

Aqui tenemos que rellenar con nuestros detalles, cambiaremos "server" por el servidor (Puede ser el mismo, localhost), port esta bien, login, segun nuestro ejemplo, seria Fran y el passsword seria "FranPassword"

Quedaria algo asi:

server = "localhost" 
port = 3306 
login = "Fran" 
password = "FranPassword"

Luego cerca de la linea 185, tenemos que cambiar la base de datos por la que hemos creado antes, cambiando la linea de:

radius_db = "radius"

A nuestra nueva base de datos, la cual es baseradius, asi que es la siguiente:

radius_db = "baseradius"

Con esto, podemos guardar el archivo. Ahora solo nos queda 'activar' el modulo de SQL:

ln -s /etc/freeradius/3.0/mods-available/sql /etc/freeradius/3.0/mods-enabled
Activando SQL en el sitio "default" de FreeRADIUS

Para esto tenemos que editar el sitio "default" de FreeRADIUS

nano -l /etc/freeradius/3.0/sites-enabled/default

Cambiamos las lineas cerca de 460; 735; 777; 891; de "sql" o "#sql" a simplemente "-sql", descomentando si fuese necesario. EL GUION ES IMPORTANTE.

Añadiendo los usuarios (Esto no es seguro)

Primero nos logueamos en mariadb, con los comandos que he enseñado antes, y entramos en la base de datos (Si no estamos ya (Con -D)) con el comando:

USE baseradius;

Esto deberia devolver un nuevo prompt tal que:

MariaDB [baseradius]>

Con esto tenemos un shell de nuestro servidor de SQL, ahora introduciremos un nuevo usuario con el comando (O estamento SQL):

INSERT INTO radcheck (username, attribute, op, value) VALUES ('yo', 'Cleartext-Password', ':=', 'micontra');

Este estamento le dice a la base de datos que queremos meter cosas en la tabla "radcheck", especificamente en las columnas "username" "attribute" "op" y "value", el siguiente VALUES le dice que lo siguiente son los valores que vamos a insertar en las columnas, los cuales son "yo" como "username; "Cleartext-Password" como "Attribute; ":=" como "op" (Operacion que hacer (Igual)) y "micontra" como "value" (El valor de la contraseña.

Añadiendo los usuarios (Ahora seguro)

El anterior comando hace que la contraseña 'micontra' sea visible para todos, por eso, es mas recomendable usar un metodo de cifrado como Crypt (De Unix). Esto se hace generando un crypt (Usa el programa en GitHub (gen_crypt)) y cambiando el 'attribute' a "Crypt-Password", tal que:

INSERT INTO radcheck (username, attribute, op, value) VALUES ('root', 'Crypt-Password', ':=', '$y$j9T$yf8gkikenVTsszwcY0.F9.$pODqukhgDNazWDDeWFd4oQrsw5JZmRk.5LL.AqJF6C7'); # La contra es toor

Probando la nueva contraseña.

Matamos el proceso de FreeRADIUS con

pkill -9 radius

Y re-abrimos RADIUS con depuracion/"debug" con el comando:

freeradius -X

Si todo sale bien, deberiamos acabar con unas lineas similares a las siguientes

Listening on auth address 127.0.0.1 port 18120 bound to server inner-tunnel
Listening on auth address * port 1812 bound to server default
Listening on acct address * port 1813 bound to server default
Listening on auth address :: port 1812 bound to server default
Listening on acct address :: port 1813 bound to server default
Listening on proxy address * port 51854
Listening on proxy address :: port 39556
Ready to process requests

Con esto, estamos listos para probar el servicio, para esto usamos el comando radtest

radtest yo micontra localhost 0 testing123

(testing123) es la contra para localhost por defecto

Este comando deberia mostrarnos algo asi, si sale bien:

Sent Access-Request Id 116 from 0.0.0.0:47385 to 127.0.0.1:1812 length 72
User-Name = "yo"
User-Password = "micontra"
NAS-IP-Address = 127.0.1.1
NAS-Port = 0
Message-Authenticator = 0x00
Cleartext-Password = "micontra"
Received Access-Accept Id 116 from 127.0.0.1:1812 to 127.0.0.1:47385 length 38
Message-Authenticator = 0x0be93ccafa2de29441f040d96d03c95b

Alternativamente

Usa el script de "instalar y configurar RADIUS" (!!) (aux/radius.sh) Para generar las contraseñas, usa "aux/crear_cuentas_sql.sh