Búsqueda de sitios web

Cómo instalar y asegurar 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 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 18.04.

requisitos previos

Para completar este tutorial, necesitará lo siguiente:

  • Un servidor que ejecuta Ubuntu 18.04. Este servidor debe tener un usuario administrativo no root con privilegios sudo, así como un firewall configurado con UFW. Para configurar esto, siga nuestra guía de configuración inicial del servidor 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 configurar esto.

Finalmente, 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.

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

Paso 1: Instalar phpMyAdmin

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

Primero, actualice el índice de paquetes de su servidor:

  1. sudo apt update

Luego use apt para desplegar los archivos e instalarlos en su sistema:

  1. 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” está resaltado, pero no seleccionado. Para seleccionar Apache, presione SPACE, TAB, luego ENTER .

Si no presiona ESPACIO para seleccionar Apache, el instalador no moverá los archivos necesarios durante la instalación.

  • Para la selección del servidor, elija apache2
  • 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

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. Lo único que debe hacer es habilitar explícitamente la extensión PHP mbstring, 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. 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 mysql_native_password 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 | 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 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 mysql_native_password BY 'password';

Luego, ejecute FLUSH PRIVILEGES que le dice al servidor que vuelva a cargar las tablas de concesión y ponga en vigencia sus nuevos cambios:

  1. FLUSH PRIVILEGES;

Vuelva a verificar los métodos de autenticación empleados por cada uno de sus usuarios para confirmar que root 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 | 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)

Este resultado indica que el usuario raíz se autenticará mediante una contraseña. Ahora puede iniciar sesión en la interfaz de phpMyAdmin como su usuario raíz 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

Nota: si tiene habilitada la autenticación de contraseña, como se describe en la sección anterior, deberá usar un comando diferente para acceder al shell de MySQL. Lo siguiente ejecutará su cliente MySQL con privilegios de usuario regulares, y solo obtendrá privilegios de administrador dentro de la base de datos al autenticarse:

  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 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:

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, accederá a la interfaz de usuario de phpMyAdmin:

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 de las formas más fáciles de hacer esto 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 su archivo de configuración de Apache.

Use su editor de texto favorito para editar el archivo vinculado que se ha colocado en su directorio de configuración de Apache. Este ejemplo usa 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 FollowSymLinks
    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 .htaccess para su aplicación, debe crear un archivo .htaccess 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

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. 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ía tener phpMyAdmin configurado y listo para usar en su servidor Ubuntu 18.04. Con esta interfaz, puede crear fácilmente bases de datos, usuarios, tablas, etc., y realizar las operaciones habituales, como eliminar y modificar estructuras y datos.