10 septiembre 2010

Fortificación de MySQL - 3/3

Parte 1 de 3
Parte 2 de 3
Parte 3 de 3

Continuamos con la tercera y última entrada sobre fortificación de MySQL.

 14.- Comprobación de permisos de ficheros de registros, de configuración y archivos SSL: para que únicamente el usuario que ejecuta la base de datos tenga permisos de lectura y escritura. Estos ficheros se encuentran generalmente en /var/log/mysql/etc/mysql/my.cnf. Los archivos SSL son especificados en las variables: ssl_ca, ssl_cert, ssl_key
shell> ls -l /var/log/mysql
shell> ls -l /etc/mysql/my.cnf
mysql> show variables like "%ssl%";

15.-Actualizar tablas de privilegios mediante el uso de los scripts "mysql_upgrade" y "mysql_fix_privilege_tables" cuando se actualice la base de datos a una nueva versión.
shell> ls -l /var/log/mysql
shell> mysql_fix_privilege_tables --password=ecm2sux
This script updates all the mysql privilege tables to be usable by
the current version of MySQL
done

16.-Verificacar las contraseñas para que todas utilicen el nuevo sistema de hash y asegurar que no existen usuarios sin contraseña. El antiguo hash tenía una longitud de 16 caracteres y el nuevo de 42, por lo tanto la siguiente consulta no debería mostrar resultados:
mysql> select User, Password from mysql.user where length(password) < 41;
Otra opción es habilitar la variable "secure_auth", para deshabilitar directamente estos usuarios, para consultar el estado:
mysql> show variables like "secure_auth"
Los usuarios con contraseñas en blanco se pueden localizar con la consulta:
mysql> select User, Password from mysql.user where length(password) = 0 or password is null;

17.- Comprobación de los hosts permitidos para los usuarios  con el objetivo de que no existan usuarios que puedan realizar la conexión desde cualquier dirección IP. Todos aquellos usuarios que devuelva la siguiente consulta han de ser revisados:
mysql> select user from  mysql.user where host =  '%';

18.- Búsqueda de usuarios con privilegios especiales, que no deberían tener habilitados para usos normales. Los permisos a comprobar son: FILE, PROCESS, SUPER, SHUTDOWN, CREATE USER y RELOAD:
mysql> select user, host from mysql.user where File_priv = 'Y';
mysql> select user, host from mysql.user where Process_priv = 'Y';
mysql> select user, host from mysql.user where Super_priv = 'Y';
mysql> select user, host from mysql.user where Shutdown_priv = 'Y';
mysql> select user, host from mysql.user where Create_user_priv = 'Y';
mysql> select user, host from mysql.user where Reload_priv = 'Y';

19.- Deshabilitar la fusión (MERGE) de tablas que permite acceder a datos incluso si no hay permisos sobre ellas. Para llevar a cabo esta configuración se puede consultar el estado en la variable "have_merge_engine"  y para implantarlo, añadir el parámetro --skip-merge

20.- Deshabilitar el uso de enlaces simbólicos que pueden ser peligrosos especialmente si el usuario que ejecuta la base de datos es root y puede sobrescribir otros ficheros. Para aplicar la medida se define la variable "have_symlink" o el parámetro --skip-symbolic-links
[mysqld]
skip-symbolic-links=on


Referencias:

3 comments :

Miguel dijo...

gran serie de artículos. Enhorabuena.

Han dijo...

Muy útiles y muy buenos los 3 fasciculos!!
Gracias :)

Miguel dijo...

gran serie de artículos. Enhorabuena.