Búsqueda de sitios web

12 mejores prácticas de seguridad de MySQL/MariaDB para Linux


MySQL es el sistema de base de datos de código abierto más popular del mundo y MariaDB (una bifurcación de MySQL) es el sistema de base de datos de código abierto de más rápido crecimiento en el mundo. Después de instalar el servidor MySQL, su configuración predeterminada es insegura y protegerlo es una de las tareas esenciales en la administración general de bases de datos.

Lea también: Aprenda MySQL/MariaDB para principiantes – Parte 1

Esto contribuirá a reforzar y mejorar la seguridad general de los servidores Linux, ya que los atacantes siempre escanean las vulnerabilidades en cualquier parte de un sistema, y las bases de datos han sido en el pasado áreas clave de ataque. Un ejemplo común es la fuerza bruta de la contraseña de root para la base de datos MySQL.

En esta guía, explicaremos las mejores prácticas de seguridad útiles de MySQL/MariaDB para Linux.

1. Instalación segura de MySQL

Este es el primer paso recomendado después de instalar el servidor MySQL para proteger el servidor de la base de datos. Este script facilita la mejora de la seguridad de su servidor MySQL pidiéndole que:

  • establezca una contraseña para la cuenta raíz, si no la configuró durante la instalación.
  • deshabilite el inicio de sesión remoto del usuario raíz eliminando las cuentas raíz a las que se puede acceder desde fuera del host local.
  • elimine las cuentas de usuarios anónimos y pruebe la base de datos a la que, de forma predeterminada, pueden acceder todos los usuarios, incluso los anónimos.
mysql_secure_installation

Después de ejecutarlo, establezca la contraseña de root y responda la serie de preguntas ingresando [Sí/Y] y presione [Entrar].

2. Vincular el servidor de base de datos a la dirección de bucle invertido

Esta configuración restringirá el acceso desde máquinas remotas y le indica al servidor MySQL que solo acepte conexiones desde el host local. Puede configurarlo en el archivo de configuración principal.

vi /etc/my.cnf	                   [RHEL/CentOS]	
vi /etc/mysql/my.conf                    [Debian/Ubuntu] 
OR
vi /etc/mysql/mysql.conf.d/mysqld.cnf    [Debian/Ubuntu] 

Agregue la siguiente línea a continuación en la sección [mysqld].

bind-address = 127.0.0.1

3. Deshabilite el INFILE LOCAL en MySQL

Como parte del refuerzo de la seguridad, debe deshabilitar local_infile para evitar el acceso al sistema de archivos subyacente desde MySQL utilizando la siguiente directiva en la sección [mysqld].

local-infile=0

4. Cambiar el puerto predeterminado de MYSQL

La variable Puerto establece el número de puerto MySQL que se utilizará para escuchar en las conexiones TCP/IP. El número de puerto predeterminado es 3306 pero puede cambiarlo en la sección [mysqld] como se muestra.

Port=5000

5. Habilite el registro de MySQL

Los registros son una de las mejores formas de comprender lo que sucede en un servidor; en caso de cualquier ataque, puede ver fácilmente cualquier actividad relacionada con la intrusión en los archivos de registro. Puede habilitar el registro de MySQL agregando la siguiente variable en la sección [mysqld].

log=/var/log/mysql.log

6. Establecer el permiso adecuado en archivos MySQL

Asegúrese de tener establecidos los permisos adecuados para todos los archivos y directorios de datos del servidor MySQL. El archivo /etc/my.conf solo debe poder escribirse en el directorio raíz. Esto impide que otros usuarios cambien las configuraciones del servidor de bases de datos.

chmod 644 /etc/my.cnf

7. Eliminar el historial del Shell MySQL

Todos los comandos que ejecuta en el shell MySQL son almacenados por el cliente mysql en un archivo de historial: ~/.mysql_history. Esto puede ser peligroso, porque para cualquier cuenta de usuario que cree, todos los nombres de usuario y contraseñas ingresados en el shell se registrarán en el archivo de historial.

cat /dev/null > ~/.mysql_history

8. No ejecute comandos MySQL desde la línea de comandos

Como ya sabes, todos los comandos que escribes en la terminal se almacenan en un archivo de historial, dependiendo del shell que estés usando (por ejemplo ~/.bash_history para bash). Un atacante que consiga acceder a este archivo histórico podrá ver fácilmente las contraseñas registradas allí.

No se recomienda escribir contraseñas en la línea de comando, algo como esto:

mysql -u root -ppassword_

Cuando revise la última sección del archivo del historial de comandos, verá la contraseña escrita arriba.

history 

La forma adecuada de conectar MySQL es.

mysql -u root -p
Enter password:

9. Definir usuarios de bases de datos específicos de la aplicación

Para cada aplicación que se ejecuta en el servidor, solo dé acceso a un usuario que esté a cargo de una base de datos para una aplicación determinada. Por ejemplo, si tiene un sitio de WordPress, cree un usuario específico para la base de datos del sitio de WordPress de la siguiente manera.

mysql -u root -p
MariaDB [(none)]> CREATE DATABASE osclass_db;
MariaDB [(none)]> CREATE USER 'osclassdmin'@'localhost' IDENTIFIED BY 'osclass@dmin%!2';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON osclass_db.* TO 'osclassdmin'@'localhost';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> exit

y recuerde eliminar siempre las cuentas de usuario que ya no administran ninguna base de datos de aplicaciones en el servidor.

10. Utilice bibliotecas y complementos de seguridad adicionales

MySQL incluye una serie de complementos de seguridad para: autenticar los intentos de los clientes de conectarse al servidor mysql, validar contraseñas y proteger el almacenamiento de información confidencial, todos los cuales están disponibles en la versión gratuita.

Puede encontrar más aquí: https://dev.mysql.com/doc/refman/5.7/en/security-plugins.html

11. Cambie las contraseñas de MySQL con regularidad

Este es un consejo común de seguridad de información/aplicaciones/sistemas. La frecuencia con la que haga esto dependerá completamente de su política de seguridad interna. Sin embargo, puede evitar que los "fisgones" que podrían haber estado rastreando su actividad durante un largo período de tiempo obtengan acceso a su servidor MySQL.

MariaDB [(none)]> USE mysql;
MariaDB [(none)]> UPDATE user SET password=PASSWORD('YourPasswordHere') WHERE User='root' AND Host = 'localhost';
MariaDB [(none)]> FLUSH PRIVILEGES;

12. Actualice el paquete del servidor MySQL con regularidad

Se recomienda encarecidamente actualizar los paquetes mysql/mariadb periódicamente para mantenerse al día con las actualizaciones de seguridad y correcciones de errores desde el repositorio del proveedor. Normalmente los paquetes en los repositorios predeterminados del sistema operativo están desactualizados.

yum update
apt update

Después de realizar cualquier cambio en el servidor mysql/mariadb, reinicie siempre el servicio.

systemctl restart mariadb		#RHEL/CentOS
systemctl restart mysql		#Debian/Ubuntu

Lea también: 15 consejos útiles para optimizar y ajustar el rendimiento de MySQL/MariaDB

¡Eso es todo! Nos encantaría saber de usted a través del formulario de comentarios a continuación. Comparta con nosotros cualquier consejo de seguridad de MySQL/MariaDB que falte en la lista anterior.