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

Introducció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
sudo
privilegios y un firewall configurado conufw
. 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 php
paquete. 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 codificacionesphp-zip
:un módulo PHP que admite la carga.zip
de archivos a phpMyAdminphp-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:
- sudo apt update
Luego use apt
para descargar los archivos e instalarlos en su sistema:
- 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-languages
y english
. Los all-languages
enlaces descargarán una versión de phpMyAdmin que le permitirá seleccionar uno de los 72 idiomas disponibles, mientras que los english
enlaces solo le permitirán usar phpMyAdmin en inglés.
Esta guía utilizará el all-languages
paquete para ilustrar cómo instalar phpMyAdmin, pero si planea utilizar phpMyAdmin en inglés, puede instalar el english
paquete. 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 wget
comando 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:
- wget https://files.phpmyadmin.net/phpMyAdmin/4.9.7/phpMyAdmin-4.9.7-all-languages.tar.gz
Luego extrae el archivo tar:
- 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
- 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:
- 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:
- 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/phpmyadmin
directorio y cámbiale el nombre config.inc.php
:
- 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
:
- sudo nano /usr/share/phpmyadmin/config.inc.php
phpMyAdmin utiliza el cookie
mé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 pwgen
programa:
- sudo apt install pwgen
De forma predeterminada, pwgen
crea contraseñas fáciles de pronunciar, aunque menos seguras. Sin embargo, al incluir el -s
indicador, 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 pwgen
debe tener la cadena de contraseña que se generará; y 1
que indica pwgen
cuántas cadenas debe generar:
- 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.
controluser
Quite las barras que preceden a las directivas y descomente las mismas controlpass
. Luego actualice la controlpass
directiva 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/tmp
directorio 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
, Y
y 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.sql
archivo para crear la base de datos y las tablas de almacenamiento de configuración:
- sudo mariadb /usr/share/phpmyadmin/sql/create_tables.sql
A continuación, deberá crear el usuario administrativo pma . Abra el indicador de MariaDB:
- sudo mariadb
Desde el indicador, ejecute el siguiente comando para crear el usuario pma y otorgarle los permisos adecuados. Asegúrese de cambiarlo password
para que coincida con la contraseña que definió en el config.inc.php
archivo:
- 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:
- GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;
A continuación, salga del shell de MariaDB:
- 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.conf
en el /etc/apache2/conf-available/
directorio:
- 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:
- sudo a2enconf phpmyadmin.conf
Luego vuelva a cargar el apache2
servicio para que los cambios de configuración surtan efecto:
- 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 .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.
Edite el archivo vinculado que se ha colocado en su directorio de configuración de Apache:
- 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 IfModule mod_php5.c . . .
Cuando haya agregado esta línea, guarde y cierre el archivo.
Para implementar los cambios realizados, reinicie Apache:
- sudo systemctl restart apache2
Ahora que ha habilitado .htaccess
el 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:
- 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 htpasswd
utilidad:
- 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 -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://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.
Deja una respuesta