Vai al contenuto principale
50% di sconto tutti i piani, tempo limitato. A partire da $2.48/mo
10 min left
Database e analisi

Come installare Adminer su un VPS Linux (con Nginx e sicurezza adeguata)

H Di Haze 10 min di lettura
Adminer login screen served by Nginx on a Linux VPS

Un'istanza Adminer lasciata in esecuzione su un indirizzo aperto è uno dei modi più silenziosi di perdere un database. Qualcuno distribuisce il singolo file PHP per controllare una tabella, l'URL funziona e il file rimane lì per mesi finché una copia obsoleta non diventa una superficie di attacco. Questo schema di errore è il motivo per cui questa guida all'installazione di Adminer su un VPS Linux dedica tanto spazio alla protezione quanto alla messa in esercizio.

Adminer è un singolo file PHP (circa 503 KB nella versione completa) che supporta MySQL, MariaDB, PostgreSQL, SQLite e molti altri database. È banale da distribuire, il che è esattamente il motivo per cui spesso viene distribuito con poca attenzione.

Lo installerete su un VPS moderno con Ubuntu o Debian, Nginx e PHP-FPM, aggiungendo autenticazione HTTP, una lista di IP consentiti e HTTPS con Let's Encrypt, e concluderete con una regola chiara su quando saltare del tutto la configurazione pubblica e raggiungere Adminer tramite un tunnel SSH.

TL;DR

  • Adminer è un singolo file PHP che si scarica in un webroot con wget in un webroot; Nginx e PHP-FPM lo servono.
  • Un'istanza pubblica di Adminer ha bisogno di tutti e tre: uno strato di autenticazione HTTP, una lista di IP consentiti e HTTPS. Uno solo di essi non è sufficiente.
  • Per i database più sensibili, non esporre Adminer del tutto: collegarlo a localhost e raggiungerlo tramite un tunnel SSH.
  • Aggiornare è un solo comando: rieseguire il wget comando di download. I recenti aggiornamenti di sicurezza rendono il mantenimento aggiornato un vero compito operativo, non solo auspicabile.

Prerequisiti: cosa serve prima di installare

Questa guida riguarda Ubuntu 26.04 e 24.04 più Debian 13, con note di compatibilità per Ubuntu 22.04 e Debian 12. Le versioni predefinite di PHP-FPM sono 8.5 su Ubuntu 26.04, 8.3 su Ubuntu 24.04, 8.4 su Debian 13, 8.2 su Debian 12 e 8.1 su Ubuntu 22.04.

  • Un VPS Linux con Ubuntu 22.04, Ubuntu 24.04, Ubuntu 26.04, Debian 12 o Debian 13, con un utente che abbia sudo accesso.
  • Un server di database (MySQL, MariaDB o PostgreSQL) già in esecuzione, su questo VPS o su uno che Adminer può raggiungere tramite la rete. Questa guida non installa un database; installa lo strumento usato per amministrarne uno.
  • PHP-FPM dai repository supportati dal sistema operativo. Sebbene il file compilato di Adminer supporti PHP 5.3+, usare la versione attuale fornita dalla distribuzione elencata sopra anziché installare una versione PHP obsoleta.
  • Per la configurazione HTTPS pubblica, è necessario un hostname che punti al VPS e le porte TCP in entrata 80 e 443 disponibili. flusso di lavoro Certbot Nginx usa la validazione HTTP-01 sulla porta 80. Let's Encrypt supporta ora certificati di indirizzo IP a breve durata, ma Certbot non li installa automaticamente tramite il suo flusso di lavoro Nginx, quindi questa guida usa un hostname.

Nota: questa guida utilizza Nginx intenzionalmente. Se si usa Apache, la logica di download e protezione si applica ancora, ma la configurazione del blocco server di seguito no.

Installare Nginx e PHP-FPM

Iniziate aggiornando l'indice dei pacchetti e installando Nginx e PHP-FPM insieme all'estensione del database PHP necessaria al vostro server:

sudo apt update
sudo apt install -y nginx php-fpm php-mysql

Per un backend PostgreSQL, installare php-pgsql al posto di, o insieme a, php-mysql:

sudo apt install -y php-pgsql

Verificare che il socket PHP-FPM esista:

ls /run/php/

Abbinare il nome del file socket alla versione elencata sopra, ad esempio php8.5-fpm.sock su Ubuntu 26.04, php8.3-fpm.sock su Ubuntu 24.04, o php8.4-fpm.sock su Debian 13. Se il socket atteso manca, controllare il servizio corrispondente con systemctl status php8.5-fpm, sostituendo 8.5 con la versione installata nel proprio sistema operativo.

Consiglio professionale: un mismatch del socket è una possibile causa di un 502 Bad Gateway. Abbinare fastcgi_pass al nome del file in /run/php/, confermare che il servizio PHP-FPM corrispondente sia in esecuzione e controllare /var/log/nginx/error.log se l'errore persiste.

Scaricare Adminer

Creare una directory per servire Adminer e scaricarvi il singolo file. latest.php L'URL punta sempre alla versione stabile attuale:

sudo mkdir -p /var/www/adminer
sudo wget -O /var/www/adminer/adminer.php https://www.adminer.org/latest.php

Se si lavora solo con MySQL o MariaDB, il build solo per MySQL è più piccolo (circa 406 KB) e si scarica nello stesso modo:

sudo wget -O /var/www/adminer/adminer.php https://www.adminer.org/latest-mysql.php

Mantenere la directory di Adminer di proprietà di root concedendo al PHP-FPM l'accesso in lettura:

sudo chown -R root:root /var/www/adminer
sudo chmod 755 /var/www/adminer
sudo chmod 644 /var/www/adminer/adminer.php

You do not need to track the version number: the latest.php L'URL significa che rieseguire il download è anche il percorso di aggiornamento, a cui ritorna la sezione manutenzione.

Configurare il blocco server Nginx

Creare un blocco server che serva la directory di Adminer e passi le richieste .php le richieste al socket PHP-FPM identificato in precedenza. Aprire un nuovo file del sito:

sudo nano /etc/nginx/sites-available/adminer

Incollare il seguente, sostituendo db.example.com con il hostname già puntato al VPS e confermando che il fastcgi_pass il socket corrisponde alla versione PHP in uso:

# /etc/nginx/sites-available/adminer
server {
    listen 80;
    server_name db.example.com;
    root /var/www/adminer;

    location = / {
        return 302 /adminer.php;
    }

    location = /adminer.php {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
    }

    location / {
        return 404;
    }
}

Abilitare il sito creando un symlink in sites-enabled, poi testare la configurazione senza ancora ricaricare Nginx:

sudo ln -s /etc/nginx/sites-available/adminer /etc/nginx/sites-enabled/
sudo nginx -t

nginx -t dovrebbe riportare che la sintassi è valida e il test ha avuto successo. Non ricaricare ancora Nginx perché il sito non ha autenticazione o restrizione IP. Continuare attraverso quei due passi di rafforzamento; il passo di restrizione IP esegue il primo ricaricamento dopo che entrambe le protezioni sono in atto.

Bloccare l'Accesso: Autenticazione, Restrizione IP e HTTPS

Un'istanza pubblica di Adminer si trova direttamente di fronte alle credenziali del database, quindi ha bisogno di difese stratificate anziché di una singola serratura. I tre livelli sottostanti svolgono funzioni diverse: l'autenticazione HTTP ferma chiunque senza password al server web, la lista degli IP consentiti blocca le connessioni da indirizzi non approvati, e HTTPS impedisce che le credenziali digitate attraversino la rete in testo normale. Aggiungere tutti e tre. Nessuno di essi sostituisce gli altri.

Aggiungere l'autenticazione HTTP di base

Installare htpasswd utilità, inclusa nel pacchetto apache2-utils pacchetto su Ubuntu e Debian:

sudo apt install -y apache2-utils

Creare un file di password e un utente (verrà richiesta la password):

sudo htpasswd -B -C 10 -c /etc/nginx/.htpasswd adminuser
sudo chown root:www-data /etc/nginx/.htpasswd
sudo chmod 640 /etc/nginx/.htpasswd

Aggiungere le direttive alla posizione PHP esatta di Adminer in modo che la richiesta PHP stessa sia protetta:

location = /adminer.php {
    auth_basic           "Restricted";
    auth_basic_user_file /etc/nginx/.htpasswd;
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}

Entrambe le direttive sono documentate nel documentazione del modulo Nginx HTTP auth_basic. Esegui sudo nginx -t per convalidare la configurazione, ma non ricaricare ancora Nginx; la lista degli IP consentiti viene aggiunta dopo. Non inviare le credenziali Basic Auth su HTTP non cifrato; attendere finché HTTPS non è abilitato di seguito.

Limitare l'accesso per indirizzo IP

L'autenticazione di base blocca gli utenti non autenticati, ma Nginx continua a ricevere richieste da ogni fonte. Sostituire la posizione PHP di Adminer esistente con il blocco combinato seguente in modo che le regole IP e le direttive Basic Auth rimangano in un unico luogo:

location = /adminer.php {
    satisfy all;

    allow                203.0.113.10;
    allow                203.0.113.0/28;
    deny                 all;

    auth_basic           "Restricted";
    auth_basic_user_file /etc/nginx/.htpasswd;
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}

Sostituire gli indirizzi di esempio con il proprio indirizzo IP pubblico effettivo o l'intervallo di rete attendibile. Mantenere solo le voci allow voci necessarie ed eliminare gli esempi non utilizzati. La prima voce mostra un singolo indirizzo, la seconda mostra un intervallo CIDR. Nginx restituisce 403 Forbidden agli indirizzi che non corrispondono a una allow regola allow. documentazione del modulo di accesso Nginx documenta la sintassi delle direttive. Testare e ricaricare Nginx:

sudo nginx -t && sudo systemctl reload nginx

Abilitare HTTPS con Let's Encrypt

Con un dominio puntato al VPS, installare Certbot e il suo plugin Nginx, quindi richiedere un certificato:

sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d db.example.com

Certbot modifica il blocco server per servire HTTPS sulla porta 443 e offre di reindirizzare HTTP a HTTPS; accettare il reindirizzamento. Installa anche un timer di rinnovo, in modo che il certificato venga rinnovato automaticamente prima della scadenza. Si può confermare il percorso di rinnovo con sudo certbot renew --dry-run, che dovrebbe completarsi senza errori.

Visitate ora https://db.example.com/adminer.php da un indirizzo consentito e confermare che Nginx richiede le credenziali Basic Auth prima che Adminer si carichi.

Adminer login screen after first successful load, showing the database system dropdown and server and username fields

Scegliere il modello di accesso: HTTPS pubblico vs. tunnel SSH

La configurazione sopra è appropriata quando si ha bisogno di accesso tramite browser a un database da più macchine o quando aprire una sessione SSH non è pratico. Non è l'unico modello e per un database sensibile non è il più difensivo.

Per configurazioni sensibili, non esporre Adminer pubblicamente. Linee guida di sicurezza ufficiali di Adminer raccomanda di renderlo inaccessibile dall'internet pubblico quando possibile. Se si sceglie l'accesso solo tramite tunnel, sostituire il blocco server Nginx pubblico con questa configurazione solo loopback e saltare la configurazione HTTPS pubblica:

# /etc/nginx/sites-available/adminer
server {
    listen 127.0.0.1:8080 default_server;
    server_name _;
    root /var/www/adminer;

    location = / {
        return 302 /adminer.php;
    }

    location = /adminer.php {
        auth_basic           "Restricted";
        auth_basic_user_file /etc/nginx/.htpasswd;
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
    }

    location / {
        return 404;
    }
}

Testare e ricaricare la configurazione sostitutiva:

sudo nginx -t && sudo systemctl reload nginx

Aprire quindi il tunnel dalla propria macchina:

ssh -N -L 127.0.0.1:8080:127.0.0.1:8080 user@your-server-ip

Con il tunnel attivo, aprire http://127.0.0.1:8080/adminer.php. Nginx accetta le connessioni di Adminer solo tramite l'interfaccia di loopback del VPS, mentre SSH trasporta il traffico attraverso la sua connessione cifrata. Questo utilizza il comportamento descritto nella documentazione di inoltro locale OpenSSH.

Usare la configurazione con HTTPS pubblico, Basic Auth e lista degli IP consentiti quando si ha bisogno di accesso diretto tramite browser da più macchine. Preferire la configurazione SSH solo loopback quando l'accesso pubblico non è necessario.

Punto chiave: Il più sicuro Adminer è quello che non è mai raggiungibile dall'internet pubblico.

Mantenere Adminer aggiornato

L'istanza dimenticata è il vero rischio qui, e vale la pena trattarla come un'attività pianificata piuttosto che un ripensamento. Aggiornare Adminer è un solo comando, lo stesso wget comando usato per installarlo, perché latest.php scarica sempre la versione attuale:

sudo wget -O /var/www/adminer/adminer.php https://www.adminer.org/latest.php

Questa non è una preoccupazione teorica. Adminer 5.4.3, pubblicato il 9 luglio 2026, ha affrontato sette avvisi di sicurezza GitHub in un singolo rilascio. Il precedente avviso per CVE-2026-25892 ha dimostrato che anche l'endpoint di verifica della versione di Adminer poteva essere trasformato in un vettore di denial-of-service non autenticato; il problema è stato risolto nella versione 5.4.2. Una copia obsoleta accumula vulnerabilità documentate pubblicamente, quindi aggiornarla dovrebbe essere manutenzione ordinaria.

Nota: Rimanere sulla versione upstream corrente di Adminer. repository AdminerEvo è stato archiviato nel gennaio 2025 e non è un'alternativa attivamente mantenuta.

Distribuzione su un VPS

Se si preferisce saltare i passaggi manuali, Adminer è disponibile come distribuzione con un clic nel il marketplace di Cloudzy su una VPS Linux Cloudzy. L'immagine del marketplace utilizza Apache, Basic Auth e un certificato autofirmato, quindi è diversa dallo stack Nginx, lista degli IP consentiti e Let's Encrypt sopra. Esaminare le differenze di sicurezza prima di inserire le credenziali del database di produzione.

Il footprint di Adminer è trascurabile; è il database a determinare il dimensionamento. Scegliere CPU, memoria e storage in base alla dimensione dei dati e degli indici del database, al carico delle query, al numero di connessioni, ai backup e alla crescita prevista, non in base ad Adminer stesso.

Domande frequenti

È Sicuro Esporre Adminer Pubblicamente su un VPS?

Non da solo. Se è necessario esporre Adminer pubblicamente, posizionarlo dietro HTTP Basic Authentication, una lista degli IP consentiti e HTTPS insieme. Questi controlli riducono il rischio ma non rendono l'esposizione pubblica priva di rischi. Per database sensibili, collegare Adminer a localhost e raggiungerlo tramite un tunnel SSH.

Come si accede ad Adminer senza esporlo a Internet?

Configurare il blocco server Nginx solo loopback mostrato sopra in modo che Adminer ascolti su 127.0.0.1:8080, poi esegui ssh -N -L 127.0.0.1:8080:127.0.0.1:8080 user@your-server-ip sulla propria macchina. Aprire http://127.0.0.1:8080/adminer.php mentre il tunnel è in esecuzione.

Adminer può connettersi a PostgreSQL oltre che a MySQL?

Sì. Adminer supporta MySQL, MariaDB, PostgreSQL, SQLite, MS SQL e Oracle pronto all'uso, con più database disponibili tramite plugin. Installare l'estensione PHP corrispondente per il database, ad esempio php-pgsql per PostgreSQL, in modo che PHP possa comunicare con esso.

Come Mantengo Adminer Aggiornato?

Eseguire nuovamente il comando di download: sudo wget -O /var/www/adminer/adminer.php https://www.adminer.org/latest.php. Il latest.php L'URL restituisce sempre la versione stabile attuale, quindi questo sovrascrive la copia con la versione più recente. Le recenti versioni di sicurezza rendono questo degno di essere fatto secondo una pianificazione piuttosto che solo quando lo si ricorda.

Devo installare Adminer tramite il apt Pacchetto o Scaricarlo Direttamente?

Scaricare direttamente il singolo file. Fornisce immediatamente la versione attuale e rende gli aggiornamenti un comando di una riga, mentre un pacchetto di distribuzione può essere in ritardo rispetto alla versione ufficiale. Il file diretto è lo stesso strumento con un percorso più breve alle ultime correzioni di sicurezza.

Condividi

Altro dal blog

Continua a leggere.

Pronto a distribuire? Da 2,48 $/mese.

Cloud indipendente, dal 2008. AMD EPYC, NVMe, 40 Gbps. Rimborso entro 14 giorni.