Cómo instalar phpMyAdmin desde el código fuente en Debian 10

Introducción

Índice
  1. Introducción
  • Prerrequisitos
  • Paso 1: Instalación de phpMyAdmin y los paquetes recomendados
  • Paso 2: Configurar phpMyAdmin manualmente
  • Paso 3: Configuración de Apache para servir phpMyAdmin
  • Paso 4: Proteger su instancia phpMyAdmin
  • Conclusión
  • Si bien muchos usuarios necesitan la funcionalidad de un sistema de administración de bases de datos como MariaDB, es posible que no se sientan cómodos interactuando con el sistema únicamente desde el indicador de MariaDB.

    phpMyAdmin se creó para que los usuarios puedan interactuar con MariaDB 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 Debian 10.

    Prerrequisitos

    Antes de comenzar con esta guía, necesitará lo siguiente:

    • Acceso a un servidor Debian 10. Este servidor debe tener un usuario no root con sudoprivilegios y un firewall configurado con ufw. Para configurarlo, siga nuestra Guía de configuración inicial de servidores para Debian 10.
    • Una pila LAMP ( Linux , Apache , MariaDB y PHP ) instalada en su servidor Debian 10. Siga nuestra guía sobre cómo instalar una pila LAMP en Debian 10 para configurarlo.

    Nota: MariaDB es una bifurcación de MySQL desarrollada por la comunidad y, aunque ambos programas están estrechamente relacionados, no son completamente intercambiables. Si bien phpMyAdmin fue diseñado específicamente para administrar bases de datos MySQL y hace referencia a MySQL en varios cuadros de diálogo, tenga la seguridad de que su instalación de MariaDB funcionará correctamente con phpMyAdmin.

    Por último, hay consideraciones de seguridad importantes al utilizar software como phpMyAdmin, ya que:

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

    Por estas razones, y debido a que es una aplicación PHP ampliamente implementada y frecuentemente blanco 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 sobre cómo proteger Apache con Let's Encrypt en Debian 10 para configurar uno. 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 y los paquetes recomendados

    Antes de instalar y configurar phpMyAdmin, la documentación oficial recomienda que instale algunas extensiones PHP en su servidor para habilitar ciertas funcionalidades y mejorar el rendimiento.

    Si siguió el tutorial de la pila LAMP como requisito previo, varios de estos módulos se habrán instalado junto con el phppaquete. Sin embargo, se recomienda que también instale estos paquetes:

    • php-mbstring:una extensión PHP utilizada para administrar cadenas que no sean ASCII y convertir cadenas a diferentes codificaciones
    • php-zip:un módulo PHP que admite la carga .zipde archivos a phpMyAdmin
    • php-gd:Otro módulo PHP, este habilita el soporte para la biblioteca de gráficos GD

    Primero, actualice el índice de paquetes de su servidor si no lo ha hecho recientemente:

    1. sudo apt update

    Luego use aptpara descargar los archivos e instalarlos en su sistema:

    1. sudo apt install php-mbstring php-zip php-gd

    A continuación, podemos instalar phpMyAdmin. Al momento de escribir este artículo, phpMyAdmin no está disponible en los repositorios predeterminados de Debian, por lo que deberá descargar el código fuente a su servidor desde el sitio de phpMyAdmin.

    Para ello, dirígete a la página de descargas de phpMyAdmin, desplázate hacia abajo hasta la tabla con enlaces de descarga de la última versión estable y copia el enlace de descarga que termina en tar.gz. Este enlace apunta a un archivo comprimido conocido como tarball que, al extraerlo, creará una serie de archivos en tu sistema. Al momento de escribir este artículo, la última versión es la 4.9.7.

    Nota: En esta página de Descargas, verá que hay enlaces de descarga etiquetados como all-languagesy english. Los all-languagesenlaces descargarán una versión de phpMyAdmin que le permitirá seleccionar uno de los 72 idiomas disponibles, mientras que los englishenlaces solo le permitirán usar phpMyAdmin en inglés.

    Esta guía utilizará el all-languagespaquete para ilustrar cómo instalar phpMyAdmin, pero si planea utilizar phpMyAdmin en inglés, puede instalar el englishpaquete. Solo asegúrese de reemplazar los enlaces y los nombres de archivo según sea necesario en los siguientes comandos.

    Reemplace el enlace del siguiente wgetcomando con el enlace de descarga que acaba de copiar y luego presione ENTER. Esto ejecutará el comando y descargará el archivo tarball a su servidor:

    1. wget https://files.phpmyadmin.net/phpMyAdmin/4.9.7/phpMyAdmin-4.9.7-all-languages.tar.gz

    Luego extrae el archivo tar:

    1. tar xvf phpMyAdmin-4.9.7-all-languages.tar.gz

    Esto creará una cantidad de archivos y directorios nuevos en su servidor bajo un directorio principal llamado .phpMyAdmin-4.9.7-all-languages

    A continuación, ejecute el siguiente comando. Esto moverá el directorio y todos sus subdirectorios al directorio, la ubicación donde phpMyAdmin espera encontrar sus archivos de configuración de forma predeterminada. También cambiará el nombre del directorio en su lugar a simplemente :phpMyAdmin-4.9.7-all-languages/usr/share/phpmyadmin

    1. sudo mv phpMyAdmin-4.9.7-all-languages/ /usr/share/phpmyadmin

    Con esto ya has instalado phpMyAdmin, pero hay una serie de cambios de configuración que debes realizar para poder acceder a phpMyAdmin a través de un navegador web.

    Paso 2: Configurar phpMyAdmin manualmente

    Al instalar phpMyAdmin con un gestor de paquetes, como se haría en un entorno Ubuntu, phpMyAdmin adopta de forma predeterminada el modo “Configuración cero”, que realiza varias acciones automáticamente para configurar el programa. Como en esta guía lo instalamos desde el código fuente, necesitaremos realizar esos pasos manualmente.

    Para comenzar, cree un nuevo directorio donde phpMyAdmin almacenará sus archivos temporales:

    1. sudo mkdir -p /var/lib/phpmyadmin/tmp

    Establezca www-data (el perfil de usuario de Linux que los servidores web como Apache utilizan de manera predeterminada para operaciones normales en sistemas Ubuntu y Debian) como propietario de este directorio:

    1. sudo chown -R www-data:www-data /var/lib/phpmyadmin

    Los archivos que extrajiste anteriormente incluyen un archivo de configuración de muestra que puedes usar como archivo de configuración base. Haz una copia de este archivo, guárdalo en el /usr/share/phpmyadmindirectorio y cámbiale el nombre config.inc.php:

    1. sudo cp /usr/share/phpmyadmin/config.sample.inc.php /usr/share/phpmyadmin/config.inc.php

    Abra este archivo con su editor de texto preferido. Aquí utilizaremos nano:

    1. sudo nano /usr/share/phpmyadmin/config.inc.php

    phpMyAdmin utiliza el cookiemétodo de autenticación por defecto, que permite iniciar sesión en phpMyAdmin como cualquier usuario válido de MariaDB con la ayuda de cookies. En este método, la contraseña del usuario de MariaDB se almacena y se cifra con el algoritmo Advanced Encryption Standard (AES) en una cookie temporal.

    Históricamente, phpMyAdmin utilizaba el cifrado Blowfish para este propósito, y esto todavía se refleja en su archivo de configuración. Desplácese hacia abajo hasta la línea que comienza con $cfg['blowfish_secret']. Se verá así:

    /usr/share/phpmyadmin/config.inc.php

    . . .$cfg['blowfish_secret'] = ''; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */. . .

    Entre las comillas simples, introduzca una cadena de 32 caracteres aleatorios. No es una frase de contraseña que deba recordar, sino que el algoritmo AES la utilizará internamente:

    /usr/share/phpmyadmin/config.inc.php

    . . .$cfg['blowfish_secret'] = 'STRINGOFTHIRTYTWORANDOMCHARACTERS'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */. . .

    Nota: Si la frase de contraseña que ingresa aquí tiene menos de 32 caracteres, las cookies cifradas serán menos seguras. Sin embargo, ingresar una cadena con más de 32 caracteres no causará ningún daño.

    Para generar una cadena de caracteres verdaderamente aleatoria, puedes instalar y utilizar el pwgenprograma:

    1. sudo apt install pwgen

    De forma predeterminada, pwgencrea contraseñas fáciles de pronunciar, aunque menos seguras. Sin embargo, al incluir el -sindicador, como en el siguiente comando, puede crear una contraseña completamente aleatoria y difícil de memorizar. Observe los dos argumentos finales de este comando: 32, que indica la longitud que pwgendebe tener la cadena de contraseña que se generará; y 1que indica pwgencuántas cadenas debe generar:

    1. pwgen -s 32 1

    A continuación, desplácese hacia abajo hasta el comentario que dice /* User used to manipulate with storage */. Esta sección incluye algunas directivas que definen un usuario de base de datos MariaDB llamado pma que realiza ciertas tareas administrativas dentro de phpMyAdmin. Según la documentación oficial, esta cuenta de usuario especial no es necesaria en los casos en los que solo un usuario accederá a phpMyAdmin, pero se recomienda en escenarios de múltiples usuarios.

    controluserQuite las barras que preceden a las directivas y descomente las mismas controlpass. Luego actualice la controlpassdirectiva para que apunte a una contraseña segura de su elección. Si no lo hace, la contraseña predeterminada permanecerá en su lugar y usuarios desconocidos podrían acceder fácilmente a su base de datos a través de la interfaz phpMyAdmin.

    Después de realizar estos cambios, esta sección del archivo se verá así:

    /usr/share/phpmyadmin/config.inc.php

    . . ./* User used to manipulate with storage */// $cfg['Servers'][$i]['controlhost'] = '';// $cfg['Servers'][$i]['controlport'] = '';$cfg['Servers'][$i]['controluser'] = 'pma';$cfg['Servers'][$i]['controlpass'] = 'password';. . .

    Debajo de esta sección, encontrará otra sección precedida por un comentario que dice /* Storage database and tables */. Esta sección incluye una serie de directivas que definen el almacenamiento de configuración de phpMyAdmin, una base de datos y varias tablas utilizadas por el usuario administrativo de la base de datos pma . Estas tablas habilitan una serie de funciones en phpMyAdmin, incluidos marcadores, comentarios, generación de PDF y más.

    Descomente cada línea en esta sección quitando las barras al comienzo de cada línea para que se vea así:

    /usr/share/phpmyadmin/config.inc.php

    . . ./* Storage database and tables */$cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';$cfg['Servers'][$i]['bookmarktable'] = 'pma__bookmark';$cfg['Servers'][$i]['relation'] = 'pma__relation';$cfg['Servers'][$i]['table_info'] = 'pma__table_info';$cfg['Servers'][$i]['table_coords'] = 'pma__table_coords';$cfg['Servers'][$i]['pdf_pages'] = 'pma__pdf_pages';$cfg['Servers'][$i]['column_info'] = 'pma__column_info';$cfg['Servers'][$i]['history'] = 'pma__history';$cfg['Servers'][$i]['table_uiprefs'] = 'pma__table_uiprefs';$cfg['Servers'][$i]['tracking'] = 'pma__tracking';$cfg['Servers'][$i]['userconfig'] = 'pma__userconfig';$cfg['Servers'][$i]['recent'] = 'pma__recent';$cfg['Servers'][$i]['favorite'] = 'pma__favorite';$cfg['Servers'][$i]['users'] = 'pma__users';$cfg['Servers'][$i]['usergroups'] = 'pma__usergroups';$cfg['Servers'][$i]['navigationhiding'] = 'pma__navigationhiding';$cfg['Servers'][$i]['savedsearches'] = 'pma__savedsearches';$cfg['Servers'][$i]['central_columns'] = 'pma__central_columns';$cfg['Servers'][$i]['designer_settings'] = 'pma__designer_settings';$cfg['Servers'][$i]['export_templates'] = 'pma__export_templates';. . .

    Estas tablas aún no existen, pero las crearemos en breve.

    Por último, desplácese hasta la parte inferior del archivo y agregue la siguiente línea. Esto configurará phpMyAdmin para que use el /var/lib/phpmyadmin/tmpdirectorio que creó anteriormente como su directorio temporal. phpMyAdmin usará este directorio temporal como caché de plantillas, lo que permite una carga más rápida de las páginas:

    /usr/share/phpmyadmin/config.inc.php

    . . .$cfg['TempDir'] = '/var/lib/phpmyadmin/tmp';

    Guarde y cierre el archivo después de agregar esta línea. Si utilizó nano, puede hacerlo presionando CTRL + X, Yy luego ENTER.

    A continuación, deberá crear la base de datos y las tablas de almacenamiento de phpMyAdmin. Cuando instaló phpMyAdmin en el paso anterior, venía con un archivo llamado create_tables.sql. Este archivo SQL contiene todos los comandos necesarios para crear la base de datos y las tablas de almacenamiento de configuración que phpMyAdmin necesita para funcionar correctamente.

    Ejecute el siguiente comando para utilizar el create_tables.sqlarchivo para crear la base de datos y las tablas de almacenamiento de configuración:

    1. sudo mariadb /usr/share/phpmyadmin/sql/create_tables.sql

    A continuación, deberá crear el usuario administrativo pma . Abra el indicador de MariaDB:

    1. sudo mariadb

    Desde el indicador, ejecute el siguiente comando para crear el usuario pma y otorgarle los permisos adecuados. Asegúrese de cambiarlo passwordpara que coincida con la contraseña que definió en el config.inc.phparchivo:

    1. GRANT SELECT, INSERT, UPDATE, DELETE ON phpmyadmin.* TO 'pma'@'localhost' IDENTIFIED BY 'password';

    Si aún no ha creado uno, también debe crear un usuario regular de MariaDB con el fin de administrar bases de datos a través de phpMyAdmin, ya que se recomienda que inicie sesión con una cuenta distinta a la del usuario pma . Puede crear un usuario que tenga privilegios para todas las tablas dentro de la base de datos, así como el poder de agregar, cambiar y eliminar privilegios de usuario, con este comando. Independientemente de los privilegios que le asigne a este usuario, asegúrese de darle también una contraseña segura:

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

    A continuación, salga del shell de MariaDB:

    1. exit

    phpMyAdmin ya está completamente instalado y configurado en su servidor. Sin embargo, su servidor Apache aún no sabe cómo servir la aplicación. Para resolver esto, crearemos un archivo de configuración Apache para él.

    Paso 3: Configuración de Apache para servir phpMyAdmin

    Al instalar phpMyAdmin desde los repositorios predeterminados, el proceso de instalación crea automáticamente un archivo de configuración de Apache y lo coloca en el /etc/apache2/conf-enabled/directorio. Sin embargo, como instalamos phpMyAdmin desde el código fuente, necesitaremos crear y habilitar este archivo manualmente.

    Crea un archivo llamado phpmyadmin.confen el /etc/apache2/conf-available/directorio:

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

    A continuación, agregue el siguiente contenido al archivo

    /etc/apache2/conf-available/phpmyadmin.conf

    # phpMyAdmin default Apache configurationAlias /phpmyadmin /usr/share/phpmyadminDirectory /usr/share/phpmyadmin    Options SymLinksIfOwnerMatch    DirectoryIndex index.php    IfModule mod_php5.c        IfModule mod_mime.c            AddType application/x-httpd-php .php        /IfModule        FilesMatch ".+.php$"            SetHandler application/x-httpd-php        /FilesMatch        php_value include_path .        php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp        php_admin_value open_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/php-gettext/:/usr/share/php/php-php-gettext/:/usr/share/javascript/:/usr/share/php/tcpdf/:/usr/share/doc/phpmyadmin/:/usr/share/php/phpseclib/        php_admin_value mbstring.func_overload 0    /IfModule    IfModule mod_php.c        IfModule mod_mime.c            AddType application/x-httpd-php .php        /IfModule        FilesMatch ".+.php$"            SetHandler application/x-httpd-php        /FilesMatch        php_value include_path .        php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp        php_admin_value open_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/php-gettext/:/usr/share/php/php-php-gettext/:/usr/share/javascript/:/usr/share/php/tcpdf/:/usr/share/doc/phpmyadmin/:/usr/share/php/phpseclib/        php_admin_value mbstring.func_overload 0    /IfModule/Directory# Authorize for setupDirectory /usr/share/phpmyadmin/setup    IfModule mod_authz_core.c        IfModule mod_authn_file.c            AuthType Basic            AuthName "phpMyAdmin Setup"            AuthUserFile /etc/phpmyadmin/htpasswd.setup        /IfModule        Require valid-user    /IfModule/Directory# Disallow web access to directories that don't need itDirectory /usr/share/phpmyadmin/templates    Require all denied/DirectoryDirectory /usr/share/phpmyadmin/libraries    Require all denied/DirectoryDirectory /usr/share/phpmyadmin/setup/lib    Require all denied/Directory

    Este es el archivo de configuración Apache phpMyAdmin predeterminado que se encuentra en las instalaciones de Ubuntu, aunque también será adecuado para una configuración de Debian.

    Guarde y cierre el archivo, luego habilítelo escribiendo:

    1. sudo a2enconf phpmyadmin.conf

    Luego vuelva a cargar el apache2servicio para que los cambios de configuración surtan efecto:

    1. sudo systemctl reload apache2

    A continuación, podrá acceder a la pantalla de inicio de sesión de phpMyAdmin navegando a la siguiente URL en su navegador web:

    https://your_domain/phpmyadmin

    Verá la siguiente pantalla de inicio de sesión:

    Inicie sesión en la interfaz con el nombre de usuario y la contraseña de MariaDB que haya configurado. Después de iniciar sesión, verá la interfaz de usuario, que tendrá un aspecto similar al siguiente:

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

    Edite el archivo vinculado que se ha colocado en su directorio de configuración de Apache:

    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    IfModule mod_php5.c    . . .

    Cuando haya agregado esta línea, guarde y cierre el archivo.

    Para implementar los cambios realizados, reinicie Apache:

    1. sudo systemctl restart apache2

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

    /usr/share/phpmyadmin/.htaccess

    AuthType BasicAuthName "Restricted Files"AuthUserFile /usr/share/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 /usr/share/phpmyadmin/.htpasswd. Ahora puedes crear este archivo y pasarle un usuario inicial con la htpasswdutilidad:

    1. sudo htpasswd -c /usr/share/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://your_domain_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 MariaDB. Esta configuración agrega una capa adicional de seguridad, lo cual es conveniente ya que phpMyAdmin ha sufrido vulnerabilidades en el pasado.

    Conclusión

    Ahora debería tener phpMyAdmin configurado y listo para usar en su servidor Debian 10. 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.

    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