Cómo instalar y proteger phpMyAdmin en Ubuntu 18.04

Introducción

Índice
  1. Introducción
  • Prerrequisitos
  • Paso 1 — Instalación de phpMyAdmin
  • Paso 2: Ajuste de la autenticación y los privilegios del usuario
    1. Configuración del acceso con contraseña para la cuenta raíz de MySQL
    2. Configuración del acceso con contraseña para un usuario MySQL dedicado
  • Paso 3: Proteger su instancia phpMyAdmin
  • Conclusió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 sudoprivilegios, 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:

    1. sudo apt update

    Luego use aptpara descargar 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” aparece resaltado, pero no seleccionado. Para seleccionar Apache, presione SPACE, TABy luego ENTER.

    Si no hace clic SPACEpara seleccionar Apache, el instalador no moverá los archivos necesarios durante la instalación.

    • Para la selección del servidor, elijaapache2
    • Seleccione Yescuando se le pregunte si desea utilizar dbconfig-commonpara 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 mbstringextensión PHP, lo que puede hacer escribiendo:

    1. sudo phpenmod mbstring

    Luego reinicia Apache para que tus cambios sean reconocidos:

    1. 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 phpmyadminque 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_socketa mysql_native_passwordsi aún no lo ha hecho. Para ello, abra el indicador de MySQL desde su terminal:

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

    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 root se autentica mediante el auth_socketcomplemento. Para configurar la cuenta rootALTER USER para que se autentique con una contraseña, ejecute el siguiente comando. Asegúrese de cambiar passworda una contraseña segura de su elección:

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

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

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

    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)

    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:

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

    1. mysql -u root -p

    Desde allí, crea un nuevo usuario y asígnale una contraseña segura:

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

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

    A continuación, salga del shell MySQL:

    1. 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 .htaccessfuncionalidades de autenticación y autorización integradas de Apache.

    Para hacer esto, primero debe habilitar el uso de .htaccessanulaciones 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:

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

    Agregue una AllowOverride Alldirectiva dentro de la Directory /usr/share/phpmyadminsecció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 nanoeditar el archivo, hazlo pulsando CTRL + X, Yy luego ENTER.

    Para implementar los cambios realizados, reinicie Apache:

    1. sudo systemctl restart apache2

    Ahora que ha habilitado .htaccessel uso para su aplicación, necesita crear un .htaccessarchivo 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:

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

    1. 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 -cbandera, de la siguiente manera:

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

    SUSCRÍBETE A NUESTRO BOLETÍN 
    No te pierdas de nuestro contenido ni de ninguna de nuestras guías para que puedas avanzar en los juegos que más te gustan.

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

    Subir

    Este sitio web utiliza cookies para mejorar tu experiencia mientras navegas por él. Este sitio web utiliza cookies para mejorar tu experiencia de usuario. Al continuar navegando, aceptas su uso. Mas informacion