Introducción
Si bien muchos usuarios necesitan la funcionalidad de un sistema de administración de bases de datos como MySQL, es posible que no se sientan cómodos interactuando con el sistema únicamente desde el indicador de MySQL.
phpMyAdmin se creó para que los usuarios puedan interactuar con MySQL a través de una interfaz web. En esta guía, explicaremos cómo instalar y proteger phpMyAdmin para que pueda usarlo de forma segura para administrar sus bases de datos en un sistema Ubuntu.
Cómo instalar y proteger phpMyAdmin en Ubuntu
- Instalación de phpMyAdmin
- Ajuste de la autenticación y los privilegios del usuario
- Cómo proteger su instancia de phpMyAdmin
Prerrequisitos
Para completar esta guía, necesitarás:
- Un servidor Ubuntu. Este servidor debe tener un usuario no root con privilegios administrativos y un firewall configurado con [nombre del servidor]
ufw
. Para configurarlo, siga nuestra guía de configuración inicial de servidores para Ubuntu . - Una pila LAMP (Linux, Apache, MySQL y PHP) instalada en su servidor Ubuntu. Si aún no lo ha hecho, puede seguir esta guía sobre cómo instalar una pila LAMP en Ubuntu .
Además, hay consideraciones de seguridad importantes al utilizar software como phpMyAdmin, ya que:
- Se comunica directamente con su instalación de MySQL
- Maneja la autenticación usando credenciales MySQL
- Ejecuta y devuelve resultados para consultas SQL arbitrarias
Por estos motivos, y debido a que es una aplicación PHP ampliamente utilizada que frecuentemente es blanco de ataques, nunca debe ejecutar phpMyAdmin en sistemas remotos a través de una conexión HTTP simple.
Si no tiene un dominio configurado con un certificado SSL/TLS, puede seguir esta guía sobre cómo proteger Apache con Let’s Encrypt en Ubuntu . Para ello, deberá registrar un nombre de dominio , crear registros DNS para su servidor y configurar un host virtual Apache .
Paso 1 — Instalación de phpMyAdmin
Puede utilizar APT para instalar phpMyAdmin desde los repositorios predeterminados de Ubuntu.
Como usuario sudo no root, actualice el índice de paquetes de su servidor si no lo ha hecho recientemente:
sudo apt update
A continuación, puede instalar el phpmyadmin
paquete. Además, la documentación oficial recomienda instalar algunas extensiones PHP en su servidor para habilitar ciertas funcionalidades y mejorar el rendimiento.
Si siguió el tutorial de la pila LAMP ( requisitos) , varios de estos módulos se habrán instalado junto con el php
paquete. Sin embargo, se recomienda instalar también estos paquetes:
php-mbstring
:Un módulo para gestionar cadenas que no sean ASCII y convertir cadenas a diferentes codificacionesphp-zip
:Esta extensión admite la carga de.zip
archivos a phpMyAdminphp-gd
:Habilita la compatibilidad con la biblioteca de gráficos GDphp-json
:Proporciona a PHP soporte para la serialización JSONphp-curl
: Permite que PHP interactúe con diferentes tipos de servidores utilizando diferentes protocolos
Ejecute el siguiente comando para instalar estos paquetes en su sistema. Tenga en cuenta que el proceso de instalación requiere que realice algunas acciones para configurar phpMyAdmin correctamente. A continuación, explicaremos estas opciones:
sudo apt install phpmyadmin php-mbstring php-zip php-gd php-json php-curl
Estas son las opciones que debes elegir cuando se te solicite para configurar tu instalación correctamente:
- Para la selección del servidor, elija
apache2
Advertencia: Cuando aparece el mensaje, “apache2” aparece resaltado, pero no seleccionado. Si no pulsa SPACE
para seleccionar Apache, el instalador no moverá los archivos necesarios durante la instalación. Pulse SPACE
, TAB
y luego ENTER
para seleccionar Apache.
- Seleccione
Yes
cuando se le pregunte si desea utilizardbconfig-common
para configurar la base de datos - Luego se le pedirá que elija y confirme una contraseña de aplicación MySQL para phpMyAdmin.
Nota : Si instaló MySQL siguiendo el paso 2 del tutorial de la pila LAMP , es posible que haya decidido habilitar el complemento Validar contraseña. Al momento de escribir este artículo, habilitar este componente generará un error al intentar establecer una contraseña para el usuario phpmyadmin :

Para solucionar esto, seleccione la opción de cancelar para detener el proceso de instalación. A continuación, abra el símbolo del sistema de MySQL:
sudo mysql
O bien, si habilitó la autenticación de contraseña para el usuario root de MySQL, ejecute este comando y luego ingrese su contraseña cuando se le solicite:
mysql -u root -p
Desde el símbolo del sistema, ejecute el siguiente comando para deshabilitar el componente Validar contraseña. Tenga en cuenta que esto no lo desinstalará, sino que simplemente impedirá que se cargue en su servidor MySQL:
UNINSTALL COMPONENT "file://component_validate_password";
A continuación, puedes cerrar el cliente MySQL:
exit
Luego intenta instalar el phpmyadmin
paquete nuevamente y funcionará como se espera:
sudo apt install phpmyadmin
Una vez instalado phpMyAdmin, puede abrir el indicador de MySQL nuevamente con sudo mysql
o mysql -u root -p
y luego ejecutar el siguiente comando para volver a habilitar el componente Validar contraseña:
INSTALL COMPONENT "file://component_validate_password";
El proceso de instalación agrega el archivo de configuración de Apache de phpMyAdmin al /etc/apache2/conf-enabled/
directorio, donde se lee automáticamente. Para finalizar la configuración de Apache y PHP para que funcionen con phpMyAdmin, la única tarea pendiente en esta sección del tutorial es habilitar explícitamente la mbstring
extensión de PHP, lo cual puede hacer escribiendo:
sudo phpenmod mbstring
Luego reinicie Apache para que sus cambios sean reconocidos:
sudo systemctl restart apache2
phpMyAdmin ya está instalado y configurado para funcionar con Apache. Sin embargo, antes de iniciar sesión y empezar a interactuar con sus bases de datos MySQL, deberá asegurarse de que sus usuarios MySQL tengan los privilegios necesarios para interactuar con el programa.
Paso 2: Ajuste de la autenticación y los privilegios del usuario
Al instalar phpMyAdmin en su servidor, se crea automáticamente un usuario de base de datos llamado phpmyadmin , que realiza ciertas tareas básicas del programa. En lugar de iniciar sesión con este usuario y la contraseña administrativa que configuró durante la instalación, se recomienda iniciar sesión como usuario root de MySQL o como un usuario dedicado a administrar bases de datos a través de la interfaz de phpMyAdmin.
Configuración del acceso con contraseña para la cuenta raíz de MySQL
En sistemas Ubuntu con MySQL 5.7 (y versiones posteriores), el usuario root de MySQL se autentica mediante el auth_socket
complemento por defecto, en lugar de una contraseña. Esto ofrece mayor seguridad y usabilidad en muchos casos, pero también puede complicar las cosas cuando se necesita permitir que un programa externo, como phpMyAdmin, acceda al usuario.
Para iniciar sesión en phpMyAdmin como usuario root de MySQL, deberá cambiar su método de autenticación auth_socket
a uno con contraseña, si aún no lo ha hecho. Para ello, abra el prompt de MySQL desde su terminal:
sudo mysql
A continuación, verifique qué método de autenticación utiliza cada una de sus cuentas de usuario de MySQL con el siguiente comando:
SELECT user,authentication_string,plugin,host FROM mysql.user;
Output+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| user | authentication_string | plugin | host |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| debian-sys-maint | $A$005$I:jOry?]Sy<|qhQRj3fBRQ43i4UJxrpm.IaT6lOHkgveJjmeIjJrRe6 | caching_sha2_password | localhost |
| mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.session | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.sys | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| phpmyadmin | $A$005$?#{Z?`gN!c2az)}V-INCWXSuVdqB9zWteH1IkZfTe/rOLgVhSzEMM9R3G6K9 | caching_sha2_password | localhost |
| root | | auth_socket | localhost |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
6 rows in set (0.00 sec)
Este ejemplo de salida indica que el usuario root se autentica mediante el auth_socket
complemento. Para configurar la cuenta root para que se autentique con una contraseña, ejecute el siguiente ALTER USER
comando. Asegúrese de usar password
una contraseña segura de su elección:
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';
NotaALTER USER
: La declaración anterior establece que el usuario root de MySQL se autentique con el caching_sha2_password
complemento. Según la documentación oficial de MySQL , caching_sha2_password
es el complemento de autenticación preferido de MySQL, ya que proporciona un cifrado de contraseñas más seguro que el anterior, pero aún ampliamente utilizado, mysql_native_password
.
Sin embargo, algunas versiones de PHP no funcionan correctamente con [ nombre de usuario caching_sha2_password
]. PHP ha informado que este problema se solucionó a partir de PHP 7.4 , pero si encuentra un error al intentar iniciar sesión en phpMyAdmin más adelante, le recomendamos configurar root para que se autentique con mysql_native_password
[nombre de usuario].
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
Luego, verifique nuevamente los métodos de autenticación empleados por cada uno de sus usuarios para confirmar que root ya no se autentica usando el auth_socket
complemento:
SELECT user,authentication_string,plugin,host FROM mysql.user;
Output+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| user | authentication_string | plugin | host |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| debian-sys-maint | $A$005$I:jOry?]Sy<|qhQRj3fBRQ43i4UJxrpm.IaT6lOHkgveJjmeIjJrRe6 | caching_sha2_password | localhost |
| mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.session | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.sys | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| phpmyadmin | $A$005$?#{Z?`gN!c2az)}V-INCWXSuVdqB9zWteH1IkZfTe/rOLgVhSzEMM9R3G6K9 | caching_sha2_password | localhost |
| root | $A$005$3y�y|Z?'_[} ZyVHuESVwNmjKWOH/ndETwS.Kty0IH7UfiXjOfVvyWroy4a. | caching_sha2_password | localhost |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
6 rows in set (0.00 sec)
Este resultado muestra que el usuario root se autenticará con una contraseña. Ahora puede iniciar sesión en la interfaz de phpMyAdmin como usuario root con la contraseña que haya configurado aquí.
Configuración del acceso con contraseña para un usuario dedicado de MySQL
Como alternativa, algunos usuarios podrían encontrar más conveniente conectarse a phpMyAdmin con un usuario dedicado. Para ello, abra de nuevo la consola MySQL:
sudo mysql
Si tiene habilitada la autenticación de contraseña para su usuario root , como se describe en la sección anterior, deberá ejecutar el siguiente comando e ingresar su contraseña cuando se le solicite para poder conectarse:
mysql -u root -p
Desde allí, crea un nuevo usuario y asígnale una contraseña segura:
CREATE USER 'sammy'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';
Nota : Nuevamente, dependiendo de qué versión de PHP tenga instalada, es posible que desee configurar su nuevo usuario para que se autentique con mysql_native_password
en lugar de caching_sha2_password
:
ALTER USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
Luego, otorgue al nuevo usuario los privilegios correspondientes. Por ejemplo, podría otorgarle privilegios para todas las tablas de la base de datos, así como la posibilidad de agregar, modificar y eliminar privilegios de usuario, con este comando:
GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;
A continuación, salga del shell MySQL:
exit
Ahora puede acceder a la interfaz web visitando el nombre de dominio o la dirección IP pública de su servidor seguido de /phpmyadmin
:
https://your_domain_or_IP/phpmyadmin

Inicie sesión en la interfaz, ya sea como root o con el nuevo nombre de usuario y contraseña que acaba de configurar.
Cuando inicie sesión, será llevado a la interfaz de usuario de phpMyAdmin:

Ahora que puede conectarse e interactuar con phpMyAdmin, todo lo que queda por hacer es reforzar la seguridad de su sistema para protegerlo de los atacantes.
Paso 3: Protección de su instancia phpMyAdmin
Debido a su ubicuidad, phpMyAdmin es un objetivo común para los atacantes, por lo que se recomienda extremar las precauciones para evitar el acceso no autorizado. Una forma de lograrlo es colocar una puerta de enlace frente a toda la aplicación mediante las funcionalidades integradas de .htaccess
autenticación y autorización de Apache.
Para ello, primero debe habilitar el uso de .htaccess
anulaciones de archivos editando el archivo de configuración de Apache de su instalación de phpMyAdmin.
Utilice su editor de texto preferido para editar el phpmyadmin.conf
archivo ubicado en el directorio de configuración de Apache. Aquí usaremos nano
:
sudo nano /etc/apache2/conf-available/phpmyadmin.conf
Agregue una AllowOverride All
directiva dentro de la <Directory /usr/share/phpmyadmin>
sección del archivo de configuración, como esta: /etc/apache2/conf-available/phpmyadmin.conf
<Directory /usr/share/phpmyadmin>
Options SymLinksIfOwnerMatch
DirectoryIndex index.php
AllowOverride All
. . .
Una vez agregada esta línea, guarde y cierre el archivo. Si solía nano
editarlo, hágalo presionando CTRL + X
, Y
y luego ENTER
.
Para implementar los cambios realizados, reinicie Apache:
sudo systemctl restart apache2
Ahora que ha habilitado el uso de .htaccess
archivos para su aplicación, necesita crear uno para implementar cierta seguridad.
Para que esto funcione correctamente, el archivo debe crearse en el directorio de la aplicación. Puede crear el archivo necesario y abrirlo en su editor de texto con privilegios de 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
Esto es lo que significa cada una de estas líneas:
AuthType Basic
Esta línea especifica el tipo de autenticación que se está implementando. Este tipo implementará la autenticación por contraseña mediante un archivo de contraseñas.AuthName
: Esto configura el mensaje del cuadro de diálogo de autenticación. Debe ser genérico para que usuarios no autorizados no obtengan información sobre lo que se está protegiendo.AuthUserFile
: Esto establece la ubicación del archivo de contraseñas que se usará para la autenticación. Debe estar fuera de los directorios que se sirven. Lo crearemos en breve.Require valid-user
Esto especifica que solo los usuarios autenticados deben tener acceso a este recurso. Esto es lo que impide el acceso de usuarios no autorizados.
Cuando haya terminado, guarde y cierre el archivo.
La ubicación que seleccionó para su archivo de contraseñas era [nombre del archivo] /etc/phpmyadmin/.htpasswd
. Ahora puede crear este archivo y asignarle un usuario inicial con la htpasswd
utilidad:
sudo htpasswd -c /etc/phpmyadmin/.htpasswd username
Se le pedirá que seleccione y confirme una contraseña para el usuario que está creando. Después, se creará el archivo con la contraseña cifrada que ingresó.
Si deseas ingresar un usuario adicional, debes hacerlo sin la -c
bandera, de la siguiente manera:
sudo htpasswd /etc/phpmyadmin/.htpasswd additionaluser
Luego reinicie Apache para que .htaccess
la autenticación surta efecto:
sudo systemctl restart apache2
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

Tras introducir la autenticación de Apache, accederá a la página de autenticación habitual de phpMyAdmin para introducir sus credenciales de MySQL. Al añadir un conjunto adicional de credenciales que no sean de MySQL, proporciona a su base de datos una capa adicional de seguridad. Esto es conveniente, ya que phpMyAdmin ha sido vulnerable a amenazas de seguridad en el pasado.
Conclusión
Ya debería tener phpMyAdmin configurado y listo para usar en su servidor Ubuntu. Con esta interfaz, puede crear bases de datos, usuarios y tablas, así como realizar operaciones habituales como eliminar y modificar estructuras y datos.