Come installare phpMyAdmin con Nginx su Debian 12, 11 o 10

phpMyAdmin è uno strumento open source ampiamente utilizzato scritto in PHP, progettato per gestire l'amministrazione di MySQL e MariaDB sul web. Offre un'interfaccia grafica intuitiva per eseguire varie operazioni sul database come la creazione, la modifica e l'eliminazione di database, tabelle, campi o righe, l'esecuzione di istruzioni SQL e la gestione delle autorizzazioni dell'utente. L'installazione di phpMyAdmin su Debian 12, 11 o 10 implica la configurazione manuale dello stack LEMP (Linux, NGINX, MySQL/MariaDB, PHP), seguita dal download e dalla configurazione dell'ultima build di phpMyAdmin.

L'utilizzo di phpMyAdmin semplifica la gestione del database, rendendolo accessibile anche agli utenti che potrebbero non sentirsi a proprio agio nell'utilizzare la riga di comando per le operazioni sul database. Questa guida ti guiderà attraverso i passaggi per installare manualmente lo stack LEMP, configurare phpMyAdmin e proteggere la tua configurazione.

Installa LEMP Stack su Debian per phpMyAdmin

Passaggio 1: aggiornamento del sistema Debian

Inizia ad aggiornare il tuo sistema Debian con i pacchetti più recenti per una configurazione sicura e senza errori. Questo passaggio proattivo mira a ridurre la probabilità di conflitti durante il processo di installazione.

sudo apt update && sudo apt upgrade

Se dovessi aggiornare il kernel o molti pacchetti, è necessario un riavvio.

Passaggio 2: installa Nginx

Innanzitutto, installa Nginx per stabilire uno stack LEMP. Esegui il seguente comando:

sudo apt install nginx

In genere, il sistema abilita il servizio Nginx per impostazione predefinita dopo l'installazione. Tuttavia, controlla sempre con prudenza il suo stato e assicurati che funzioni come previsto:

systemctl status nginx

Se il server non è attivo, utilizza il comando seguente per abilitare Nginx e assicurarti che si avvii automaticamente ad ogni riavvio:

sudo systemctl enable nginx --now

Questo comando installa la versione predefinita di Nginx.

Nota: se sei interessato a distribuire l'ultima versione stabile o principale di Nginx, considera di seguire la nostra guida su come aggiornare Nginx su Debian 12, 11 o 10 Linux.

Passaggio 3: installa MariaDB

Successivamente, installa il componente database nella configurazione dello stack LEMP. Molti scelgono MariaDB rispetto a MySQL per le sue prestazioni superiori e le sue funzionalità aggiuntive.

Per installare MariaDB, esegui quanto segue:

sudo apt install mariadb-server mariadb-client

Nota: se desideri installare una versione diversa di MariaDB dai repository ufficiali di MariaDB.org, la nostra guida su installazione di MariaDB 11.x o 10.x su Debian 12, 11 o 10 Linux.

Al termine, conferma l'abilitazione e il corretto funzionamento del servizio MariaDB, in modo simile alla verifica di Nginx:

systemctl status mariadb

Se MariaDB non è attivato, utilizza il comando seguente per attivarlo e assicurarti che si avvii al riavvio.

sudo systemctl enable mariadb --now

Per rafforzare la sicurezza del tuo MariaDB, esegui lo script di sicurezza fornito, mysql_secure_installation, durante il processo di installazione. Le impostazioni predefinite di una nuova installazione di MariaDB spesso lasciano vulnerabilità che gli autori malintenzionati possono sfruttare.

sudo mysql_secure_installation

L'esecuzione dello script di sicurezza ti guida attraverso diversi passaggi per rafforzare la sicurezza di MariaDB. Questi passaggi implicano l'impostazione della password root, la limitazione dell'accesso remoto, l'eliminazione degli account utente anonimi e la rimozione del database di test.

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!

Passaggio 4: installa PHP

Installa il servizio PHP per completare la configurazione dello stack LEMP. PHP, attraverso il servizio PHP-FPM e i moduli aggiuntivi necessari a phpMyAdmin, funge da ponte tra Nginx e MariaDB.

Nota: se desideri installare una versione specifica di PHP, fai riferimento alla nostra guida su installando qualsiasi versione di PHP 8.x disponibile su Debian 12, 11 o 10 Linux.

Per distribuire PHP e PHP-FPM, insieme ai moduli necessari sul tuo sistema Debian, esegui quanto segue:

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

Dopo l'installazione di PHP, conferma lo stato del servizio PHP, proprio come hai fatto per MariaDB e Nginx.

Per PHP 8.2, che è l'impostazione predefinita su Debian Bookworm, ad esempio, il comando specifico sarebbe:

systemctl status php8.2-fpm

Se il servizio PHP rimane inattivo, utilizzare il comando seguente per abilitarlo e assicurarsi che si avvii automaticamente ad ogni riavvio.

sudo systemctl enable php-fpm --now

Finalizza phpMyAdmin con Nginx e Debian

Questa sezione spiega la procedura per procurarsi l'archivio phpMyAdmin e impostare le directory, i permessi e le voci del database necessari.

Passaggio 1: crea un Super User per phpMyAdmin

Convenzionalmente, puoi accedere a phpMyAdmin utilizzando l'utente root. Tuttavia, per aderire a solide pratiche di sicurezza, crea un superutente distinto invece di utilizzare l'utente root. Questo concetto è in linea con la pratica Linux di sfruttare un utente sudo invece di accedere direttamente come root.

Innanzitutto, autenticati nell'interfaccia del terminale:

sudo mariadb -u root

Una volta avvenuta l'autenticazione, il passaggio successivo prevede la creazione di un database all'interno del terminale MariaDB.

CREATE USER PMAUSER IDENTIFIED BY 'password here change';

Successivamente, crea un utente e forniscigli le autorizzazioni richieste, come illustrato di seguito:

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

Sostituzione della password segnaposto “password qui cambia” con una password sicura è fondamentale prima di eseguire i comandi.

Dopo aver stabilito l'utente e impostato le autorizzazioni, ricordarsi di aggiornare i privilegi per le modifiche.

FLUSH PRIVILEGES;

Per uscire dal terminale MariaDB, utilizzare il seguente comando.

QUIT;

Passaggio 2: scarica il codice sorgente di phpMyAdmin

Questa sezione fa luce su come procurarsi l'archivio sorgente per phpMyAdmin. Sfruttare il terminale della riga di comando fornisce un metodo efficiente per scaricare la versione più recente in tutte le lingue.

Per scaricare l'archivio phpMyAdmin, esegui il seguente comando nel terminale.

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

Se desideri la versione solo in inglese di phpMyAdmin, sostituisci l'ultima riga del comando precedente con quanto segue:

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

Dopo il download, il passo successivo è estrarre l'archivio phpMyAdmin eseguendo il comando seguente:

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

Passaggio 3: configura phpMyAdmin

La fase successiva prevede la migrazione di tutti i file estratti alla loro destinazione finale nella directory /var/www/ utilizzando il comando mv.

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

Quando installi phpMyAdmin dal sorgente, noterai che una directory TMP non esiste per impostazione predefinita. Di conseguenza, sarebbe meglio se creassi questa directory manualmente.

sudo mkdir /var/www/phpmyadmin/tmp

La directory phpMyAdmin include un file di esempio di configurazione predefinito, che devi rinominare affinché phpMyAdmin lo riconosca. Utilizzare il comando CP per creare una copia del file predefinito nella directory /var/www/phpmyadmin/, garantendo un backup.

Per replicare config.sample.inc.php in config.inc.php, esegui il seguente comando:

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

Dopo aver copiato il file, aprilo con l'editor di testo preferito. In questo esempio, stiamo utilizzando l'editor di testo nano:

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

phpMyAdmin utilizza un codice Blowfish. Per modificare questa impostazione, vai alla riga che inizia con $cfg['blowfish_secret'].

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

Assegnare una stringa di 32 caratteri casuali tra virgolette singole. Utilizzare il programma pwgen come metodo conveniente per generare questa stringa. Esegui il seguente comando da terminale per installare pwgen:

Ciò mantiene tutte le azioni chiare e direttamente attribuite all'utente (o a chiunque stia eseguendo l'azione).

sudo apt install pwgen 

Dopo l'installazione, eseguire il comando seguente:

pwgen -s 32 1

Questo comando genererà una stringa di 32 caratteri casuali che fungeranno da segreto del pesce palla.

Esempio di inserimento della cifra nel file di configurazione (Non copiare):

UvqAlsvTxRdYIyO8TnlkJsVQaWs2LfgL

Esempio nel file di configurazione:

Per la maggior parte degli utenti, le restanti impostazioni predefinite dovrebbero essere adeguate. Tuttavia, se il tuo server si trova su un altro server all'interno della tua rete, dovrai individuare e modificare la riga $cfg['Servers'][$i]['host'] per riflettere l'indirizzo IP privato. Di seguito è riportata un'illustrazione di questa modifica:

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

Passaggio 4: configura le autorizzazioni dei file phpMyAdmin

Assegnare le autorizzazioni al proprietario della directory a www-user è fondamentale per garantire compatibilità e sicurezza.

Per impostare l'autorizzazione chown:

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

Per impostare l'autorizzazione chmod:

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

Nella sezione successiva, discuteremo della creazione e della configurazione del blocco del servizio Nginx per il tuo servizio phpMyAdmin.

Configurazione di un blocco server NGINX per phpMyAdmin

Per accedere all'interfaccia web di phpMyAdmin, creare un blocco server NGINX come passaggio essenziale. Stabilisci un sottodominio distinto per rafforzare le misure di sicurezza e respingere gli attacchi di forza bruta, che è altamente raccomandato. Sentiti libero di nominare questo sottodominio come preferisci.

Passaggio 1: crea il blocco server Nginx per phpMyAdmin su Debian

Iniziamo creando e aprendo il blocco server con l'editor di testo nano. Esegui il seguente comando:

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

Passaggio 2: configura Nginx Server Block

Dopo aver aperto correttamente il file di blocco del server, copia e incolla il seguente testo nel file. Assicurati di sostituire l'URL del dominio con il tuo:

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;
  }
}

Ecco alcuni punti critici da notare sull'esempio sopra:

  • /run/php/php8.2-fpm.sock; – Questo percorso deve riflettere la versione di PHP-FPM in uso. Ad esempio, potrebbe essere 8.3, 8.1, 8.0, 7.4, ecc.
  • root /var/www/phpmyadmin/; – Si riferisce al percorso definito in questa guida. Se il tuo phpMyAdmin si trova altrove, assicurati di aggiornare questa riga di conseguenza.

Se sei l'unica persona che accede al server da un indirizzo IP statico, valuta la possibilità di aggiungere il seguente codice sopra la prima voce della posizione:

  allow <your ip address>;
  deny all; 

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

Il codice sopra blocca efficacemente i visitatori non autorizzati della pagina con un errore 403, garantendo l'accesso esclusivamente al tuo indirizzo IP. È una difesa sostanziale contro gli attacchi di forza bruta, anche se potrebbe non essere adatta a tutte le configurazioni.

Passaggio 3: salvare e uscire dall'editor di testo

Per salvare le modifiche, premi (CTRL+O) e per uscire dall'editor, premi (CTRL+X).

Passaggio 4: creazione di un collegamento simbolico al file di configurazione

Successivamente, crea un collegamento simbolico dalla directory sites-available alla directory sites-enabled in cui risiede il file di configurazione:

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

Passaggio 5: esecuzione di un test di prova

Un test di prova è fondamentale prima di lanciarsi nel riavvio del servizio NGINX. Questa misura è essenziale negli ambienti live, poiché garantisce che qualsiasi modifica ai file di configurazione non attivi errori NGINX:

sudo nginx -t

Se la tua configurazione è priva di errori, il seguente output ti darà il benvenuto:

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

Passaggio 6: riavviare il servizio NGINX

Infine, per rendere effettive le modifiche, riavvia il tuo servizio NGINX:

sudo systemctl restart nginx

Questo conclude questa sezione sulla creazione di un blocco server NGINX per phpMyAdmin. Nella sezione successiva, aprirai e accederai all'interfaccia web di phpMyAdmin.

Navigazione nell'interfaccia Web di phpMyAdmin

Inizia la tua interazione con l'interfaccia di phpMyAdmin avviando il tuo browser web preferito. Inserisci pma.example.com nella barra degli indirizzi, assicurandoti di sostituire "example" con il nome di dominio o l'indirizzo IP del server. Ricorda, puoi anche utilizzare localhost in ambienti interni.

Dopo aver fatto ciò, arriverai alla schermata di accesso di phpMyAdmin, come dimostrato nell'immagine seguente:

Naviga nella schermata di accesso inserendo le tue credenziali e selezionando “procedi” o “accedi”. Questa azione ti consente di accedere alla dashboard di phpMyAdmin, illustrata nell'immagine successiva.

Come utente phpMyAdmin per la prima volta, potresti voler familiarizzare con la "pagina di stato". Fornisce una visione completa dello stato e dell'integrità del database.

Oltre alla pagina delle statistiche, phpMyAdmin incorpora anche un “sistema di consulenza”. Questa pratica funzionalità offre suggerimenti per migliorare le prestazioni.

Tuttavia, è prudente ricordare che mentre il consulente consiglia di attendere 24 ore, la maggior parte considera ottimale un minimo di 72 ore. Ciò garantisce che il campionamento del database avvenga per un periodo prolungato, fornendo raccomandazioni più accurate.

Inoltre, il sistema di consulenza non dovrebbe essere l’unica base per i cambiamenti. La modifica dei file di configurazione MySQL o MariaDB richiede un'attenta contemplazione, test approfonditi e possibilmente più iterazioni. L'obiettivo è ottimizzare le configurazioni per ottenere i migliori risultati e questo spesso richiede tempo.

Proteggi phpMyAdmin tramite il certificato SSL Let's Encrypt

Crea un certificato SSL tramite Certbot

Per rafforzare la sicurezza della tua istanza phpMyAdmin, esegui Nginx su HTTPS utilizzando un certificato SSL. Sfruttare Let's Encrypt, una rinomata autorità di certificazione che offre certificati SSL gratuiti, automatizzati e aperti, fornisce il metodo più semplice.

Innanzitutto, installa il pacchetto certbot, che aiuta nella gestione dei certificati SSL Let's Encrypt, eseguendo:

sudo apt install python3-certbot-nginx -y

Dopo aver completato l'installazione del pacchetto certbot, crea il tuo certificato SSL eseguendo:

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

All'avvio del processo di installazione del certificato:

  • Un messaggio richiederà informazioni sulla ricezione di e-mail da EFF (Electronic Frontier Foundation).
  • Che tu sia d'accordo (S) o meno (N), il sistema installerà e configurerà automaticamente il tuo certificato TLS.
  • La configurazione comprende l'applicazione dei reindirizzamenti HTTPS 301, l'aggiunta di un'intestazione Strict-Transport-Security e l'implementazione della pinzatura OCSP.
  • Ricordati di sostituire nel comando l'email e il nome del dominio con i tuoi dati precisi.

Una volta completata questa configurazione, il tuo URL migrerà da HTTP://pma.example.com a HTTPS://pma.example.com, reindirizzando automaticamente qualsiasi accesso all'URL HTTP precedente all'URL HTTPS sicuro.

Crea un lavoro Cron per il rinnovo SSL

Stabilisci un processo cron che rinnovi automaticamente i tuoi certificati per semplificare ulteriormente il processo. Certbot fornisce uno script di rinnovo automatico a questo scopo. Prima di impostare questo lavoro, eseguire giudiziosamente un test di prova per verificare che tutto funzioni correttamente utilizzando il seguente comando:

sudo certbot renew --dry-run

Per pianificare il rinnovo automatico, aprire il file crontab eseguendo:

sudo crontab -e

Controlla regolarmente il rinnovo del certificato, almeno una volta al giorno, per assicurarti che rimanga valido. Se si rende necessario un rinnovo, lo script aggiornerà automaticamente il certificato. Utilizza la sintassi cron per impostare il rinnovo all'orario che preferisci.

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

Conclusione

Con phpMyAdmin installato e configurato con successo sul tuo sistema Debian, puoi gestire in modo efficiente i tuoi database MySQL o MariaDB attraverso un'interfaccia web intuitiva. Aggiornamenti regolari e configurazioni di sicurezza garantiscono che il tuo strumento di gestione del database rimanga sicuro e aggiornato. Goditi la comodità e le potenti funzionalità offerte da phpMyAdmin per la gestione dei tuoi database su Debian.

Joshua James
Seguimi
Ultimi post di Joshua James (vedi tutto)

Lascia un commento