Cómo instalar phpMyAdmin con Nginx en Debian 12, 11 o 10

phpMyAdmin es una herramienta de código abierto ampliamente utilizada escrita en PHP, diseñada para manejar la administración de MySQL y MariaDB a través de la web. Ofrece una interfaz gráfica intuitiva para realizar diversas operaciones de bases de datos, como crear, modificar y eliminar bases de datos, tablas, campos o filas, ejecutar declaraciones SQL y administrar permisos de usuario. La instalación de phpMyAdmin en Debian 12, 11 o 10 implica configurar la pila LEMP (Linux, NGINX, MySQL/MariaDB, PHP) manualmente, seguido de descargar y configurar la última versión de phpMyAdmin.

El uso de phpMyAdmin simplifica la administración de la base de datos, haciéndola accesible incluso para usuarios que no se sienten cómodos usando la línea de comando para las operaciones de la base de datos. Esta guía lo guiará a través de los pasos para instalar manualmente la pila LEMP, configurar phpMyAdmin y proteger su configuración.

Instale LEMP Stack en Debian para phpMyAdmin

Paso 1: Actualizar el sistema Debian

Comience a actualizar su sistema Debian con los paquetes más recientes para una configuración segura y sin errores. Este paso proactivo tiene como objetivo reducir la probabilidad de conflictos durante el proceso de instalación.

sudo apt update && sudo apt upgrade

Si actualiza el Kernel o muchos paquetes, es necesario reiniciar.

Paso 2: instalar Nginx

Primero, instale Nginx para establecer una pila LEMP. Ejecute el siguiente comando:

sudo apt install nginx

Normalmente, el sistema habilita el servicio Nginx de forma predeterminada después de la instalación. Sin embargo, siempre verifique con prudencia su estado y asegúrese de que funcione como se espera:

systemctl status nginx

Si el servidor no está activo, use el siguiente comando para habilitar Nginx y asegurarse de que se inicie automáticamente en cada reinicio:

sudo systemctl enable nginx --now

Este comando instala la versión predeterminada de Nginx.

Nota: Si está interesado en implementar la última versión estable o principal de Nginx, considere seguir nuestra guía sobre cómo actualizar Nginx en Debian 12, 11 o 10 Linux.

Paso 3: Instale MariaDB

A continuación, instale el componente de la base de datos en la configuración de la pila LEMP. Muchos eligen MariaDB en lugar de MySQL debido a su rendimiento superior y características adicionales.

Para instalar MariaDB, ejecute lo siguiente:

sudo apt install mariadb-server mariadb-client

Nota: Si desea instalar una versión diferente de MariaDB desde los repositorios oficiales de MariaDB.org, nuestra guía sobre instalar MariaDB 11.x o 10.x en Debian 12, 11 o 10 Linux.

Al finalizar, confirme la habilitación y el funcionamiento correcto del servicio MariaDB, similar a su verificación de Nginx:

systemctl status mariadb

Si MariaDB no está activado, use el siguiente comando para activarlo y asegurarse de que se inicie al reiniciar.

sudo systemctl enable mariadb --now

Para reforzar la seguridad de su MariaDB, ejecute el script de seguridad proporcionado, mysql_secure_installation, durante el proceso de instalación. La configuración predeterminada de una instalación nueva de MariaDB a menudo deja vulnerabilidades que los actores malintencionados pueden aprovechar.

sudo mysql_secure_installation

La ejecución del script de seguridad lo guía a través de varios pasos para fortalecer la seguridad de MariaDB. Estos pasos implican configurar la contraseña de root, limitar el acceso remoto, eliminar cuentas de usuarios anónimos y eliminar la base de datos de prueba.

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.

Enter current password for root (enter for none): 
OK, successfully used password, moving on...

Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.

You already have your root account protected, so you can safely answer 'n'.

Switch to unix_socket authentication [Y/n] Y <---- Type Y then press the ENTER KEY.
Enabled successfully!
Reloading privilege tables..
 ... Success!


You already have your root account protected, so you can safely answer 'n'.

Change the root password? [Y/n] Y <---- Type Y then press the ENTER KEY.
New password: 
Re-enter new password: 
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] Y <---- Type Y then press the ENTER KEY.
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] Y <---- Type Y then press the ENTER KEY.
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] Y <---- Type Y then press the ENTER KEY.
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] Y <---- Type Y then press the ENTER KEY.
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

Paso 4: instalar PHP

Instale el servicio PHP para completar la configuración de la pila LEMP. PHP, a través del servicio PHP-FPM y los módulos adicionales que necesita phpMyAdmin, sirve como puente entre Nginx y MariaDB.

Nota: Si desea instalar una versión específica de PHP, consulte nuestra guía en instalar cualquier versión de PHP 8.x disponible en Debian 12, 11 o 10 Linux.

Para implementar PHP y PHP-FPM, junto con los módulos necesarios en su sistema Debian, ejecute lo siguiente:

sudo apt install php-fpm php-mbstring php-bcmath php-xml php-mysql php-common php-gd php-cli php-curl php-zip php-gd

Después de la instalación de PHP, confirme el estado del servicio PHP, tal como lo hizo con MariaDB y Nginx.

Para PHP 8.2, que es el predeterminado en Debian Bookworm, por ejemplo, el comando específico sería:

systemctl status php8.2-fpm

Si el servicio PHP permanece inactivo, use el siguiente comando para habilitarlo y asegurarse de que se inicie automáticamente en cada reinicio.

sudo systemctl enable php-fpm --now

Finalice phpMyAdmin con Nginx y Debian

Esta sección explica el procedimiento para obtener el archivo phpMyAdmin y configurar los directorios, permisos y entradas de la base de datos necesarios.

Paso 1: crea un superusuario para phpMyAdmin

Convencionalmente, puedes acceder a phpMyAdmin utilizando el usuario root. Sin embargo, para cumplir con prácticas de seguridad sólidas, cree un superusuario distinto en lugar de utilizar el usuario raíz. Este concepto se alinea con la práctica de Linux de aprovechar un usuario sudo en lugar de iniciar sesión directamente como root.

Primero, autentícate en la interfaz del terminal:

sudo mariadb -u root

Tras una autenticación exitosa, el paso siguiente consiste en crear una base de datos dentro de la terminal MariaDB.

CREATE USER PMAUSER IDENTIFIED BY 'password here change';

A continuación, cree un usuario y otórguele los permisos necesarios, como se ilustra a continuación:

GRANT ALL PRIVILEGES ON *.* TO 'PMAUSER'@'localhost' IDENTIFIED BY 'password here change' WITH GRANT OPTION;

Reemplazo de la contraseña del marcador de posición “contraseña aquí cambio” Con una contraseña segura es fundamental antes de ejecutar los comandos.

Al establecer el usuario y configurar los permisos, recuerde actualizar los privilegios para los cambios.

FLUSH PRIVILEGES;

Para salir de la terminal MariaDB, utilice el siguiente comando.

QUIT;

Paso 2: descargue el código fuente de phpMyAdmin

Esta sección arroja luz sobre cómo obtener el archivo fuente para phpMyAdmin. Aprovechar la terminal de línea de comandos proporciona un método eficaz para descargar la última versión en todos los idiomas.

Para descargar el archivo phpMyAdmin, ejecute el siguiente comando en la terminal.

DATA="$(wget https://www.phpmyadmin.net/home_page/version.txt -q -O-)"
URL="$(echo $DATA | cut -d ' ' -f 3)"
VERSION="$(echo $DATA | cut -d ' ' -f 1)"
wget https://files.phpmyadmin.net/phpMyAdmin/${VERSION}/phpMyAdmin-${VERSION}-all-languages.tar.gz

Si desea la versión solo en inglés de phpMyAdmin, reemplace la última línea del comando anterior con lo siguiente:

wget https://files.phpmyadmin.net/phpMyAdmin/${VERSION}/phpMyAdmin-${VERSION}-english.tar.gz

Después de la descarga, el siguiente paso es extraer el archivo phpMyAdmin ejecutando el siguiente comando:

tar xvf phpMyAdmin-${VERSION}-all-languages.tar.gz

Paso 3: Configurar phpMyAdmin

La siguiente fase implica migrar todos los archivos extraídos a su destino final en el directorio /var/www/ usando el comando mv.

sudo mv phpMyAdmin-*/ /var/www/phpmyadmin

Cuando instala phpMyAdmin desde la fuente, observará que no existe un directorio TMP de forma predeterminada. En consecuencia, sería mejor que creara este directorio manualmente.

sudo mkdir /var/www/phpmyadmin/tmp

El directorio phpMyAdmin incluye un archivo de ejemplo de configuración predeterminado, cuyo nombre debe cambiar para que phpMyAdmin lo reconozca. Utilice el comando CP para crear una copia del archivo predeterminado en el directorio /var/www/phpmyadmin/, asegurando una copia de seguridad.

Para replicar config.sample.inc.php en config.inc.php, ejecute el siguiente comando:

sudo cp /var/www/phpmyadmin/config.sample.inc.php /var/www/phpmyadmin/config.inc.php

Después de copiar el archivo, ábralo con un editor de texto preferido. En este ejemplo, utilizamos el editor de texto nano:

sudo nano /var/www/phpmyadmin/config.inc.php

phpMyAdmin emplea un cifrado Blowfish. Para modificar esta configuración, navegue hasta la línea que comienza con $cfg['blowfish_secret'].

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

Asigne una cadena de 32 caracteres aleatorios entre comillas simples. Utilice el programa pwgen como método conveniente para generar esta cadena. Ejecute el siguiente comando de terminal para instalar pwgen:

Esto mantiene todas las acciones claras y atribuidas directamente al usuario (o a quien esté realizando la acción).

sudo apt install pwgen 

Después de la instalación, ejecute el siguiente comando:

pwgen -s 32 1

Este comando generará una cadena de 32 caracteres aleatorios que servirá como secreto del pez globo.

Ejemplo de inserción del cifrado en el archivo de configuración. (No copies):

UvqAlsvTxRdYIyO8TnlkJsVQaWs2LfgL

Ejemplo en el archivo de configuración:

Para la mayoría de los usuarios, las configuraciones predeterminadas restantes deberían ser adecuadas. Sin embargo, si su servidor está ubicado en otro servidor dentro de su red, deberá ubicar y modificar la línea $cfg['Servers'][$i]['host'] para reflejar la dirección IP privada. A continuación se muestra una ilustración de esta modificación:

$cfg['Servers'][$i]['host'] = '192.168.55.101';

Paso 4: Configurar los permisos del archivo phpMyAdmin

Asignar permisos al propietario del directorio para el usuario www es crucial para garantizar la compatibilidad y la seguridad.

Para configurar el permiso chown:

sudo chown -R www-data:www-data /var/www/phpmyadmin/

Para configurar el permiso chmod:

sudo find /var/www/phpmyadmin/ -type d -exec chmod 755 {} \;
sudo find /var/www/phpmyadmin/ -type f -exec chmod 644 {} \;

En la sección siguiente, analizaremos la creación y configuración del bloque de servicio Nginx para su servicio phpMyAdmin.

Configurar un bloque de servidor NGINX para phpMyAdmin

Para acceder a la interfaz web de phpMyAdmin, cree un bloque de servidor NGINX como paso esencial. Establezca un subdominio distinto para reforzar las medidas de seguridad y defenderse de ataques de fuerza bruta, lo cual es muy recomendable. Siéntase libre de nombrar este subdominio como le parezca adecuado.

Paso 1: cree un bloque de servidor Nginx para phpMyAdmin en Debian

Comencemos creando y abriendo su bloque de servidor con el editor de texto nano. Ejecute el siguiente comando:

sudo nano /etc/nginx/sites-available/phpmyadmin.conf

Paso 2: configurar el bloque del servidor Nginx

Al abrir con éxito el archivo de bloqueo del servidor, copie y pegue el siguiente texto en el archivo. Asegúrese de sustituir la URL del dominio por la suya propia:

server {
  listen 80;
  listen [::]:80;
  server_name pma.example.com;
  root /var/www/phpmyadmin/;
  index index.php index.html index.htm index.nginx-debian.html;

  access_log /var/log/nginx/phpmyadmin_access.log;
  error_log /var/log/nginx/phpmyadmin_error.log;

  location / {
    try_files $uri $uri/ /index.php;
  }

  location ~ ^/(doc|sql|setup)/ {
    deny all;
  }

  location ~ \.php$ {
    fastcgi_pass unix:/run/php/php8.2-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
    include snippets/fastcgi-php.conf;
  }

  location ~ /\.ht {
    deny all;
  }
}

Aquí hay algunos puntos críticos a tener en cuenta sobre el ejemplo anterior:

  • /run/php/php8.2-fpm.sock; – Esta ruta debe reflejar la versión de PHP-FPM en uso. Por ejemplo, podría ser 8.3, 8.1, 8.0, 7.4, etc.
  • raíz /var/www/phpmyadmin/; – Se refiere al camino definido en esta guía. Si su phpMyAdmin está ubicado en otro lugar, asegúrese de actualizar esta línea en consecuencia.

Si usted es la única persona que accede al servidor desde una dirección IP estática, considere agregar el siguiente código encima de la primera entrada de ubicación:

  allow <your ip address>;
  deny all; 

  location / {
    try_files $uri $uri/ /index.php;
  }

El código anterior bloquea efectivamente a los visitantes no autorizados a la página con un error 403, otorgando acceso únicamente a su dirección IP. Es una defensa sustancial contra ataques de fuerza bruta, aunque puede que no se adapte a todas las configuraciones.

Paso 3: guardar y salir del editor de texto

Para guardar los cambios, presione (CTRL+O) y para salir del editor, presione (CTRL+X).

Paso 4: crear un enlace simbólico al archivo de configuración

A continuación, cree un enlace simbólico desde el directorio de sitios disponibles al directorio habilitado para sitios donde reside el archivo de configuración:

sudo ln -s /etc/nginx/sites-available/phpmyadmin.conf /etc/nginx/sites-enabled/

Paso 5: realizar una prueba de funcionamiento en seco

Una prueba de funcionamiento es crucial antes de reiniciar el servicio NGINX. Esta medida es esencial en entornos en vivo, ya que garantiza que cualquier modificación en sus archivos de configuración no genere errores de NGINX:

sudo nginx -t

Si su configuración no tiene errores, recibirá el siguiente resultado:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Paso 6: reiniciar su servicio NGINX

Finalmente, para que los cambios sean efectivos, reinicie su servicio NGINX:

sudo systemctl restart nginx

Esto concluye esta sección sobre la creación de un bloque de servidor NGINX para phpMyAdmin. En la siguiente sección, abrirá e iniciará sesión en la interfaz web de phpMyAdmin.

Navegando por la interfaz web phpMyAdmin

Comience su interacción con la interfaz de phpMyAdmin iniciando su navegador web preferido. Ingrese pma.example.com en la barra de direcciones, asegurándose de reemplazar "ejemplo" con su nombre de dominio o dirección IP del servidor. Recuerde, también puede utilizar localhost en entornos internos.

Después de hacer esto, accederá a la pantalla de inicio de sesión de phpMyAdmin, como se muestra en la siguiente imagen:

Navegue por la pantalla de inicio de sesión ingresando sus credenciales y seleccionando "continuar" o "iniciar sesión". Esta acción le otorga acceso al panel de phpMyAdmin, que muestra la imagen siguiente.

Como usuario de phpMyAdmin por primera vez, es posible que desee familiarizarse con la "página de estado". Proporciona una visión completa del estado y la salud de su base de datos.

Más allá de la página de estadísticas, phpMyAdmin también incorpora un "sistema de asesoramiento". Esta práctica función ofrece sugerencias para mejorar el rendimiento.

Sin embargo, conviene recordar que si bien el asesor recomienda esperar 24 horas, la mayoría considera más óptimo un mínimo de 72 horas. Esto garantiza que el muestreo de la base de datos se produzca durante un período prolongado, proporcionando recomendaciones más precisas.

Además, el sistema de asesoramiento no debería ser la única base para realizar cambios. Modificar sus archivos de configuración de MySQL o MariaDB requiere una cuidadosa consideración, pruebas exhaustivas y posiblemente múltiples iteraciones. El objetivo es optimizar las configuraciones para obtener los mejores resultados, y esto suele llevar tiempo.

Asegure phpMyAdmin a través del certificado SSL Let's Encrypt

Cree un certificado SSL a través de Certbot

Para reforzar la seguridad de su instancia de phpMyAdmin, ejecute Nginx a través de HTTPS utilizando un certificado SSL. Aprovechar Let's Encrypt, una reconocida autoridad certificadora que ofrece certificados SSL gratuitos, automatizados y abiertos, proporciona el método más sencillo.

Primero, instale el paquete certbot, que ayuda a administrar los certificados SSL de Let's Encrypt, ejecutando:

sudo apt install python3-certbot-nginx -y

Después de completar la instalación del paquete certbot, cree su certificado SSL ejecutando:

sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email you@example.com -d pma.example.com

Al iniciar el proceso de instalación del certificado:

  • Un mensaje le preguntará sobre la recepción de correos electrónicos de EFF (Electronic Frontier Foundation).
  • Ya sea que esté de acuerdo (Y) o en desacuerdo (N), el sistema instalará y configurará automáticamente su certificado TLS.
  • La configuración abarca la aplicación de redirecciones HTTPS 301, la adición de un encabezado Strict-Transport-Security y la implementación de grapado OCSP.
  • Recuerde sustituir el correo electrónico y el nombre de dominio en el comando con sus datos precisos.

Al completar esta configuración, su URL migrará de HTTP://pma.example.com a HTTPS://pma.example.com, redirigiendo automáticamente cualquier acceso a la URL HTTP anterior a la URL HTTPS segura.

Crear un trabajo cron para la renovación de SSL

Establezca una tarea cron que renueve automáticamente sus certificados para agilizar aún más el proceso. Certbot proporciona un script de renovación automática para este propósito. Antes de configurar este trabajo, realice con prudencia una prueba de funcionamiento para confirmar que todo funciona correctamente utilizando el siguiente comando:

sudo certbot renew --dry-run

Para programar la renovación automática, abra el archivo crontab ejecutando:

sudo crontab -e

Verifique periódicamente la renovación del certificado, al menos una vez al día, para asegurarse de que su certificado siga siendo válido. Si es necesaria una renovación, el script actualizará automáticamente el certificado. Utilice la sintaxis cron para configurar la renovación en el momento que prefiera.

00 00 */1 * * /usr/sbin/certbot-auto renew

Conclusión

Con phpMyAdmin instalado y configurado exitosamente en su sistema Debian, puede administrar eficientemente sus bases de datos MySQL o MariaDB a través de una interfaz web fácil de usar. Las actualizaciones periódicas y las configuraciones de seguridad garantizan que su herramienta de administración de bases de datos permanezca segura y actualizada. Disfrute de la conveniencia y las potentes funciones que ofrece phpMyAdmin para administrar sus bases de datos en Debian.

Joshua James
Sígueme
Últimas entradas de Joshua James (ver todo)

Deja un comentario