Cuando se conecta a un servidor MySQL, debería utilizar una clave. La clave no se transmite en texto llano a través de la conexión. El tratamiento de las claves durante la conexión de un cliente ha sido mejorado en MySQL 4.1.1 para ser muy seguro. Si todavía está utilizando claves del tipo anterior a 4.1.1, el algoritmo de cifrado no es tan potente como el nuevo algoritmo; con un poco de esfuerzo un atacante inteligente que pueda interceptar el tráfico entre el cliente y el servidor podría romper la clave. (Consulte Sección 5.6.9, “Hashing de contraseñas en MySQL 4.1” para una explicación sobre los diferentes métodos de tratamiento de claves.) Si la conexión entre el cliente y el servidor pasa a través de una red no segura, debería utilizar un tunel SSH para cifrar la comunicación.
Toda la demás información se transmite como texto, y puede ser leida por cualquiera que pueda observar la conexión. Si esto le preocupa, utilice el protocolo comprimido para hacer que el tráfico sea mucho más difícil de descifrar. Para hacer la conexión aún más segura, debería utilizar SSH para conseguir una conexión TCP/IP cifrada entre el servidor MySQL y el cliente MySQL. Puede encontrar un cliente SSH Open Source enhttp://www.openssh.org/, y un cliente comercial en http://www.ssh.com/.
En MySQL 5.0, puede utilizar también el soporte interno de OpenSSL. Consulte Sección 5.7.7, “Usar conexiones seguras”.
Para convertir un sistema MySQL en seguro, debería considerar seriamente las siguientes sugerencias:
- Utilice claves para todos los usuarios MySQL. Un programa cliente no conoce necesariamente la identidad de la persona utilizándolo. Es común en las aplicaciones cliente/servidor que el usuario pueda especificar cualquier nombre de usuario al programa cliente. Por ejemplo, cualquiera puede utilizar el programa mysql para conectarse como cualquier otra persona, simplemente invocándolo de la siguiente manera:
mysql -u
cuandootro_usuario
nombre_bd
otro_usuario
no tiene clave. Si todos los usuarios tienen una clave, conectarse utilizando la cuenta de otro usuario se vuelve mucho más difícil.Para cambiar la clave de un usuario, utilice la sentenciaSET PASSWORD
. También es posible alterar la tablauser
en la base de datosmysql
directamente. Por ejemplo, para cambiar la clave de todas las cuentas MySQL que tienen por nombre de usuarioroot
, haga lo siguiente:shell> mysql -u rootmysql> UPDATE mysql.user SETPassword=PASSWORD('newpwd
')-> WHERE User='root';mysql> FLUSH PRIVILEGES; - Nunca ejecute el servidor MySQL con el usuario
root
de Unix. Esto es extremadamente peligroso porque cualquier usuario con el privilegioFILE
es capaz de crar ficheros comoroot
(por ejemplo,~root/.bashrc
). Para prevenir esto, mysqld rechaza ejecutarse comoroot
a menos que se utilice explícitamente la opción--user=root
.En vez de eso, mysqld puede (y debe) ser ejecutado mediante un usuario normal sin privilegios. Puede crear una cuenta de Unix específica llamadamysql
para hacelo todo aún más seguro. Utilice esta cuenta tan solo para administrar MySQL. Para ejecutar mysqld mediante un usuario de Unix diferente, añada la opciónuser
que especifica el nombre de usuario al grupo[mysqld]
del fichero de opciones/etc/my.cnf
o al fichero de opcionesmy.cnf
en el directorio de datos del servidor. Por ejemplo:[mysqld]user=mysqlEsto provoca que el servidor se inicie mediante el usuario designado, lo ejecute usted manualmente o mediantemysqld_safe o mysql.server. Para más detalles, consulte Sección A.3.2, “Cómo ejecutar MySQL como usuario normal”.Ejecutar mysqld como un usuario Unix diferente deroot
no significa que necesite cambiar el usuarioroot
de la tablauser
. Los usuarios de las cuentas MySQL no tienen nada que ver con los usuarios de las cuentas Unix. - No permita el uso de enlaces simbólicos a tablas. (Esto puede desactivarse con la opción
--skip-symbolic-links
.) Esto es especialmente importante si ejecuta mysqld comoroot
, porque cualquiera que tenga acceso de escritura al directorio de datos del servidor ¡podría entonces borrar cualquier fichero en el sistema!. ConsulteSección 7.6.1.2, “Utilización de enlaces simbólicos para tablas en Unix”. - Asegúrese de que el único usuario Unix con permisos de lectura o escritura en los directorios de la base de datos es el usuario que ejecuta mysqld.
- No otorgue los privilegios
PROCESS
oSUPER
a usuarios no-administrativos. La salida del de mysqladmin processlist muestra el texto de cualquier sentencia que se esté ejecutando, así que cualquier usuario al que se permita ejecutar ese comando puede ser capaz de ver si otro usuario ejecuta una sentenciaUPDATE user SET password=PASSWORD('not_secure')
.mysqld reserva una conexión extra para usuarios que tengan el privlegioSUPER
, así que un usuarioroot
puede conectarse y comprobar la actividad del servidor aún cuando todas las conexiones normales estén en uso.El privilegioSUPER
puede utilizarse para cerrar conexiones de cliente, cambiar el funcionamiento del servidor modificando el valor de variables del sistema, y controlar servidores de replicación. - No otorgue el privilegio
FILE
a usuarios no-administrativos. Cualquier usuario que posea este privilegio puede escribir un archivo en cualquier de lugar del sistema de ficheros con los privilegios del demonio mysqld. Para hacer esto un poco más seguro, los archivos generados conSELECT ... INTO OUTFILE
no sobreescriben archivos existentes, y pueden ser escritos por cualquiera.El privilegioFILE
puede también ser utilizado para leer cualquier archivos que sea legible por cualquiera o accesible para el usuario Unix que ejecuta el servidor. Con este privilegio, podría por ejemplo leer cualquier fichero e insertarlo en una tabla de la base de datos. Esto podría utilizarse, por ejemplo, utilizandoLOAD DATA
para cargar/etc/passwd
en una tabla, que podría ser mostrada después con unSELECT
. - Si no confía en sus DNS, podría utilizar números IP en vez de nombres en las tablas de permisos (tablas grant). En cualquier caso, debería ser muy cuidadoso en crear registros en las tablas de permiso utilizando nombres que contengan caracteres comodín.
- Si quiere restringir el número de conexiones permitidas para una misma cuenta, puede hacerlo estableciando la variable
max_user_connections
de mysqld. La sentenciaGRANT
también soporta opciones de control de recursos para limitar la extensión de uso de servidor permitido a una cuenta. Consulte Sección 13.5.1.3, “Sintaxis deGRANT
yREVOKE
”.
Fuente:enlace
No hay comentarios:
Publicar un comentario