Guía para Instalar y Securizar MySQL Server de forma rápida y sencilla en Ubuntu 18.
MySQL es el sistema de gestión de Bases de Datos más popular. Es fácil, bastante rápido y fácil de instalar.
Una de sus ventajas es que lo podemos instalar en cualquier Sistema Operativo.
Instalación de MySQL Server
Lo primero es actualizar nuestro sistema de paquetes y upgradear si fuera necesario
1 2 |
$ sudo apt update $ sudo apt upgrade |
Iniciamos la instalación
1 |
$ sudo apt install mysql-server |
Se nos instalarán los siguientes paquetes:
1 |
libaio1 libevent-core-2.1-6 libhtml-template-perl mysql-client-5.7 mysql-client-core-5.7 mysql-common mysql-server mysql-server-5.7 mysql-server-core-5.7 |
Una vez instalado comprobamos que MySQL esta funcionando correctamente
1 |
$ sudo systemctl status mysql |
Securizando MySQL
Para ello usaremos el Shell Script mysql_secure_installation que mejora la seguridad de nuestra Base de Datos.
- Podremos establecer una clave para la cuenta root.
- Denegar el acceso desde el exterior de todas las cuentas root.
- Eliminar accesos y cuentas anónimas.
- Eliminar la base de datos de pruebas que es accedida por usuarios anónimos.
También nos solicitará si deseamos mejorar la seguridad de nuestras claves para que estas sean más difíciles de hackear por lo que instalará un Plugin de Validación de Constraseñas (Validator Server Plugin).
1 |
$ sudo mysql_secure_installation |
Acceso a MySQL
Para acceder al sistema por primera vez ejecutamos
1 |
$ sudo mysql |
Plugin validate_password
Si queremos incluir el Plugin de seguridad para validar contraseñas
1 |
mysql> INSTALL PLUGIN validate_password SONAME 'validate_password.so'; |
1 2 3 |
mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS -> FROM INFORMATION_SCHEMA.PLUGINS -> WHERE PLUGIN_NAME LIKE 'validate_password%'; |
1 2 3 4 5 |
+-------------------+---------------+ | PLUGIN_NAME | PLUGIN_STATUS | +-------------------+---------------+ | validate_password | ACTIVE | +-------------------+---------------+ |
Para chequear la configuración del Plugin , podemos comprobar las variables de sistema.
1 |
mysql> SHOW VARIABLES LIKE 'validate_password%'; |
1 2 3 4 5 6 7 8 9 10 11 |
+--------------------------------------+--------+ | Variable_name | Value | +--------------------------------------+--------+ | validate_password_check_user_name | OFF | | validate_password_dictionary_file | | | validate_password_length | 8 | | validate_password_mixed_case_count | 1 | | validate_password_number_count | 1 | | validate_password_policy | MEDIUM | | validate_password_special_char_count | 1 | +--------------------------------------+--------+ |
Para eliminar el Plugin bastaría con ejecutar
1 |
mysql> UNINSTALL PLUGIN validate_password; |
Usuarios y Privilegios
Ahora crearemos un nuevo usuario con privilegios sobre todas las tablas para no tener que tocar el usuario root.
1 |
mysql> CREATE USER `artegrafico` IDENTIFIED BY 'tuclave'; |
Asignamos privilegios al usuario para que pueda utilizar todas las tablas
1 |
mysql> GRANT ALL PRIVILEGES ON *.* TO `artegrafico`; |
Comprobamos que se han asignado correctamente
1 |
mysql> SHOW GRANTS FOR `artegrafico`; |
1 2 3 4 5 |
+--------------------------------------------------+ | Grants for artegrafico@% | +--------------------------------------------------+ | GRANT ALL PRIVILEGES ON *.* TO 'artegrafico'@'%' | +--------------------------------------------------+ |
Comprobamos que el usuario está dado de alta en la tabla mysql_user
1 |
mysql> SELECT user, authentication_string, plugin, host FROM mysql.user; |
1 2 3 4 5 6 7 8 9 |
+------------------+-------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | | auth_socket | localhost | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | debian-sys-maint | *2269AA788D05977B0905064E396E6042264E2BC9 | mysql_native_password | localhost | | artegrafico | *329266DA3709F5319434F29E63ECC69696FE1A51 | mysql_native_password | % | +------------------+-------------------------------------------+-----------------------+-----------+ |
Salimos (exit) y comprobamos que loguea correctamente
1 |
$ mysql -u artegrafico -p |
1 2 3 4 |
Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 8 Server version: 5.7.24-0ubuntu0.18.04.1 (Ubuntu) |