Hace un tiempo realizamos una serie sobre la migración a un VPS, léase servidor privado virtual, concretamente, al cloud de Clouding.io. En esos artículos tratamos sobre qué es un VPS, la instalación de un servidor LEMP en Ubuntu 18.04 y, por último, la migración de nuestro proyecto web a un nuevo VPS.
Recientemente, un usuario nos dejó un comentario preguntando si podíamos explicar la instalación de la herramienta phpMyAdmin en este entorno, y justo esa es la intención del siguiente texto.
Pero, antes de nada, ¿qué es phpMyAdmin?
Si no estás familiarizado con la consola de comandos o, directamente, prefieres los entornos gráficos, seguramente prefieras phpMyAdmin para administrar las bases de datos de MySQL cómodamente desde tu navegador web preferido.
phpMyAdmin es una herramienta de software gratuita escrita en PHP, diseñada para manejar la administración de MySQL a través de la Web.
phpMyAdmin admite una amplia gama de operaciones en MySQL y MariaDB. Las operaciones de uso frecuente (gestión de bases de datos, tablas, columnas, relaciones, índices, usuarios, permisos, etc.) se pueden realizar a través de la interfaz de usuario.
Yo no la suelo instalar, pero sé que muchos usuarios y usuarias sí lo hacen. Además de su instalación sobre un sistema con Ubuntu 18.04, veremos cómo asegurar la herramienta y así evitar más de un susto.
Requisitos previos
La instalación de la herramienta será sobre un sistema GNU/Linux con la famosa distribución sudafricana Ubuntu, en su última versión estable a fecha de este artículo, que es la 18.04. Además, si hemos seguido el orden de los artículos mencionados en el primer párrafo, ya tendremos instalado el servidor LEMP.
Notas sobre la seguridad
Esta herramienta es muy utilizada, por lo que también es muy habitual que reciba ataques. Por este motivo, nunca debemos utilizarla en sistemas remotos a través de conexiones HTTP simples, sin SSL o TLS. Una buena alternativa es utilizar la iniciativa Lets’s Encrypt, de la que ya hemos hablado.
Instalación de phpMyAdmin
Su instalación es realmente sencilla desde los repositorios oficiales de Ubuntu:
sudo apt update sudo apt install phpmyadmin
Durante la instalación se nos formularán varias preguntas. Por ejemplo, qué servidor web deseamos utilizar de manera automática. Nginx no sale en la lista de opciones, así que presionaremos TAB (tabulador) y luego ENTER para omitir este aviso.
La siguiente pregunta será si deseamos que dbconfig-common configure una base de datos para que sea usada por phpMyAdmin. Seleccionamos «Sí» para continuar. Deberemos ingresar la contraseña del administrador de la base de datos, que configuramos durante la instalación de MariaDB, para permitir estos cambios.
Por último, nos pedirá que escojamos y confirmemos una contraseña para la aplicación de phpMyAdmin y su base de datos. Es importante utilizar una contraseña compleja. El usuario por defecto es «phpmyadmin«
Debemos tener en cuenta que el usuario ‘root‘ por defecto está deshabilitado para poder acceder desde el panel.
Una vez finalizada la instalación, para que podamos acceder vía web, debemos crear un enlace simbólico desde los ficheros de instalación al directorio raíz de Nginx:
sudo ln -s /usr/share/phpmyadmin /var/www/html
Esto último a gusto del consumidor.
Finalmente, habilitamos el módulo de PHP llamado «mcrypt«, imprescindible. Lo instalamos de la siguiente manera:
sudo phpenmod mcrypt sudo systemctl restart php7.2-fpm
Si la instalación nos da algún problema siempre podemos utilizar PECL para la instalación:
# Instalamos los paquetes y librerías necesarias sudo apt install php-dev libmcrypt-dev php-pear # Actualizamos el canal sudo pecl channel-update pecl.php.net # Instalamos mcrypt utilizando pecl sudo pecl install mcrypt-1.0.1 # Accedemos a la consola con permisos de root sudo -s # Añadimos mcrypt al fichero de configuración de PHP 7.2 echo "extension=mcrypt.so" >> /etc/php/7.2/cli/php.ini
Si todo ha ido bien tenemos que ver el módulo disponible:
$php -m | grep mcrypt mcrypt
Una vez hecho esto debemos acceder vía web sin problemas, escribiendo la URL correspondiente: http://nombre-del-servidor-o-ip/phpmyadmin
La imagen de acceso al producto es la siguiente:
Aquí debemos utilizar el usuario «phpmyadmin» que hemos comentado antes e indicar la contraseña que hayamos configurado. En cualquier caso, deberíamos poder utilizar cualquier usuario que tengamos configurado en el motor de base de datos.
A modo de prueba he creado un usuario llamado «operador» y tres bases de datos, como indico en esta entrada de mi blog personal:
Crear una base de datos MySQL en GNU Linux
Con el resultado:
MariaDB [(none)]> show databases; +--------------------------+ | Database | +--------------------------+ | colaboratorio_calidad | | colaboratorio_desarrollo | | colaboratorio_test | | information_schema | +--------------------------+ 4 rows in set (0.00 sec)
Si accedemos con este usuario vía phpMyAdmin, la vista sería la siguiente:
Asegurar phpMyAdmin, algunas ideas
Vamos a ver algunas medidas que podemos tener para intentar asegurar la instalación. Eso sí, siempre teniendo en cuenta que la seguridad al cien por cien no existe; la mejor forma de evitar un ataque es no tener nada que atacar, esto es, tener el sistema apagado.
Dehabilitar el acceso a root
En las últimas versiones de MariaDB (igual que MySQL) el acceso al usuario root vía web utilizando phpMyAdmin está deshablitado. Así que esta parte ya la tenemos lista.
Cambiar el nombre del directorio
La mayoría de ataques contra esta plataforma se realizan buscando el nombre del producto, así que la técnica más fácil para evitarlo es cambiar precisamente eso: el nombre.
Ya hemos dicho que, para acceder el servidor Nginx, debemos buscar la ruta «/var/www/html/phpmyadmin«, que es un enlace simbólico hacia «/usr/share/phpmyadmin«. De esta manera, simplemente cambiando el nombre ya se lo ponemos un poco más difícil a los malos.
#Un ejemplo sudo mv /var/www/html/phpmyadmin /var/www/html/panelmariadb
Una vez hecho esto el cambio es inmediato, no hace falta que reiniciemos Nginx.
Bloquear el acceso a la interfaz
Con el paso anterior dificultamos el trabajo de los robots de Internet que se dedican a escanear la red, buscando la dirección habitual para acceder a la plataforma. Pero en el caso de ataques dirigidos esta técnica de poco nos puede servir.
Una buena técnica, eficaz, es bloquear el acceso al producto mediante una contraseña adicional. Esto lo conseguiremos mediante una autentificación HTTP. La mayoría de servidores web tienen esta funcionalidad de forma nativa, incluido Nginx.
Para conseguir este objetivo primero debemos crear un fichero para almacenar las credenciales. El servidor web Nginx exige que las contraseñas sean cifradas, utilizando la función «()crypt«, incluida en el paquete OpenSSL.
Desde la consola de comandos, creamos la contraseña cifrada:
openssl passwd
Al hacer esto se nos pedirá que ingresemos la contraseña y la confirmemos. Con un resultado similar:
EGAT.9Kf6ETOs
Guardamos el valor para añadirlo al fichero de credenciales.
Dicho fichero lo vamos a llamar pma_pass
y lo ubicaremos dentro de la carpeta de Nginx, en la ruta «/etc/nginx»:
sudo vi /etc/nginx/pma_pass
En el fichero debemos también especificar el nombre de usuario asociado a la contraseña, por ejemplo David. El nombre y el código deberán ir separados por dos puntos.
david:EGAT.9Kf6ETOs
El siguiente paso es modificar el fichero de configuración del host virtual en Nginx, ubicado en «/etc/nginx/sites-available«, y añadir las siguientes líneas:
location /panelmariadb { auth_basic "Admin Acceso"; auth_basic_user_file /etc/nginx/pma_pass; }
Esta configuración la debemos adaptar a nuestras necesidades.
Validamos que la configuración sea correcta:
sudo nginx -t
Con resultado:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Ahora, al intentar acceder, nos aparecerá la siguiente ventana emergente:
Y esto es todo. Espero que esta entrada os sirva en algún momento.
Fuentes consultadas:
Linuxconfig.org – How to install mcrypt PHP module on Ubuntu 18.04 Linux