Búsqueda de sitios web

Instalar MySQL: Cómo configurar conexiones remotas y seguras


Introducción

MySQL es un sistema de gestión de bases de datos SQL de código abierto desarrollado por Oracle Corporation.

SQL significa lenguaje de consulta estructurado, que es un lenguaje estandarizado utilizado para acceder a bases de datos. La versión actual del lenguaje sigue el estándar SQL:2003.

MySQL es un sistema de gestión de bases de datos relacional (RDBMS). Esto significa que la base de datos almacena datos en tablas separadas, con estructuras organizadas en archivos físicos optimizados para la velocidad. Los usuarios configuran reglas que rigen las relaciones entre diferentes campos de datos, utilizando SQL.

En este tutorial hablaremos sobre cómo instalar MySQL y configurar una conexión remota segura en un entorno CentOS 7.

Instalar MySQL

La última versión estable de MySQL es 5.7, por lo que esa es la versión que instalaremos y configuraremos en este tutorial.

El paquete es lo primero que deberá agregar y está disponible en el repositorio de MySQL. Ejecute el siguiente comando para comenzar:

yum localinstall -y https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm

Este comando agregará el repositorio MySQL que luego se puede usar para instalar el sistema de base de datos:

yum install -y mysql-community-server

Al final del proceso de instalación, inicie MySQL usando

systemd

herramientas :

systemctl start mysqld

Verifique el estado de MySQL:

mysqld.service - MySQL Server
 Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
 Active: active (running) ...

MySQL escucha en el puerto 3306, como puede ver ejecutando el

netstat

herramienta :

netstat -plntu | grep mysql
tcp6 0 0 :::3306 :::* LISTEN 8776/mysqld

configuración de mysql

En el inicio inicial del servidor MySQL, una cuenta de superusuario (

) se crea con una contraseña predeterminada establecida y se almacena en el archivo de registro de errores. Revele esta contraseña ejecutando el siguiente comando:



grep 'temporary password' /var/log/mysqld.log

La salida es:

[Note] A temporary password is generated for root@localhost: en>_g6syXIXq

El primer paso es cambiar esta contraseña de root.

Inicie sesión en el shell MySQL:

mysql -u root -p

Ingrese la contraseña generada automáticamente que se reveló con el comando anterior.

A continuación, cambie la contraseña con la siguiente consulta:

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'RootStrongPassword1!';

Eliminar privilegios y salir:

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

mysql> EXIT;
Bye

Habilitar SSL para MySQL

Por defecto, MySQL tiene sus propios certificados SSL, almacenados en

/var/lib/mysql

. A los efectos de este tutorial, estos certificados son suficientemente buenos.

Nota: en producción, utilice siempre certificados más seguros y "personales".

Verifique SSL desde el shell MySQL.

mysql -u root -p

mysql> SHOW GLOBAL VARIABLES LIKE '%ssl%';
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| have_openssl  | YES             |
| have_ssl      | YES             |
| ssl_ca        | ca.pem          |
| ssl_capath    |                 |
| ssl_cert      | server-cert.pem |
| ssl_cipher    |                 |
| ssl_crl       |                 |
| ssl_crlpath   |                 |
| ssl_key       | server-key.pem  |
+---------------+-----------------+
9 rows in set (0.01 sec)

Verifique el estado de SSL:

mysql> STATUS;
--------------
mysql Ver 14.14 Distrib 5.7.18, for Linux (x86_64) using EditLine wrapper

Connection id: 4
Current database: 
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 5.7.18 MySQL Community Server (GPL)
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: latin1
Db characterset: latin1
Client characterset: utf8
Conn. characterset: utf8
UNIX socket: /var/lib/mysql/mysql.sock
Uptime: 27 min 25 sec

Threads: 1 Questions: 12 Slow queries: 0 Opens: 113 Flush tables: 1 Open tables: 106 Queries per second avg: 0.007
--------------

Como puede ver, SSL no está en uso. Entonces, el siguiente paso es habilitarlo.

Habilite SSL en el archivo de configuración de MySQL

Edite el archivo de configuración de MySQL:

$EDITOR /etc/my.cnf

En el

[mysqld]

sección, pegue el siguiente contenido:

ssl-ca=/var/lib/mysql/ca.pem
ssl-cert=/var/lib/mysql/server-cert.pem
ssl-key=/var/lib/mysql/server-key.pem

Guarde, salga y reinicie el servicio MySQL.

systemctl restart mysqld

Verifique nuevamente el estado de SSL en el shell MySQL.

mysql -u root -p

mysql> STATUS;
mysql Ver 14.14 Distrib 5.7.18, for Linux (x86_64) using EditLine wrapper

Connection id: 5
Current database: 
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 5.7.18 MySQL Community Server (GPL)
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: latin1
Db characterset: latin1
Client characterset: utf8
Conn. characterset: utf8
UNIX socket: /var/lib/mysql/mysql.sock
Uptime: 1 min 2 sec

Threads: 1 Questions: 6 Slow queries: 0 Opens: 105 Flush tables: 1 Open tables: 98 Queries per second avg: 0.096

Habilitar clientes

SSL todavía no está en uso en este momento. Esto se debe a que necesitamos forzar todas las conexiones de nuestros clientes a través de SSL. Entonces, salga del shell MySQL y edite el

my.cnf

archivo nuevamente.

$EDITOR /etc/my.cnf

Allí, al final del archivo, pega el siguiente contenido:

[client]
ssl-ca=/var/lib/mysql/ca.pem
ssl-cert=/var/lib/mysql/client-cert.pem
ssl-key=/var/lib/mysql/client-key.pem

Guarde, salga y reinicie MySQL una vez más:

systemctl restart mysqld

Verifique el estado de MySQL como se explicó anteriormente:

mysql> STATUS
--------------
mysql Ver 14.14 Distrib 5.7.18, for Linux (x86_64) using EditLine wrapper

Connection id: 3
Current database: 
Current user: root@localhost
SSL: Cipher in use is DHE-RSA-AES256-SHA
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 5.7.18 MySQL Community Server (GPL)
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: latin1
Db characterset: latin1
Client characterset: utf8
Conn. characterset: utf8
UNIX socket: /var/lib/mysql/mysql.sock
Uptime: 1 min 32 sec

Threads: 1 Questions: 6 Slow queries: 0 Opens: 105 Flush tables: 1 Open tables: 98 Queries per second avg: 0.065

SSL ahora está habilitado y las conexiones están protegidas a través de él.

Habilitar conexiones remotas

El último paso del tutorial es habilitar conexiones remotas. Como todo administrador de sistemas sabe, es fundamental permitir sólo clientes verificados.

Edite el archivo de configuración de MySQL:

$EDITOR /etc/my.cnf

Al final de

[mysqld]

sección pegue las siguientes líneas:

bind-address = *
require_secure_transport = ON

Guarde, salga y reinicie MySQL.

systemctl restart mysqld

Crear un nuevo usuario para conexiones remotas

En este punto, SSL y las conexiones remotas están habilitadas. Lo siguiente que debe hacer es crear un nuevo usuario de MySQL:

mysql -u root -p

Crear un nuevo usuario:

mysql> CREATE USER 'gmolica'@'%' IDENTIFIED BY 'Unixmen1!' REQUIRE X509;
mysql> GRANT ALL PRIVILEGES ON *.* TO 'gmolica'@'%' IDENTIFIED BY 'Unixmen1!' REQUIRE X509;
mysql> FLUSH PRIVILEGES;
mysql> EXIT;

Conclusión

Con el paso anterior concluimos la configuración de MySQL. Ahora es posible iniciar sesión en el sistema de base de datos de forma remota, utilizando las credenciales creadas. Por supuesto, el cliente debe tener copias de los certificados para poder conectarse a través de SSL.