Cómo instalar y proteger phpMyAdmin en Ubuntu 18.04

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 cliente de línea de comandos MySQL.
phpMyAdmin se creó para que los usuarios puedan interactuar con MySQL a través de una interfaz web. En esta guía, analizaremos cómo instalar y proteger phpMyAdmin para que pueda usarlo de forma segura para administrar sus bases de datos en un sistema Ubuntu 18.04.
Prerrequisitos
Para completar este tutorial, necesitará lo siguiente:
- Un servidor que ejecute Ubuntu 18.04. Este servidor debe tener un usuario administrativo que no sea root con
sudo
privilegios, así como un firewall configurado con UFW. Para configurarlo, siga nuestra guía de configuración inicial de servidores para Ubuntu 18.04 . - Una pila LAMP instalada en su servidor. Puede seguir esta guía sobre cómo instalar una pila LAMP en Ubuntu 18.04 para configurarla.
Por último, 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 se trata de una aplicación PHP ampliamente implementada que suele ser objeto de ataques, nunca debería 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 sobre cómo proteger Apache con Let’s Encrypt en Ubuntu 18.04 . Para ello, deberá registrar un nombre de dominio , crear registros DNS para su servidor y configurar un host virtual Apache .
Una vez que haya terminado con 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.
Primero, actualice el índice de paquetes de su servidor:
- sudo apt update
Luego use apt
para descargar los archivos e instalarlos en su sistema:
- sudo apt install phpmyadmin php-mbstring php-gettext
Esto le hará algunas preguntas para configurar su instalación correctamente.
Advertencia: cuando aparece el mensaje, “apache2” aparece resaltado, pero no seleccionado. Para seleccionar Apache, presione SPACE
, TAB
y luego ENTER
.
Si no hace clic SPACE
para seleccionar Apache, el instalador no moverá los archivos necesarios durante la instalación.
- Para la selección del servidor, elija
apache2
- 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
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. Lo único que debe hacer es habilitar explícitamente la mbstring
extensión PHP, lo que puede hacer escribiendo:
- sudo phpenmod mbstring
Luego reinicia Apache para que tus cambios sean reconocidos:
- sudo systemctl restart apache2
phpMyAdmin ya está instalado y configurado. Sin embargo, antes de poder iniciar sesión y comenzar 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
Cuando instalaste phpMyAdmin en tu servidor, se 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 configuraste durante la instalación, se recomienda que inicies sesión como tu 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 los sistemas Ubuntu que ejecutan MySQL 5.7 (y versiones posteriores), el usuario rootauth_socket
de MySQL está configurado para autenticarse mediante el complemento de forma predeterminada en lugar de con 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 usuario root de MySQL, deberá cambiar su método de autenticación de auth_socket
a mysql_native_password
si aún no lo ha hecho. Para ello, abra el indicador 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 MySQL con el siguiente comando:
- 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, el usuario root se autentica mediante el auth_socket
complemento. Para configurar la cuenta rootALTER USER
para que se autentique con una contraseña, ejecute el siguiente comando. Asegúrese de cambiar password
a una contraseña segura de su elección:
- ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
Luego, ejecute FLUSH PRIVILEGES
lo que le indica al servidor que vuelva a cargar las tablas de concesión y ponga en vigencia los nuevos cambios:
- FLUSH PRIVILEGES;
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 |+------------------+-------------------------------------------+-----------------------+-----------+| 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)
Esta salida indica que el usuario root se autenticará mediante una contraseña. Ahora puede iniciar sesión en la interfaz phpMyAdmin como su usuario root con la contraseña que ha establecido aquí.
Configuración del acceso con contraseña para un usuario MySQL dedicado
Como alternativa, es posible que algunas personas consideren que se adapta mejor a su flujo de trabajo conectarse a phpMyAdmin con un usuario dedicado. Para ello, vuelva a abrir el shell MySQL:
- sudo mysql
Nota: Si tiene habilitada la autenticación con contraseña, como se describe en la sección anterior, deberá utilizar un comando diferente para acceder al shell MySQL. Lo siguiente ejecutará su cliente MySQL con privilegios de usuario normales y solo obtendrá privilegios de administrador dentro de la base de datos mediante la autenticación:
- mysql -u root -p
Desde allí, crea un nuevo usuario y asígnale una contraseña segura:
- CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';
A continuación, otorgue al nuevo usuario los privilegios adecuados. Por ejemplo, puede otorgarle privilegios a todas las tablas de la base de datos, así como la capacidad de agregar, cambiar 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
:
http://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: Proteger su instancia phpMyAdmin
Debido a su ubicuidad, phpMyAdmin es un objetivo popular para los atacantes, y debe tener especial cuidado para evitar el acceso no autorizado. Una de las formas más sencillas de hacerlo es colocar una puerta de enlace delante de toda la aplicación mediante las .htaccess
funcionalidades de autenticación y autorización integradas de Apache.
Para hacer esto, primero debe habilitar el uso de .htaccess
anulaciones de archivos editando su archivo de configuración de Apache.
Utilice su editor de texto favorito para editar el archivo vinculado que se ha colocado en el directorio de configuración de Apache. En este ejemplo se utiliza 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 FollowSymLinks DirectoryIndex index.php AllowOverride All . . .
Cuando hayas añadido esta línea, guarda y cierra el archivo. Si solías nano
editar el archivo, hazlo pulsando CTRL + X
, Y
y luego ENTER
.
Para implementar los cambios realizados, reinicie Apache:
- sudo systemctl restart apache2
Ahora que ha habilitado .htaccess
el uso para su aplicación, necesita crear un .htaccess
archivo para implementar cierta seguridad.
Para que esto funcione correctamente, 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:
- sudo nano /usr/share/phpmyadmin/.htaccess
Dentro de este archivo, ingrese la siguiente información:
/usr/share/phpmyadmin/.htaccess
AuthType BasicAuthName "Restricted Files"AuthUserFile /etc/phpmyadmin/.htpasswdRequire 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 con contraseña mediante un archivo de contraseñas.AuthName
: Esto configura el mensaje para el cuadro de diálogo de autenticación. Debe mantenerlo genérico para que los usuarios no autorizados no obtengan información sobre lo que se está protegiendo.AuthUserFile
: Esto establece la ubicación del archivo de contraseña que se utilizará para la autenticación. Debe estar fuera de los directorios que se están utilizando. Crearemos este archivo en breve.Require valid-user
: Esto especifica que solo los usuarios autenticados deben tener acceso a este recurso. Esto es lo que realmente impide el ingreso de usuarios no autorizados.
Cuando haya terminado, guarde y cierre el archivo.
La ubicación que seleccionaste para tu archivo de contraseñas era /etc/phpmyadmin/.htpasswd
. Ahora puedes crear este archivo y pasarle un usuario inicial con la htpasswd
utilidad:
- sudo htpasswd -c /etc/phpmyadmin/.htpasswd username
Se le solicitará que seleccione y confirme una contraseña para el usuario que está creando. Luego, 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
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 lo dirigirá a la página de autenticación habitual de phpMyAdmin para ingresar sus credenciales de MySQL. Esta configuración agrega una capa adicional de seguridad, lo cual es deseable ya que phpMyAdmin ha sufrido vulnerabilidades en el pasado.
Conclusión
Ahora deberías tener phpMyAdmin configurado y listo para usar en tu servidor Ubuntu 18.04. Con esta interfaz, puedes crear fácilmente bases de datos, usuarios, tablas, etc., y realizar las operaciones habituales, como eliminar y modificar estructuras y datos.
Deja una respuesta