General

Paso a Paso. Servidor "seguro" de correo, DNS y Web. Instalación y configuración de MySQL.

 

Lo cierto es que la instalación de MySql en Debian no merece escribir un artículo, porque es realmente sencilla. No obstante, voy a añadir un toque personal y voy a contar un forma de hacer MySQL un poquito más seguro. Además, al hacer esto me encontré con un problema cuya solución detallo también en este artículo.

En los repositorios de Debian existen varios paquetes relacionados con MySQL que pueden llevar a confusión. Uno de ellos, en concreto mysql-server, es un paquete que enlaza a la última ver
sión estable de MySQL en los repositorios de Debian. Lo que esto significa es que solo tendremos que ejecutar la siguiente orden para tenerlo instalado:

# apt-get install mysql-server

Y ya está, ya lo tienes instalado, con los scripts de inicio generados y todo configurado con las garantías de seguridad de Debian

Si quieres saber qué hice para hacerlo un poquito más seguro y cual fue el problema que me encontré y la solución que le di….

Como bien sabrás, la instalación por defecto convierte al usuario root@localhost en su administrador. Por supuesto que un usuario necesitaría acceder a una consola local para poder manipular la base de datos, pero en el momento que lo hiciese, con una cuenta con poquitos privilegios, ya tendría acceso como Administrador a nuestras bases de datos. Por ello una práctica común es cambiarle la clave a ese usuario.

Entonces voy yo y se me ocurre que, además de cambiarle la clave, podría cambiar el nombre de usuario también y así obligar al posible atacante a adivinar también el nombre de usuario. Como yo se que los usuarios en MySQL se almacenan en la tabla User de la base de datos mysql, y como acabo de instalarlo y no ha nada, pues cojo y hago:

mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

mysql> delete from user;

Query Ok, 2 row affected (0.00 sec)

¿2 Filas afectadas? Uf, ¿me he precipitado?. Bueno, no pasa nada, continuo…

mysql> GRANT ALL PRIVILEGES ON *.* TO DBAdmin@localhost IDENTIFIED BY ‘s3cr3t1ll0’ WITH GRANT OPTION;

Con esto lo que hemos hecho es crear un usuario con todos los privilegios llamado vcgsDBAdmin.

Ahora, es cuando empieza lo bueno. Resulta que, cuando salgo de MySQL y lo intento reiniciar, me encuentro lo siguiente:

spurs:~# /etc/init.d/mysql stop
Stopping MySQL database server: mysqld.
spurs:~# /etc/init.d/mysqls start
Starting MySQL database server: mysqld.
Checking for corrupt, not cleanly closed and upgrade needing tables..
/usr/bin/mysqladmin: connect to server at ‘localhost’ failed
error: ‘Access denied for user ‘debian-sys-maint’@’localhost’ (using password: YES)’
spurs:~# /usr/bin/mysqladmin: connect to server at ‘localhost’ failed
error: ‘Access denied for user ‘debian-sys-maint’@’localhost’ (using password: YES)’

spurs:~#

¡¿Qué pasó?!. Resulta que la instalación sobre Debian genera un usuario con privilegios con el que realizar tareas administrativas automáticas al inicio y parada del servicio. Entonces, como nos lo hemos cargado, pues tenemos el problema. No me ha apetecido investigar, de momento, sobre qué es exactamente lo que se hace con este usuario, pero seguro que pronto publicaré un resumen.

Ahora, después de este problema, solo me queda explicar como solucionarlo. Lo cierto es que es tan sencillo como crear otra vez el usuario y ponerle la misma clave. Para saber qué clave tenía, podemos editar el fichero /etc/mysql/debian.cnf:

# Automatically generated for Debian scripts. DO NOT TOUCH!
[client] host     = localhost
user     = debian-sys-maint
password = <EstoDebesCopiar>
socket   = /var/run/mysqld/mysqld.sock
[mysql_upgrade] user     = debian-sys-maint
password = <EstoDebesCopiar>
socket   = /var/run/mysqld/mysqld.sock
basedir  = /usr

Copiamos la clave, y entramos en MySQL para ejecutar la sentencia:

mysql> GRANT ALL PRIVILEGES ON *.* TO `debian-sys-maint`@`localhost` IDENTIFIED BY PASSWORD(‘LoQueHemosCopiado’) with WITH GRANT OPTION;
Query OK, 0 rows affected (0.00 sec)

Ahora, solo nos queda refrescar los privilegios y listo….

spurs:~# /etc/mysqladmin -u DBAdmin -p flush-privileges
Enter password:
spurs:~# /etc/initmy.d/mysql stop
Stopping MySQL database server: mysqld.
spurs:~# /etc/init.d/mysql start
Starting MySQL database server: mysqld.
Checking for corrupt, not cleanly closed and upgrade needing tables..

Acerca del autor

Víctor Campuzano

Growth Hacker no soy, pero lo vivo. De mi blog no vivo, pero aquí si que soy como soy. Marketing Digital, Creatividad y Blogging con pasión y desenfado. Alumno del Postgrado de Growth Hacking por IEBS.

Ahora es tu momento

*

Uso de cookies

Esta web utiliza cookies propias y de terceros, como Google Analytics, para optimizar su navegación y realizar tareas de análisis y las pertenecientes a WordPress. Advierto que si continuas navegando, aceptas su uso. Puede cambiar la configuración, desactivarlas u obtener más información.

ACEPTAR