Manager, Developer Education
Brennan Bearnes escribió una versión anterior de este tutorial.
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 20.04.
Para completar esta guía, necesitará lo siguiente:
ufw
. Para configurar esto, siga la guía de configuración inicial de servidores para Ubuntu 20.04.Adicionalmente, existen importantes consideraciones de seguridad al utilizar software como phpMyAdmin, ya que:
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 20.04. Deberá registrar un nombre de dominio, crear registros DNS para su servidor y configurar un host virtual en Apache.
Puede utilizar APT para instalar phpMyAdmin desde los repositorios predeterminados de Ubuntu.
Como non-root user, actualice el índice de paquetes de su servidor:
- sudo apt update
Después de esto, puede instalar el paquete phpmyadmin
. Junto con este paquete, en la documentación oficial también se le recomienda instalar algunas extensiones PHP en su servidor para habilitar ciertas funcionalidades y mejorar el rendimiento.
Si siguió el tutorial de pila LAMP de los requisitos previos, varios de estos módulos se habrán instalado junto con el paquete php
. Sin embargo, se recomienda también instalar estos paquetes:
php-mbstring
: módulo para administrar cadenas no-ASCII y convertir cadenas a diferentes codificaciones.php-zip
: esta extensión admite la carga de archivos .zip
a phpMyAdmin.php-gd
: habilita la obtención de ayuda de la biblioteca GD Graphics.php-json
: proporciona PHP con compatibilidad para serialización JSON.php-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 tome algunas decisiones para configurar phpMyAdmin correctamente. En breve, veremos estas opciones:
- sudo apt install phpmyadmin php-mbstring php-zip php-gd php-json php-curl
Estas son las opciones que debe elegir cuando se le solicite para configurar correctamente su instalación:
apache2
<$>[warning]
Advertencia: Cuando la línea de comandos aparece, “apache2” está resaltado, pero no está seleccionado. Si no pulsa SPACE
para seleccionar Apache, el instalador no moverá los archivos necesarios durante la instalación. Pulse ESPACIO,
TAB
y luego ENTER
para seleccionar Apache.
<$>dbconfig-common
para configurar la base de datos, seleccione Yes
.Nota: Suponiendo que instaló MySQL conforme al paso 2 del tutorial de la pila LAMP de los requisitos previos, es posible que haya decidido habilitar el complemento Validate Password. En el momento en que se redactó este documento, habilitar este componente generará un error cuando intente establecer una contraseña para el usuario phpmyadmin:
Para resolver esto, seleccione la opción abort a fin de detener el proceso de instalación. Luego, abra su línea de comandos de MySQL:
- sudo mysql
O bien, si habilitó la autenticación de contraseña para el root user de MySQL, ejecute este comando y luego ingrese su contraseña cuando se le solicite:
- mysql -u root -p
Desde la línea de comandos, ejecute el siguiente comando para deshabilitar el componente Validate Password. Tenga en cuenta que con esto en realidad no se desinstalará, sino solo se evitará que el componente sea cargado en su servidor MySQL:
- UNINSTALL COMPONENT "file://component_validate_password";
Después de esto, puede cerrar el cliente MySQL:
- exit
Luego, vuelva a instalar el paquete phpmyadmin
, que funcionará según lo previsto:
- sudo apt install phpmyadmin
Una vez que phpMyAdmin esté instalado, puede abrir la línea de comandos de MySQL una vez más con sudo mysql
o mysql -u root -p
y luego ejecutar el siguiente comando para volver a habilitar el componente “Validate Password”:
- INSTALL COMPONENT "file://component_validate_password";
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. Para terminar de configurar Apache y PHP a fin de que funcionen con phpMyAdmin, la única tarea que queda a continuación en esta sección del tutorial es habilitar explícitamente la extensión PHP mbstring
. Esto se puede hacer escribiendo lo siguiente:
- sudo phpenmod mbstring
A continuación, reinicie Apache para que sus cambios surtan efecto:
- sudo systemctl restart apache2
phpMyAdmin ahora está instalado y configurado para funcionar con Apache. 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.
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 root user de MySQL o como usuario dedicado a administrar las bases de datos a través de la interfaz de phpMyAdmin.
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 utilidad, pero también puede generar complicaciones cuando sea 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 uno que haga uso de una contraseña, para poder acceder a phpMyAdmin como su root user 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 | caching_sha2_password | localhost |
| mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | caching_sha2_password | localhost |
| debian-sys-maint | *8486437DE5F65ADC4A4B001CA591363B64746D4C | caching_sha2_password | localhost |
| phpmyadmin | *5FD2B7524254B7F81B32873B1EA6D681503A5CA9 | caching_sha2_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 caching_sha2_password BY 'password';
Nota: La instrucción ALTER USER
previa establece el root user de MySQL para la autenticación con el complemento caching_sha2_password
. Según la documentación oficial de MySQL, caching_sha2_password
es el complemento de autenticación preferido por MySQL, ya que proporciona un cifrado de contraseña más seguro que el anterior, aunque aún usado ampliamente, mysql_native_password
.
Sin embargo, algunas versiones de PHP no funcionan de forma confiable con caching_sha2_password
. PHP notificó que este problema se corregió a partir de PHP 7.4, pero si encuentra un error cuando intente iniciar sesión en phpMyAdmin más adelante, es conveniente que en vez de esto establezca root para autenticar con mysql_native_password
.
- ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
Luego, compruebe nuevamente los métodos de autenticación empleados por cada uno de sus usuarios para confirmar que root ya no se autentique usando el complemento auth_socket
:
- SELECT user,authentication_string,plugin,host FROM mysql.user;
Output+------------------+-------------------------------------------+-----------------------+-----------+
| user | authentication_string | plugin | host |
+------------------+-------------------------------------------+-----------------------+-----------+
| root | *DE06E242B88EFB1FE4B5083587C260BACB2A6158 | caching_sha2_password | localhost |
| mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | caching_sha2_password | localhost |
| mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | caching_sha2_password | localhost |
| debian-sys-maint | *8486437DE5F65ADC4A4B001CA591363B64746D4C | caching_sha2_password | localhost |
| phpmyadmin | *5FD2B7524254B7F81B32873B1EA6D681503A5CA9 | caching_sha2_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
5 rows in set (0.00 sec)
En este resultado, podrá ver que el root user 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í.
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
Si tiene habilitada la autenticación de contraseña para su root user, como se describe en la sección anterior, deberá ejecutar el siguiente comando e ingresar su contraseña cuando se le solicite para establecer conexión:
- mysql -u root -p
A partir de ahí, cree un usuario nuevo y asigne una contraseña segura:
- CREATE USER 'sammy'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';
Nota: De nuevo, dependiendo de la versión de PHP que instaló, es conveniente establecer su nuevo usuario para la autenticación con mysql_native_password
en lugar de caching_sha2_password
:
- ALTER USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password 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”
agregado:
https://your_domain_or_IP/phpmyadmin
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:
Ahora que puede establecer conexión e interactuar con phpMyAdmin, solo falta fortalecer la seguridad de sus sistemas para protegerlos de atacantes.
Debido a su presencia universal, phpMyAdmin es un objetivo popular para atacantes. Debe tomar medidas adicionales para evitar el acceso no autorizado. Una opción para hacer esto es disponer una puerta de enlace delante de toda la aplicación utilizando las funciones de autenticación y autorización de .htaccess
integradas de Apache.
Para hacerlo, primero debe habilitar el uso de anulaciones del archivo .htaccess
editando su archivo de configuración de Apache.
Utilice su editor de texto preferido para editar el archivo phpmyadmin.conf
que se dispuso en su directorio de configuración de Apache. En este caso, utilizaremos nano
:
- sudo nano /etc/apache2/conf-available/phpmyadmin.conf
Agregue una directiva AllowOverride All
dentro de la sección <Directory /usr/share/phpmyadmin>
del archivo de configuración, como se muestra:
<Directory /usr/share/phpmyadmin>
Options FollowSymLinks
DirectoryIndex index.php
AllowOverride All
. . .
Una vez que agregue esta línea, guarde y cierre el archivo. Si utilizó nano
para editar el archivo, hágalo presionando CTRL + X
, Y
y luego ENTER
.
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 lo siguiente:
- sudo nano /usr/share/phpmyadmin/.htaccess
Dentro de este archivo, ingrese la siguiente información:
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
: en esta línea se especifica el tipo de autenticación que implementará. Con este tipo se 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 que se presentan. 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 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án el nombre de cuenta y la contraseña adicionales que acaba de configurar:
https://domain_name_or_IP/phpmyadmin
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. Al añadir un conjunto adicional de credenciales que no son las de MySQL, proporciona a su base de datos una capa de seguridad adicional. Esto es conveniente, ya que phpMyAdmin ha sido vulnerable a amenazas de seguridad en el pasado.
De esta manera, phpMyAdmin debería estar ya configurado y listo para usar en su servidor Ubuntu 20.04. Utilizando esta interfaz, puede crear fácilmente bases de datos, usuarios y tablas, y realizar operaciones habituales, como las de eliminar y modificar estructuras y datos.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!
Hola Mark, muchas gracias, funcionó perfectamente en Ubuntu server 22.04. Un gran tutorial Saludos cordiales José Manuel Quesada
Gracias por el tutorial.
PS. En algunas ocaciones marca error al crear el archivo “.htaccess” por lo que accedí directamente a la carpeta phpmyadmin con el comando “
cd /usr/share/phpmyadmin
” y verifique la existencia del archivo con un “ls -a
”Hola Mark, gracias por el tutorial.
Una pregunta, cuando termino el paso 3 por algún motivo tengo un error 500 al tratar de entrar con el usuario que cree, las contraseñas están bien pero no sé qué puede estar pasando.