sql >> Base de Datos >  >> RDS >> Mysql

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, es inseguro en su configuración predeterminada y asegurarlo es una de las tareas esenciales en la administración general de bases de datos.

Esto contribuirá a fortalecer y aumentar la seguridad general del servidor Linux, ya que los atacantes siempre analizan las vulnerabilidades en cualquier parte de un sistema, y ​​las bases de datos han sido áreas clave en el pasado. 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 MySQL/MariaDB útiles mejores prácticas de seguridad para Linux.

1. Instalación segura de MySQL

Este es el primer paso recomendado después de instalar el servidor MySQL, para asegurar el servidor de la base de datos. Este script facilita la mejora de la seguridad de su servidor MySQL al pedirle que:

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

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

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

Esta configuración restringirá el acceso desde máquinas remotas, le dice al servidor MySQL que solo acepte conexiones desde el host local. Puede establecerlo 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 debajo de [mysqld] sección.

bind-address = 127.0.0.1

3. Deshabilitar ARCHIVO LOCAL en MySQL

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

local-infile=0

4. Cambiar el puerto predeterminado de MYSQL

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

Port=5000

5. Habilitar el registro de MySQL

Los registros son una de las mejores formas de comprender lo que sucede en un servidor; en caso de ataques, 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 debajo de [mysqld] sección.

log=/var/log/mysql.log

6. Establezca el permiso apropiado en los archivos MySQL

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

# chmod 644 /etc/my.cnf

7. Eliminar el historial de shell de MySQL

Todos los comandos que ejecuta en MySQL Shell 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 escritos 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 sabe, todos los comandos que escribe en la terminal se almacenan en un archivo de historial, según el shell que esté utilizando (por ejemplo, ~/.bash_history para bash). Un atacante que logre obtener acceso a este archivo de historial puede ver fácilmente las contraseñas registradas allí.

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

# mysql -u root -ppassword_

Cuando revise la última sección del archivo de 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 '[email protected]%!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 administren ninguna base de datos de aplicaciones en el servidor.

10. Usar 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 asegurar el almacenamiento de información confidencial, todos 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 regularmente

Esta es una pieza común de información/aplicación/consejo de seguridad del sistema. La frecuencia con la que haga esto dependerá completamente de su política de seguridad interna. Sin embargo, puede evitar que los "intrusos" 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 regularmente

Se recomienda encarecidamente actualizar los paquetes mysql/mariadb con regularidad para mantenerse al día con las actualizaciones de seguridad y las 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, siempre reinicie el servicio.

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

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