Brennan Bearnes escribió una versión anterior a este tutorial.

Introducción

Aunque muchos usuarios necesitan la funcionalidad de un sistema de gestión de bases de datos como MySQL, es posible que no se sientan cómodos interactuando con el sistema únicamente desde la consola de MySQL.

phpMyAdmin se creó con el propósito de que los usuarios puedan interactuar con MySQL a través de una interfaz web. En esta guía, abordaremos la forma de instalar y proteger phpMyAdmin de modo que pueda utilizarlo de forma segura para gestionar sus bases de datos en un sistema Ubuntu 18.04.

Requisitos previos

Antes de comenzar con esta guía, debe completar algunos pasos básicos.

Primero, supondremos que su servidor tiene un usuario no root con privilegios sudo, así como un firewall configurado con ufw, como se describe en la guía de configuración inicial de servidores para Ubuntu 18.04.

También supondremos que completó una instalación LAMP (Linux, Apache, MySQL y PHP) en su servidor Ubuntu 18.04. Si aún no lo hizo, puede seguir esta guía para instalar una pila LAMP en Ubuntu 18.04.

Por último, existen importantes consideraciones de seguridad al utilizar software como phpMyAdmin, ya que:

  • Se comunica directamente con su instalación de MySQL.
  • Maneja la autenticación utilizando credenciales de MySQL.
  • Se ejecuta y muestra resultados para consultas SQL arbitrarias.

Por estas razones, y porque se trata de una aplicación PHP ampliamente implementada que con frecuencia recibe ataques, nunca debe ejecutar phpMyAdmin en sistemas remotos a través de una conexión HTTP simple. Si no tiene un dominio existente configurado con un certificado SSL/TLS, puede seguir esta guía para proteger Apache con Let’s Encrypt en Ubuntu 18.04. Deberá registrar un nombre de dominio, crear registros DNS para su servidor, y configurar un host virtual en Apache.

Una vez completados estos pasos, estará listo para comenzar con esta guía.

Paso 1: Instalación de phpMyAdmin

Para comenzar, instalaremos phpMyAdmin desde los repositorios predeterminados de Ubuntu.

Esto se realiza actualizando el índice de paquete de su servidor y, luego, utilizando el sistema de empaquetado apt para descargar los archivos e instalarlos en su sistema:

  • sudo apt update
  • sudo apt install phpmyadmin php-mbstring php-gettext

Se le harán algunas preguntas para configurar su instalación de forma correcta.

Advertencia: Cuando aparece el mensaje, “apache2” se resalta, pero no se selecciona. Si no pulsa ESPACIO para seleccionar Apache, el instalador no moverá los archivos necesarios durante la instalación. Pulse ESPACIO, TAB y luego ENTER para seleccionar Apache.

  • Para seleccionar el servidor, elija apache2.
  • Cuando se le pregunte si utiliza dbconfig-common para configurar la base de datos, seleccione Yes.
  • Luego, se le solicitará elegir y confirmar una contraseña para la aplicación de MySQL para phpMyAdmin.

El proceso de instalación añade el archivo de configuración de phpMyAdmin de Apache al directorio /etc/apache2/conhable/, donde se lee de forma automática. Lo único que debe hacer es habilitar de forma explícita la extensión PHP mbstring. Puede hacerlo escribiendo lo siguiente:

  • sudo phpenmod mbstring

A continuación, reinicie Apache para que sus cambios surtan efecto:

  • sudo systemctl restart apache2

De esta manera, phpMyAdmin quedará instalado y configurado. Sin embargo, pra poder iniciar sesión y comenzar a interactuar con sus bases de datos de MySQL, deberá asegurarse de que sus usuarios de MySQL tengan los privilegios necesarios para interactuar con el programa.

Paso 2: Ajuste de la autenticación y los privilegios de usuario

Cuando instaló phpMyAdmin en su servidor, automáticamente creó un usuario de base de datos llamado phpmyadmin que realiza ciertos procesos subyacentes para el programa. En vez de registrarse como este usuario con la contraseña administrativa que estableció durante la instalación, se le recomienda iniciar sesión como usuario root de MySQL o como usuario dedicado a administrar las bases de datos a través de la interfaz phpMyAdmin.

Configuración del acceso con contraseña para la cuenta root de MySQL

En los sistemas Ubuntu con MySQL 5.7 (y versiones posteriores), el usuario root de MySQL se configura para la autenticación usando el complemento auth_socket de manera predeterminada en lugar de una contraseña. En muchos casos, esto proporciona mayor seguridad y usabilidad, pero también puede causar complicaciones cuando es necesario permitir que un programa externo (como phpMyAdmin) acceda al usuario.

Si aún no lo ha hecho, deberá cambiar el método de autenticación de auth_socket a mysql_native_password para iniciar sesión en phpMyAdmin como usuario root de MySQL. Para hacer esto, abra la consola de MySQL desde su terminal:

  • sudo mysql

A continuación, compruebe con el siguiente comando el método de autenticación utilizado por una de sus cuentas de usuario de MySQL:

  • SELECT user,authentication_string,plugin,host FROM mysql.user;
Output
+------------------+-------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | | auth_socket | localhost | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | debian-sys-maint | *8486437DE5F65ADC4A4B001CA591363B64746D4C | mysql_native_password | localhost | | phpmyadmin | *5FD2B7524254B7F81B32873B1EA6D681503A5CA9 | mysql_native_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ 5 rows in set (0.00 sec)

En este ejemplo, puede ver que, en efecto, el usuario root se autentica utilizando el complemento de auth_socket. Para configurar la cuenta de root de modo que la autenticación se realice con una contraseña, ejecute el siguiente comando ALTER USER. Asegúrese de cambiar password por una contraseña segura que elija:

  • ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

A continuación, ejecute FLUSH PRIVILEGES para indicar al servidor que vuelva a cargar la tabla de permisos y aplique sus nuevos cambios:

  • FLUSH PRIVILEGES;

Compruebe de nuevo los métodos de autenticación empleados por cada uno de sus usuarios para confirmar que *root *deje de realizarla usando el complemento de auth_socket:

  • SELECT user,authentication_string,plugin,host FROM mysql.user;
Output
+------------------+-------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | *DE06E242B88EFB1FE4B5083587C260BACB2A6158 | mysql_native_password | localhost | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | debian-sys-maint | *8486437DE5F65ADC4A4B001CA591363B64746D4C | mysql_native_password | localhost | | phpmyadmin | *5FD2B7524254B7F81B32873B1EA6D681503A5CA9 | mysql_native_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ 5 rows in set (0.00 sec)

Aquí podrá ver que el usuario root se auntenticará usando una contraseña. Ahora podrá iniciar sesión en la interfaz phpMyAdmin como usuario root con la contraseña que estableció aquí.

Configuración del acceso con contraseña para un usuario dedicado de MySQL

Por otra parte, para el flujo de trabajo de algunos puede resultar más conveniente la conexión a phpMyAdmin con un usuario dedicado. Para hacer esto, abra una vez más el shell de MySQL:

  • sudo mysql

Nota: Si tiene habilitada la autenticación por contraseña, como se describe en la sección anterior, deberá utilizar un comando diferente para acceder al intérprete de comandos de MySQL. A través de lo siguiente, se ejecutará su cliente de MySQL con privilegios de usuario regulares y solo obtendrá privilegios de administrador dentro de la base de datos mediante la autenticación:

  • mysql -u root -p

A partir de ahí, cree un usuario nuevo y asigne una contraseña segura:

  • CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';

Luego, conceda a su nuevo usuario los privilegios apropiados. Por ejemplo, con el siguiente comando podría conceder privilegios de usuario a todas las tablas dentro de la base de datos, así como la facultad de añadir, cambiar y eliminar privilegios de usuario:

  • GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;

A continuación, cierre el shell de MySQL:

  • exit

Ahora puede acceder a la interfaz web visitando el nombre de dominio o la dirección IP pública de su servidor, con /phpmyadmin a gregado:

http://your_domain_or_IP/phpmyadmin

Pantalla de inicio de sesión dephpMyAdmin

Inicie sesión en la interfaz como root o con el nombre de usuario y la contraseña que configuró.

Cuando inicie sesión, verá la interfaz de usuario. Tendrá el siguiente aspecto:

Interfaz de usuario de phpMyAdmin

Ahora que puede conectarse e interactuar con phpMyAdmin, solo falta fortalecer la seguridad de sus sistemas para protegerlos de atacantes.

Paso 3: Protección de la instancia de phpMyAdmin

Debido a su presencia universal, phpMyAdmin es un objetivo popular para atacantes. Debe tomar medidas adicionales para evitar el acceso no autorizado. Una de las formas más sencillas de realizar esto consiste en disponer una puerta de enlace frente a toda la aplicación utilizando las funcionalidades de autenticación y autorización .htaccess integradas de Apache.

Para hacerlo, primero debe habilitar el uso de anulaciones de archivos .htaccess editando su archivo de configuración de Apache.

Edite el archivo vinculado que dispuesto en su directorio de configuración de Apache:

  • sudo nano /etc/apache2/conf-available/phpmyadmin.conf

Agregue una directiva AllowOverride All dentro de la <Directory /usr/share/phpmyadmin>:

/etc/apache2/conf-available/phpmyadmin.conf
<Directory /usr/share/phpmyadmin>
    Options FollowSymLinks
    DirectoryIndex index.php
    AllowOverride All
    . . .

Una vez que agregue esta línea, guarde y cierre el archivo.

Para implementar los cambios que realizó, reinicie Apache:

  • sudo systemctl restart apache2

Ahora que habilitó el uso de .htaccess para su aplicación, deberá crear uno para implementar seguridad.

Para que pueda hacerlo de forma correcta, el archivo debe crearse dentro del directorio de la aplicación. Puede crear el archivo necesario y abrirlo en su editor de texto con privilegios root escribiendo:

  • sudo nano /usr/share/phpmyadmin/.htaccess

Dentro de este archivo, ingrese la siguiente información:

/usr/share/phpmyadmin/.htaccess
AuthType Basic
AuthName "Restricted Files"
AuthUserFile /etc/phpmyadmin/.htpasswd
Require valid-user

A continuación, se muestra lo que significa cada una de estas líneas:

  • AuthType Basic: esta línea especifica el tipo de autenticación que implementará. Este tipo implementará la autenticación de contraseña utilizando un archivo de contraseña.
  • AuthName: establece el mensaje para el cuadro de diálogo de autenticación. Debe procurar que esto sea genérico para que los usuarios no autorizados no obtengan información sobre lo que se protege.
  • AuthUserFile: establece la ubicación del archivo de contraseña que se utilizará para la autenticación. Esto debe quedar fuera de los directorios implicados. Crearemos este archivo pronto.
  • Require valid-user: especifica que solo los usuarios autenticados deberán tener acceso al recurso. Esto es lo que realmente impide el ingreso de los usuarios no autorizados.

Cuando termine, guarde y cierre el archivo.

La ubicación que seleccionó para su archivo de contraseña fue /etc/phpmyadmin/.htpasswd. Ahora puede crear este archivo y pasarle un usuario inicial con la utilidad de htpasswd:

  • sudo htpasswd -c /etc/phpmyadmin/.htpasswd username

Para el usuario que creará, se le solicitará seleccionar y confirmar una contraseña. Después, el archivo se creará con la contraseña con hash que ingresó.

Si desea ingresar un usuario adicional, debe hacerlo sin el indicador -c, como se muestra:

  • sudo htpasswd /etc/phpmyadmin/.htpasswd additionaluser

Ahora, cuando acceda a su subdirectorio phpMyAdmin, se le solicitará el nombre de cuenta y la contraseña adicionales que acaba de configurar:

https://domain_name_or_IP/phpmyadmin

Contraseña phpMyAdmin de Apache

Después de ingresar la autenticación de Apache, accederá a la página de autenticación normal de phpMyAdmin para ingresar sus credenciales de MySQL. Esta configuración provee una capa adicional de seguridad conveniente, ya que phpMyAdmin estuvo expuesto vulnerabilidades en el pasado.

Conclusión

De esta manera, phpMyAdmin quedará configurado y listo para usar en su servidor Ubuntu 18.04. Utilizando esta interfaz, puede crear fácilmente bases de datos, usuarios, tablas, etc., y realizar operaciones habituales, como las de eliminar y modificar estructuras y datos.

0 Comments

Creative Commons License