Búsqueda de sitios web

Cómo instalar y asegurar phpMyAdmin con Nginx en un servidor Ubuntu 14.04


Introducción

Los sistemas de administración de bases de datos relacionales como MySQL son necesarios para una parte importante de los sitios web y las aplicaciones. Sin embargo, no todos los usuarios se sienten cómodos administrando sus datos desde la línea de comandos.

Para solucionar este problema, se creó un proyecto llamado phpMyAdmin con el fin de ofrecer una alternativa en forma de una interfaz de administración basada en web. En esta guía, demostraremos cómo instalar y asegurar una configuración de phpMyAdmin en un servidor Ubuntu 14.04. Construiremos esta configuración sobre el servidor web Nginx, que tiene un buen perfil de rendimiento y puede manejar cargas pesadas mejor que otros servidores web.

requisitos previos

Antes de comenzar, hay algunos requisitos que deben cumplirse.

Para asegurarse de tener una base sólida sobre la que construir este sistema, debe consultar nuestra guía de configuración inicial del servidor para Ubuntu 14.04. Entre otras cosas, esto lo guiará a través de la configuración de un usuario no root con acceso sudo para comandos administrativos.

El segundo requisito previo que se debe cumplir para comenzar con esta guía es instalar una pila LEMP (Linux, Nginx, MySQL y PHP) en su servidor Ubuntu 14.04. Esta es la plataforma que usaremos para servir nuestra interfaz phpMyAdmin (MySQL también es el software de administración de bases de datos que deseamos administrar). Si aún no tiene una instalación de LEMP en su servidor, siga nuestro tutorial sobre cómo instalar LEMP en Ubuntu 14.04.

Cuando su servidor esté en un estado de funcionamiento adecuado después de seguir estas guías, puede continuar con el resto de esta página.

Paso uno: instalar phpMyAdmin

Con nuestra plataforma LEMP ya instalada, podemos comenzar de inmediato con la instalación del software phpMyAdmin. Está disponible en los repositorios predeterminados de Ubuntu, por lo que el proceso de instalación es simple.

Primero, actualice el índice de paquetes local del servidor para asegurarse de que tenga un nuevo conjunto de referencias a los paquetes disponibles. Luego, podemos usar las herramientas de empaquetado apt para extraer el software de los repositorios e instalarlo en nuestro sistema:

sudo apt-get update
sudo apt-get install phpmyadmin

Durante la instalación, se le pedirá cierta información. Le preguntará qué servidor web desea que el software configure automáticamente. Dado que Nginx, el servidor web que estamos utilizando, no es una de las opciones disponibles, puede presionar TAB para omitir este mensaje.

El siguiente mensaje le preguntará si desea que dbconfig-common configure una base de datos para que la use phpmyadmin. Seleccione \Sí” para continuar.

Deberá ingresar la contraseña administrativa de la base de datos que configuró durante la instalación de MySQL para permitir estos cambios. Luego, se le pedirá que seleccione y confirme una contraseña para una nueva base de datos que contendrá los propios datos de phpMyAdmin.

La instalación ahora se completará. Para que el servidor web Nginx encuentre y sirva los archivos phpMyAdmin correctamente, solo necesitamos crear un enlace simbólico desde los archivos de instalación a nuestro directorio raíz de documentos Nginx escribiendo esto:

sudo ln -s /usr/share/phpmyadmin /usr/share/nginx/html

Un elemento final que debemos abordar es habilitar el módulo PHP mcrypt, en el que se basa phpMyAdmin. Esto se instaló con phpMyAdmin, por lo que solo necesitamos activarlo y reiniciar nuestro procesador PHP:

sudo php5enmod mcrypt
sudo service php5-fpm restart

Con eso, nuestra instalación de phpMyAdmin ya está operativa. Para acceder a la interfaz, vaya al nombre de dominio de su servidor o dirección IP pública seguido de /phpmyadmin, en su navegador web:

http://server_domain_or_IP/phpmyadmin

Para iniciar sesión, use un par de nombre de usuario/contraseña de un usuario de MySQL válido. El usuario root y la contraseña administrativa de MySQL son una buena opción para comenzar. A continuación, podrá acceder a la interfaz administrativa:

Haga clic para familiarizarse con la interfaz. En la siguiente sección, tomaremos medidas para asegurar nuestra nueva interfaz.

Paso dos: asegure su instancia de phpMyAdmin

La instancia de phpMyAdmin instalada en nuestro servidor debería ser completamente utilizable en este punto. Sin embargo, al instalar una interfaz web, hemos expuesto nuestro sistema MySQL al mundo exterior.

Incluso con la pantalla de autenticación incluida, esto es un gran problema. Debido a la popularidad de phpMyAdmin combinada con la gran cantidad de datos a los que brinda acceso, instalaciones como estas son objetivos comunes para los atacantes.

Implementaremos dos estrategias simples para disminuir las posibilidades de que nuestra instalación sea atacada y comprometida. Cambiaremos la ubicación de la interfaz de /phpmyadmin a otra para eludir algunos de los intentos automatizados de fuerza bruta de los bots. También crearemos una puerta de enlace de autenticación adicional a nivel de servidor web que se debe pasar incluso antes de llegar a la pantalla de inicio de sesión de phpMyAdmin.

Cambiar la ubicación de acceso de la aplicación

Para que nuestro servidor web Nginx encuentre y sirva nuestros archivos phpMyAdmin, creamos un enlace simbólico desde el directorio phpMyAdmin a la raíz de nuestro documento en un paso anterior.

Para cambiar la URL desde donde se puede acceder a nuestra interfaz de phpMyAdmin, simplemente debemos renombrar el enlace simbólico. Vaya al directorio raíz del documento de Nginx para tener una mejor idea de lo que estamos haciendo:

cd /usr/share/nginx/html
ls -l
total 8
-rw-r--r-- 1 root root 537 Mar  4 06:46 50x.html
-rw-r--r-- 1 root root 612 Mar  4 06:46 index.html
lrwxrwxrwx 1 root root  21 Aug  6 10:50 phpmyadmin -> /usr/share/phpmyadmin

Como puede ver, tenemos un enlace simbólico llamado phpmyadmin en este directorio. Podemos cambiar el nombre de este enlace por el que queramos. Esto cambiará la ubicación donde se puede acceder a phpMyAdmin desde un navegador, lo que puede ayudar a ocultar el punto de acceso de los bots codificados.

Elija un nombre que no indique el propósito de la ubicación. En esta guía, nombraremos nuestra ubicación de acceso /nothingtosee. Para lograr esto, simplemente cambiaremos el nombre del enlace:

sudo mv phpmyadmin nothingtosee
ls -l
total 8
-rw-r--r-- 1 root root 537 Mar  4 06:46 50x.html
-rw-r--r-- 1 root root 612 Mar  4 06:46 index.html
lrwxrwxrwx 1 root root  21 Aug  6 10:50 nothingtosee -> /usr/share/phpmyadmin

Ahora, si va a la ubicación anterior de su instalación de phpMyAdmin, obtendrá un error 404:

http://server_domain_or_IP/phpmyadmin

Sin embargo, su interfaz phpMyAdmin estará disponible en la nueva ubicación que seleccionamos:

http://server_domain_or_IP/nothingtosee

Configuración de una puerta de autenticación del servidor web

La siguiente característica que queríamos para nuestra instalación era un aviso de autenticación que el usuario tendría que pasar antes de ver la pantalla de inicio de sesión de phpMyAdmin.

Afortunadamente, la mayoría de los servidores web, incluido Nginx, brindan esta capacidad de forma nativa. Solo necesitaremos modificar nuestro archivo de configuración de Nginx con los detalles.

Antes de hacer esto, crearemos un archivo de contraseña que almacenará nuestras credenciales de autenticación. Nginx requiere que las contraseñas se cifren con la función crypt(). La suite OpenSSL, que ya debería estar instalada en su servidor, incluye esta funcionalidad.

Para crear una contraseña cifrada, escriba:

openssl passwd

Se le pedirá que ingrese y confirme la contraseña que desea usar. La utilidad luego mostrará una versión encriptada de la contraseña que se verá así:

O5az.RSPzd.HE

Copie este valor, ya que deberá pegarlo en el archivo de autenticación que crearemos.

Ahora, cree un archivo de autenticación. Llamaremos a este archivo pma_pass y lo colocaremos en el directorio de configuración de Nginx:

sudo nano /etc/nginx/pma_pass

Dentro de este archivo, simplemente necesita especificar el nombre de usuario que le gustaría usar, seguido de dos puntos (:), seguido de la versión cifrada de su contraseña que recibió de la utilidad openssl passwd.

Vamos a nombrar a nuestro usuario demo, pero debe elegir un nombre de usuario diferente. El archivo de esta guía se ve así:

demo:O5az.RSPzd.HE

Guarde y cierre el archivo cuando haya terminado.

Ahora, estamos listos para modificar nuestro archivo de configuración de Nginx. Abra este archivo en su editor de texto para comenzar:

sudo nano /etc/nginx/sites-available/default

Dentro de este archivo, necesitamos agregar una nueva sección de ubicación. Esto apuntará a la ubicación que elegimos para nuestra interfaz phpMyAdmin (seleccionamos /nothingtosee en esta guía).

Cree esta sección dentro del bloque server, pero fuera de cualquier otro bloque. Pondremos nuestro nuevo bloque de ubicación debajo del bloque ubicación / en nuestro ejemplo:

server {
    . . .

    location / {
        try_files $uri $uri/ =404;
    }

    location /nothingtosee {
    }

    . . .
}

Dentro de este bloque, debemos establecer el valor de una directiva llamada auth_basic en un mensaje de autenticación que nuestro indicador mostrará a los usuarios. No queremos indicar a los usuarios no autenticados lo que estamos protegiendo, así que no des detalles específicos. Solo usaremos \Inicio de sesión de administrador” en nuestro ejemplo.

Luego necesitamos usar una directiva llamada auth_basic_user_file para apuntar nuestro servidor web al archivo de autenticación que creamos. Nginx solicitará al usuario los detalles de autenticación y verificará que los valores ingresados coincidan con lo que encuentra en el archivo especificado.

Una vez que hayamos terminado, el archivo debería verse así:

server {
    . . .

    location / {
        try_files $uri $uri/ =404;
    }

    location /nothingtosee {
        auth_basic "Admin Login";
        auth_basic_user_file /etc/nginx/pma_pass;
    }

    . . .
}

Guarde y cierre el archivo cuando haya terminado.

Para implementar nuestra nueva puerta de autenticación, debemos reiniciar el servidor web:

sudo service nginx restart

Ahora, si visitamos nuestra ubicación de phpMyAdmin en nuestro navegador web (es posible que deba borrar su caché o usar una sesión de navegador diferente si ya ha estado usando phpMyAdmin), se le debe solicitar el nombre de usuario y la contraseña que agregó al pma_pass:

http://server_domain_or_IP/nothingtosee

Una vez que ingrese sus credenciales, será llevado a la página normal de inicio de sesión de phpMyAdmin. Esta capa adicional de protección ayudará a mantener sus registros de MySQL libres de intentos de autenticación además del beneficio de seguridad adicional.

Conclusión

Ahora puede administrar sus bases de datos MySQL desde una interfaz web razonablemente segura. Esta interfaz de usuario expone la mayor parte de la funcionalidad que está disponible desde el símbolo del sistema de MySQL. Puede ver bases de datos y esquemas, ejecutar consultas y crear nuevos conjuntos de datos y estructuras.