Búsqueda de sitios web

Cómo instalar y asegurar phpMyAdmin en Ubuntu 20.04


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

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 fue creado para que los usuarios puedan interactuar con MySQL a través de una interfaz web. En esta guía, discutiremos cómo instalar y asegurar phpMyAdmin para que pueda usarlo de manera segura para administrar sus bases de datos en un sistema Ubuntu 20.04.

requisitos previos

Para completar esta guía, necesitará:

  • Un servidor Ubuntu 20.04. Este servidor debe tener un usuario no root con privilegios administrativos y un firewall configurado con ufw. Para configurar esto, siga nuestra guía de configuración inicial del servidor para Ubuntu 20.04.
  • Una pila LAMP (Linux, Apache, MySQL y PHP) instalada en su servidor Ubuntu 20.04. Si esto aún no se ha completado, puede seguir esta guía sobre cómo instalar una pila LAMP en Ubuntu 20.04.

Además, existen importantes consideraciones de seguridad al usar software como phpMyAdmin, ya que:

  • Se comunica directamente con su instalación de MySQL
  • Maneja la autenticación usando credenciales de MySQL
  • Ejecuta y devuelve resultados para consultas SQL arbitrarias

Por estas razones, y debido a que es una aplicación PHP ampliamente implementada que con frecuencia es objeto de 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 configurar un host virtual de Apache.

Paso 1: Instalar phpMyAdmin

Puede usar APT para instalar phpMyAdmin desde los repositorios predeterminados de Ubuntu.

Como su usuario sudo no root, actualice el índice de paquetes de su servidor:

  1. sudo apt update

A continuación, puede instalar el paquete phpmyadmin. Junto con este paquete, la documentación oficial también recomienda que instale algunas extensiones de PHP en su servidor para habilitar ciertas funcionalidades y mejorar el rendimiento.

Si siguió el tutorial de la pila LAMP de requisitos previos, varios de estos módulos se habrán instalado junto con el paquete php. Sin embargo, se recomienda que también instale estos paquetes:

  • php-mbstring: un módulo para administrar cadenas no ASCII y convertir cadenas a diferentes codificaciones
  • php-zip: esta extensión admite la carga de archivos .zip en phpMyAdmin
  • php-gd: activa la compatibilidad con la biblioteca de gráficos GD
  • php-json: Proporciona PHP con soporte para serialización JSON
  • php-curl: permite que PHP interactúe con diferentes tipos de servidores usando diferentes protocolos

Tenga en cuenta que si está utilizando una versión de PHP distinta a la predeterminada instalada en el tutorial de la pila LAMP de requisitos previos, deberá instalar las versiones adecuadas de estos paquetes de módulos. Por ejemplo, si está utilizando la versión de PHP 8.0, deberá instalar el paquete php8.0-mbstring en lugar del predeterminado php-mbstring paquete.

Ejecute el siguiente comando para instalar estos paquetes en su sistema. Sin embargo, tenga en cuenta que el proceso de instalación requiere que tome algunas decisiones para configurar phpMyAdmin correctamente. Veremos estas opciones en breve:

  1. 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 su instalación correctamente:

  • Para la selección del servidor, elija apache2

Advertencia: cuando aparece el mensaje, \apache2” está resaltado, pero no seleccionado. Si no presiona 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 cuando se le pregunte si usar dbconfig-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: Suponiendo que instaló MySQL siguiendo el Paso 2 del tutorial de la pila LAMP de requisitos previos, es posible que haya decidido habilitar el complemento Validar contraseña. Al momento de escribir este artículo, habilitar este componente generará un error cuando intente establecer una contraseña para el usuario phpmyadmin:

Para resolver esto, seleccione la opción de cancelar para detener el proceso de instalación. Luego, abra su indicador de MySQL:

  1. sudo mysql

O, si habilitó la autenticación de contraseña para el usuario raíz de MySQL, ejecute este comando y luego ingrese su contraseña cuando se le solicite:

  1. mysql -u root -p

Desde el indicador, ejecute el siguiente comando para deshabilitar el componente Validar contraseña. Tenga en cuenta que esto en realidad no lo desinstalará, sino que simplemente evitará que el componente se cargue en su servidor MySQL:

  1. UNINSTALL COMPONENT "file://component_validate_password";

A continuación, puede cerrar el cliente MySQL:

  1. exit

Luego intente instalar el paquete phpmyadmin nuevamente y funcionará como se esperaba:

  1. sudo apt install phpmyadmin

Una vez que phpMyAdmin está instalado, puede abrir el indicador de MySQL una vez más con sudo mysql o mysql -u root -p y luego ejecutar el siguiente comando para volver a habilitar Validar contraseña componente:

  1. INSTALL COMPONENT "file://component_validate_password";

El proceso de instalación agrega el archivo de configuración de phpMyAdmin Apache en el directorio /etc/apache2/conf-enabled/, donde se lee automáticamente. Para terminar de configurar Apache y PHP para que funcionen con phpMyAdmin, la única tarea pendiente en esta sección del tutorial es habilitar explícitamente la extensión PHP mbstring, lo que puede hacer escribiendo:

  1. sudo phpenmod mbstring

Luego, reinicie Apache para que se reconozcan sus cambios:

  1. sudo systemctl restart apache2

phpMyAdmin ahora está instalado y configurado para funcionar con Apache. Sin embargo, antes de que pueda iniciar sesión y comenzar a interactuar con sus bases de datos 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 del usuario

Cuando instaló phpMyAdmin en su servidor, creó automáticamente un usuario de base de datos llamado phpmyadmin que realiza ciertos procesos subyacentes para el programa. En lugar de iniciar sesión como este usuario con la contraseña administrativa que estableció durante la instalación, se recomienda que inicie sesión como su usuario raíz 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 los sistemas Ubuntu que ejecutan MySQL 5.7 (y versiones posteriores), el usuario raíz de MySQL está configurado para autenticarse usando el complemento auth_socket de forma predeterminada en lugar de una contraseña. Esto permite una mayor seguridad y facilidad de uso en muchos casos, pero también puede complicar las cosas cuando necesita permitir que un programa externo, como phpMyAdmin, acceda al usuario.

Para iniciar sesión en phpMyAdmin como su usuario raíz de MySQL, deberá cambiar su método de autenticación de auth_socket a uno que utilice una contraseña, si aún no lo ha hecho. Para hacer esto, abra el indicador de MySQL desde su terminal:

  1. sudo mysql

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

  1. 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 el usuario raíz, de hecho, se autentica usando el complemento auth_socket. Para configurar la cuenta raíz para autenticarse con una contraseña, ejecute el siguiente comando ALTER USER. Asegúrese de cambiar password a una contraseña segura de su elección:

  1. ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';

Nota: La instrucción ALTER USER anterior establece que el usuario raíz de MySQL se autentique con el complemento caching_sha2_password. 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ña más seguro que el anterior, pero aún ampliamente utilizado, mysql_native_password.

Sin embargo, algunas versiones de PHP no funcionan de manera confiable con 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, es posible que desee configurar la raíz para autenticarse con mysql_native_password en su lugar:

  1. 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 la raíz ya no se autentica usando el complemento auth_socket:

  1. 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)

Puede ver en este resultado que el usuario raíz se autenticará con una contraseña. Ahora puede iniciar sesión en la interfaz de phpMyAdmin como su usuario root con la contraseña que configuró aquí.

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

Alternativamente, algunos pueden encontrar que se adapta mejor a su flujo de trabajo para conectarse a phpMyAdmin con un usuario dedicado. Para hacer esto, abra el shell de MySQL una vez más:

  1. sudo mysql

Si tiene habilitada la autenticación de contraseña para su usuario raíz, como se describe en la sección anterior, deberá ejecutar el siguiente comando e ingresar su contraseña cuando se le solicite para conectarse:

  1. mysql -u root -p

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

  1. CREATE USER 'sammy'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';

Nota: Nuevamente, dependiendo de la versión de PHP que haya instalado, es posible que desee configurar su nuevo usuario para que se autentique con mysql_native_password en lugar de caching_sha2_password:

  1. ALTER USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Luego, otorgue a su nuevo usuario los privilegios apropiados. Por ejemplo, podría otorgar privilegios de usuario a todas las tablas dentro de la base de datos, así como el poder de agregar, cambiar y eliminar privilegios de usuario, con este comando:

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

A continuación, salga del shell de MySQL:

  1. exit

Ahora puede acceder a la interfaz web visitando el nombre de dominio de su servidor o la dirección IP pública seguida 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, verá la interfaz de usuario, que se verá así:

Ahora que puede conectarse e interactuar con phpMyAdmin, todo lo que queda por hacer es fortalecer la seguridad de su sistema para protegerlo de los atacantes.

Paso 3: asegurar su instancia de phpMyAdmin

Debido a su ubicuidad, phpMyAdmin es un objetivo popular para los atacantes y debe tener mucho cuidado para evitar el acceso no autorizado. Una forma de hacerlo es colocar una puerta de enlace frente a toda la aplicación mediante el uso de las funcionalidades de autenticación y autorización .htaccess integradas de Apache.

Para hacer esto, primero debe habilitar el uso de anulaciones de archivos .htaccess editando el archivo de configuración de Apache de su instalación de phpMyAdmin.

Utilice su editor de texto preferido para editar el archivo phpmyadmin.conf que se ha colocado en su directorio de configuración de Apache. Aquí, usaremos nano:

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

Agregue una directiva AllowOverride All dentro de la sección del archivo de configuración, como esta:

<Directory /usr/share/phpmyadmin>
    Options SymLinksIfOwnerMatch
    DirectoryIndex index.php
    AllowOverride All
    . . .

Cuando haya agregado esta línea, guarde y cierre el archivo. Si usó nano para editar el archivo, hágalo presionando CTRL + X, Y y luego ENTER .

Para implementar los cambios que realizó, reinicie Apache:

  1. sudo systemctl restart apache2

Ahora que ha habilitado el uso de archivos .htaccess para su aplicación, debe crear uno para implementar algo de seguridad.

Para que esto tenga éxito, 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 de root escribiendo:

  1. 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

Esto es lo que significa cada una de estas líneas:

  • AuthType Basic: esta línea especifica el tipo de autenticación que está implementando. Este tipo implementará la autenticación de contraseña mediante un archivo de contraseña.
  • AuthName: Esto establece el mensaje para el cuadro de diálogo de autenticación. Debe mantener este genérico para que los usuarios no autorizados no obtengan ninguna información sobre lo que se está protegiendo.
  • AuthUserFile: establece la ubicación del archivo de contraseña que se utilizará para la autenticación. Esto debe estar fuera de los directorios que se están sirviendo. Crearemos este archivo en breve.
  • Requerir usuario válido: Esto especifica que solo los usuarios autenticados deben tener acceso a este recurso. Esto es lo que realmente impide que los usuarios no autorizados ingresen.

Cuando haya terminado, 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 pasarlo a un usuario inicial con la utilidad htpasswd:

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

Se le pedirá que seleccione y confirme una contraseña para el usuario que está creando. Posteriormente, el archivo se crea con la contraseña cifrada que ingresó.

Si desea ingresar un usuario adicional, debe hacerlo sin el indicador -c, así:

  1. sudo htpasswd /etc/phpmyadmin/.htpasswd additionaluser

Luego, reinicie Apache para poner en vigencia la autenticación .htaccess:

  1. 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

Después de ingresar la autenticación de Apache, se le llevará a la página de autenticación de phpMyAdmin normal para ingresar sus credenciales de MySQL. Al agregar un conjunto adicional de credenciales que no son de MySQL, le brinda a su base de datos una capa adicional de seguridad. Esto es deseable, ya que phpMyAdmin ha sido vulnerable a amenazas de seguridad en el pasado.

Conclusión

Ahora debería tener phpMyAdmin configurado y listo para usar en su servidor Ubuntu 20.04. A través de esta interfaz, puede crear bases de datos, usuarios y tablas, así como realizar las operaciones habituales, como eliminar y modificar estructuras y datos.