Seguridad en nuestras Bases de Datos, Usuarios nuevos y permisos otorgados

Una costumbre que casi se ha generalizado entre los webmasters, administradores o usuarios es utilizar en cada una de las Bases de Datos (BD) que tienen en sus servidores la cuenta de root de MYSQL para trabajar directamente con sus Content Manager System (CMS) como pueden ser Joomla o WordPress etc. Esta mala costumbre no lo niego, puede que resulte cómoda de usar ya que que solo tendríamos un usuario y una contraseña que recordar a la hora de configurar las aplicaciones pero… A pesar de ser una costumbre bastante cómoda esta no deja de ser una de las más peligrosas en cuanto a la seguridad ya que; con solo acceder a un archivo de configuración de un sitio, un usuario con conocimientos básicos y muy malas intenciones sería capaz de no solo alterar/destruir la información de ese sitio sino de todas las BD existentes en el servidor ocasionando un daño enorme. Una de las maneras mas prácticas y saludables es crear usuarios para cada BD que vayamos a utilizar y darle privilegios de root en la BD así, en caso de que alguien consiga la password de ese usuario, las demás BD estén “protegidas”.

Sobre este tema ya KZKG^Gaara habló en su articulo en el blog DesdeLinux (un blog temático sobre software libre que le recomiendo a todos los que tengan Internet) pero como sabemos que la mayoría de los usuarios de GUTL no poseen el preciado recurso de la Internet, decidí traer los pasos del artículo de DesdeLinux pero basado en mi propio problema:   En cada servidor pueden que estén alojadas varias BD para distintas cosas pues bien yo tengo una aplicación que utiliza 3 BD y no lo voy a negar es un juego llamado “World of Warcraft” (WoW) que no es mas que un MMORPG que utiliza una varias BD para trabajar, la BD de identificación (realmd), una BD para las cosas del juego como son los objetos y demás cosas (trinity) y una para almacenar los datos de los personajes de los jugadores (characters). Voy a mostrarles, siguiendo los pasos de KZKG^Gaara (el autor del artículo de Desdelinux) como hice para “aislar y proteger” las demás BD de mis servidor de las del WoW:

Paso 1: Obtener todos los privilegios del servidor

Para obtener los todos los privilegios en el servido usaremos la cuenta de root o sea nos logueamos en el servidor MySQL como root. Para esto yo accedí a el a través de la consola usando el comando mysql -u root -p luego tecleamos la password del root de mysql y nos queda un prompt así:


Paso 2: Crear los nuevos usuarios

Para esto existen comandos de consola (el que lo quiera hacer a través de aplicaciones visuales como PHPMyAdmin lo puede hacer) yo lo hice desde consola porque como son cosas sencillas se pueden hacer desde ahi lo que utulice fue esto:

CREATE USER 'nombreDeUsuario'@'direccionServidorMysql' IDENTIFIED BY 'passwordUsuario';

Ojo con esto porque en Mysql todas las instrucciones terminan en punto y coma (;)

 

Paso 3: Dar privilegios de root al usuario en las BD donde trabajara y guardar los cambios

El proceso de orotgamiento de los privilegios al usuario recien creado se logra con el comando:

GRANT ALL PRIVILEGES ON nombreBD.* TO 'nombreDeUsuario'@'direccionServidorMySQL' WITH GRANT OPTION;

Como el WoW trabaja con 3 Bases de Datos yo tuve que darle permiso al usuario en las 3 por eso me queda así:

 

 

Luego de hacer estos pasos nuestras BD estarían a salvo pero como es lógico si modificaste el acceso a la BD también tienes que modificar la forma en que te conectas a la aplicación así que por ser esta tuve que modificar los script de iniciación con los valores del nuevo usuario:

 

 

¿A que es una buena opción eh?

 

Fuentes:

http://blog.desdelinux.net

Manual de usuario de MySQL

 

¿Te resultó interesante? Compártelo ...



Hyuuga_Neji

Publicado por Hyuuga_Neji

http://desdeabreus.cubava.cu » Facebook » Twitter » Instagram » Forma parte de GUTL desde el 6 diciembre, 2011. Administrador de Red por profesion y Editor de imagenes por hobby, Usuario empedernido de GNU/Linux amante de escritorios ligeros y franquicias de Blizzard (Vicio heredado de las andanzas por Windows).

Este artículo tiene 7 comentarios

  1. Hablando de MySQL y ya que tengo una de mis aplicaciones que se encuentra hosteada en uno de los nodos utilizan (por desgracia) MySQL como DBMS, en Debian Testing se encuentra MySQL Workbench una herramienta gráfica para la gestión de DB en MySQL. Todo lo anteriormente descrito se puede hacer con click derecho y asignar tal permiso a tal DB. No es por menospreciar el artículo de Neji(tb juego WoW, tb uso Linux, tb uso MySQL, pero pa django) pero siempre hay su troll(no precisamente de los Darkspear) que va a venir a decir que todo se hace por consola, que el EMS, que el Navicat y esas boberías.

    • Yo mismo uso PHPMyAdmin para una gran cantidad de cosas pero por ejemplo esas imagenes fueron conectado por SSH por eso lo de consola y deje explicado que el que quiera puede hacer esto con aplicaciones visuales

  2. Neji mira lo que encontre ayer cuando iba en mi submarino navegando.

    ¿Olvidaste o perdiste la contraseña del usuario ‘root’ de MySQL?, no hay problema, solo sigue estás sencillas instrucciones y podrás establecer una nueva. Claro siempre y cuando tengas acceso al usuario ‘root’ de Linux.

    Detener el servidor

    #> service mysqld stop
    o
    #> /etc/rc.d/init.d/mysqld stop

    Iniciar en modo FULL o abierto

    #> mysqld_safe –skip-grant-tables –skip-networking&

    –skip-grant-tables esta opción causa que el servidor no use el sistema de privilegios lo que le da acceso ilimitado a todas las bases de datos a todos los usuarios de la base de datos.

    NOTA: Si MySQL fue configurado y compilado con la opción ‘–disable-grant-options’ entonces lo anterior no funcionará y no hay mucho que se pueda hacer entonces y no se podrá cambiar la contraseña, aunque en la práctica realmente esta opción casi no se usa.

    –skip-networking deja de escuchar (LISTEN) conexiones TCP/IP provenientes de la red, es decir MySQL trabajaría en un ambiente totalmente local.

    Iniciar el monitor

    #>mysql -u root

    Como no hay sistema de privilegios en este momento, no se preguntara por la contraseña.

    Usamos la base de datos del sistema mysql

    mysql> use mysql;

    Actualizamos el campo que cambiará la contraseña de ‘root’

    mysql> UPDATE user SET password=PASSWORD(‘nuevo_pass’) WHERE user=’root’;
    Query OK, 1 rows affected (0.07 sec)
    Rows matched: 1 Changed: 1 Warnings: 0

    mysql> exit
    #>

    Reiniciar el servidor y listo!!!

    #> service mysqld restart

    La siguiente vez que entrés al monitor (mysql -u root -p) usa la nueva clave o contraseña.

    • Bufff me faltaba lo mas importante. :’-( Esta es la referencia.

      Copyright 2005-2012 Sergio González Durán
      Se concede permiso para copiar, distribuir y/o modificar este documento siempre y cuando se cite al autor y la fuente de linuxtotal.com.mx y según los términos de la GNU Free Documentation License, Versión 1.2 o cualquiera posterior publicada por la Free Software Foundation.
      autor: sergio.gonzalez.duran@gmail.com

    • Esta claro que puedes hacer muchas cosas como root del servidor pero… lo que dije es que si alguien te toma los archivos de configuración de una BD esta es una forma de «intentar proteger» las otras BD

Los comentarios están cerrados.