Een Adminer-instantie die op een open adres draait is een van de stilste manieren om een database te verliezen. Iemand deployt het enkele PHP-bestand om een tabel te controleren, de URL werkt, en het bestand blijft daar maandenlang staan totdat een verouderde kopie een aanvalsoppervlak wordt. Dat foutenpatroon is waarom deze gids over het installeren van Adminer op een Linux VPS net zoveel ruimte besteedt aan beveiliging als aan ingebruikname.
Adminer is een enkel PHP-bestand (ongeveer 503 KB in de volledige build) dat MySQL, MariaDB, PostgreSQL, SQLite en verschillende andere databases ondersteunt. Het is triviaal te deployen, wat precies de reden is waarom het vaak onzorgvuldig wordt ingezet.
U installeert het op een moderne Ubuntu of Debian VPS met Nginx en PHP-FPM, voegt HTTP-authenticatie, een IP-allowlist en HTTPS met Let's Encrypt toe, en sluit af met een duidelijke regel voor wanneer u de publieke setup volledig overslaat en Adminer via een SSH-tunnel bereikt.
TL;DR
- Adminer is een enkel PHP-bestand dat u met
wgetnaar een webroot downloadt; Nginx en PHP-FPM leveren het. - Een publieke Adminer-instantie heeft alle drie nodig: een HTTP-authenticatielaag, een IP-allowlist en HTTPS. Elk van hen alleen is niet genoeg.
- Voor de meest gevoelige databases kunt u Adminer helemaal niet blootstellen: bind het aan
localhosten het via een SSH-tunnel bereiken. - Updaten is één commando: voer de
wgetdownloadopdracht opnieuw. Recente beveiligingsreleases maken het actueel houden een echte operationele taak, niet slechts wenselijk.
Vereisten: wat u nodig heeft voordat u installeert
Deze gids richt zich op Ubuntu 26.04 en 24.04 plus Debian 13, met compatibiliteitsnoten voor Ubuntu 22.04 en Debian 12. De standaard PHP-FPM versies zijn 8.5 op Ubuntu 26.04, 8.3 op Ubuntu 24.04, 8.4 op Debian 13, 8.2 op Debian 12 en 8.1 op Ubuntu 22.04.
- Een Linux VPS met Ubuntu 22.04, Ubuntu 24.04, Ubuntu 26.04, Debian 12 of Debian 13, met een gebruiker die
sudotoegang. - Een al draaiende databaseserver (MySQL, MariaDB of PostgreSQL), ofwel op deze VPS of een waar Adminer via het netwerk bij kan. Deze gids installeert geen database; het installeert het gereedschap dat u gebruikt om er een te beheren.
- PHP-FPM uit de officieel ondersteunde repositories van het besturingssysteem. Hoewel het gecompileerde Adminer-bestand PHP 5.3+ ondersteunt, gebruik de huidige versie die door de distributie wordt geleverd zoals hierboven vermeld in plaats van een verouderde PHP-versie te installeren.
- Voor de openbare HTTPS-setup heeft u een hostnaam nodig die naar de VPS verwijst en inkomende TCP-poorten 80 en 443 beschikbaar. De Certbot Nginx workflow gebruikt HTTP-01-validatie op poort 80. Let's Encrypt ondersteunt nu kortlopende IP-adrescertificaten, maar Certbot installeert ze niet automatisch via zijn Nginx-workflow, dus deze gids gebruikt een hostnaam.
Opmerking: Deze gids gebruikt Nginx bewust. Als u Apache gebruikt, zijn de download- en hardening-logica nog steeds van toepassing, maar de server-blockconfiguratie hieronder niet.
Nginx en PHP-FPM installeren
Begin door de pakketindex te vernieuwen en Nginx en PHP-FPM te installeren samen met de PHP-database-extensie die uw server nodig heeft:
sudo apt update
sudo apt install -y nginx php-fpm php-mysql
Voor een PostgreSQL-backend, installeer php-pgsql in plaats van, of naast, php-mysql:
sudo apt install -y php-pgsql
Bevestig dat de PHP-FPM-socket bestaat:
ls /run/php/
Zorg dat de socket-bestandsnaam overeenkomt met de hierboven vermelde versie, bijvoorbeeld php8.5-fpm.sock op Ubuntu 26.04, php8.3-fpm.sock op Ubuntu 24.04, of php8.4-fpm.sock op Debian 13. Als de verwachte socket ontbreekt, controleer de bijbehorende service met systemctl status php8.5-fpm, vervang 8.5 door de versie die op uw besturingssysteem is geïnstalleerd.
Pro-tip: Een socket-mismatch is een mogelijke oorzaak van een
502 Bad Gateway. Zorg datfastcgi_passaan de bestandsnaam onder/run/php/, bevestig dat de bijbehorende PHP-FPM-service draait en controleer/var/log/nginx/error.logals de fout aanhoudt.
Adminer downloaden
Maak een directory aan voor Adminer en download het enige bestand erin. De latest.php URL verwijst altijd naar de huidige stabiele release:
sudo mkdir -p /var/www/adminer
sudo wget -O /var/www/adminer/adminer.php https://www.adminer.org/latest.php
Als u alleen met MySQL of MariaDB werkt, is de MySQL-only build kleiner (ongeveer 406 KB) en wordt op dezelfde manier opgehaald:
sudo wget -O /var/www/adminer/adminer.php https://www.adminer.org/latest-mysql.php
Houd de Adminer-directory in eigendom van root terwijl u PHP-FPM leestoegang geeft:
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 URL betekent dat het opnieuw uitvoeren van de download ook uw updatepad is, waar de onderhoudssectie op terugkomt.
Het Nginx-serverblok configureren
Maak een serverblok dat de Adminer-directory bedient en .php verzoeken door naar de PHP-FPM-socket die u eerder hebt geïdentificeerd. Open een nieuw sitebestand:
sudo nano /etc/nginx/sites-available/adminer
Plak het volgende, vervangend db.example.com door de hostname die al naar uw VPS verwijst en bevestig dat de fastcgi_pass socket overeenkomt met uw PHP-versie:
# /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;
}
}
Schakel de site in door deze te symlinkken in sites-enabled, en test de configuratie dan zonder Nginx al te herladen:
sudo ln -s /etc/nginx/sites-available/adminer /etc/nginx/sites-enabled/
sudo nginx -t
nginx -t zou moeten melden dat de syntaxis geldig is en de test geslaagd is. Herlaad Nginx nog niet omdat de site geen authenticatie of IP-beperking heeft. Ga door met die twee hardening-stappen; de IP-beperkingsstap voert de eerste herlaadactie uit nadat beide beschermingen zijn ingesteld.
Toegang vergrendelen: Authenticatie, IP-beperking en HTTPS
Een publieke Adminer-instantie staat direct voor uw databasereferenties en heeft dus gelaagde verdedigingen nodig in plaats van een enkel slot. De drie lagen hieronder doen verschillende dingen: HTTP-authenticatie houdt iedereen zonder wachtwoord bij de webserver tegen, de IP-allowlist blokkeert verbindingen van niet-goedgekeurde adressen, en HTTPS voorkomt dat de ingevoerde referenties in platte tekst over het netwerk gaan. Voeg alle drie toe. Geen van hen vervangt de anderen.
HTTP-basisauthenticatie toevoegen
Installeer het htpasswd hulpprogramma, meegeleverd in het pakket apache2-utils op Ubuntu en Debian:
sudo apt install -y apache2-utils
Maak een wachtwoordbestand en een gebruiker aan (u wordt gevraagd om het wachtwoord):
sudo htpasswd -B -C 10 -c /etc/nginx/.htpasswd adminuser
sudo chown root:www-data /etc/nginx/.htpasswd
sudo chmod 640 /etc/nginx/.htpasswd
Voeg de instructies toe aan de exacte Adminer PHP-locatie zodat het PHP-verzoek zelf beschermd is:
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;
}
Beide richtlijnen zijn gedocumenteerd in de Nginx HTTP auth_basic module referentie. Uitvoeren sudo nginx -t om de configuratie te valideren, maar herlaad Nginx nog niet; de IP-allowlist wordt hierna toegevoegd. Stuur de Basic Auth-referenties niet via gewone HTTP; wacht tot HTTPS hieronder is ingeschakeld.
Toegang beperken op IP-adres
Basisauthenticatie blokkeert niet-geverifieerde gebruikers, maar Nginx ontvangt nog steeds verzoeken van elke bron. Vervang de bestaande Adminer PHP-locatie door het volgende gecombineerde blok zodat de IP-regels en Basic Auth-instructies op één locatie blijven:
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;
}
Vervang de voorbeeldadressen door uw werkelijke publieke IP-adres of vertrouwd netwerkbereik. Bewaar alleen de allow die u nodig hebt en verwijder ongebruikte voorbeelden. De eerste invoer toont een enkel adres, terwijl de tweede een CIDR-bereik toont. Nginx geeft 403 Forbidden naar adressen die niet overeenkomen met een allow allow-regel. De Nginx access module referentie documenteert de directives-syntaxis. Test en herlaad Nginx:
sudo nginx -t && sudo systemctl reload nginx
HTTPS inschakelen met Let's Encrypt
Met een domein dat naar de VPS verwijst, installeert u Certbot en zijn Nginx-plugin, dan vraagt u een certificaat aan:
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d db.example.com
Certbot bewerkt uw serverblok om HTTPS op poort 443 te bedienen en biedt aan om HTTP naar HTTPS te omleiden; accepteer de omleiding. Er wordt ook een vernieuwingstimer geïnstalleerd, zodat het certificaat automatisch wordt vernieuwd voordat het verloopt. U kunt het vernieuwingspad bevestigen met sudo certbot renew --dry-run, dat zonder fouten zou moeten voltooien.
Ga nu naar https://db.example.com/adminer.php van een toegestaan adres en bevestig dat Nginx de Basic Auth-referenties vraagt voordat Adminer laadt.
Uw toegangsmodel kiezen: Publiek HTTPS of SSH-tunnel
De bovenstaande setup is geschikt wanneer u browsertoegang tot een database nodig heeft vanaf meerdere machines of wanneer het openen van een SSH-sessie onpraktisch is. Het is niet het enige model, en voor een gevoelige database is het niet het meest defensieve.
Voor gevoelige setups kunt u Adminer niet publiekelijk blootstellen. Adminer's officiële beveiligingsrichtlijnen beveelt aan om het ontoegankelijk te maken vanaf het openbare internet wanneer mogelijk. Als u kiest voor alleen tunneltoegang, vervang dan het openbare Nginx-serverblok door deze loopback-only configuratie en sla de openbare HTTPS-setup over:
# /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;
}
}
Test en herlaad de vervangende configuratie:
sudo nginx -t && sudo systemctl reload nginx
Open dan de tunnel vanaf uw eigen machine:
ssh -N -L 127.0.0.1:8080:127.0.0.1:8080 user@your-server-ip
Met de tunnel actief, open http://127.0.0.1:8080/adminer.php. Nginx accepteert Adminer-verbindingen alleen via de VPS loopback-interface, terwijl SSH het verkeer via zijn versleutelde verbinding vervoert. Dit maakt gebruik van het gedrag beschreven in de OpenSSH lokale doorstuurdocumentatie.
Gebruik de publieke HTTPS-, Basic Auth- en IP-allowlist-setup wanneer u directe browsertoegang nodig heeft van meerdere machines. Geef de voorkeur aan de loopback-only SSH-setup wanneer publieke toegang niet nodig is.
Kernpunt: De veiligste Adminer is degene die nooit bereikbaar is vanaf het openbare internet.
Adminer bijhouden
De vergeten instantie is hier het echte risico, en het is de moeite waard om het als een geplande taak te behandelen in plaats van een bijgedachte. Adminer updaten is één commando, hetzelfde wget opdracht die u gebruikte om het te installeren, omdat latest.php altijd de huidige versie ophaalt:
sudo wget -O /var/www/adminer/adminer.php https://www.adminer.org/latest.php
Dit is geen theoretische zorg. Adminer 5.4.3, uitgebracht op 9 juli 2026, pakte zeven GitHub Security Advisories aan in één release. De eerdere waarschuwing voor CVE-2026-25892 toonde aan dat zelfs Adminer's versiecontrole-eindpunt kon worden omgezet in een niet-geverifieerde denial-of-service vector; het probleem werd opgelost in versie 5.4.2. Een verouderde kopie accumuleert publiek gedocumenteerde kwetsbaarheden, dus het bijwerken ervan zou routineonderhoud moeten zijn.
Opmerking: Blijf op de huidige upstream Adminer-release. AdminerEvo-repository werd gearchiveerd in januari 2025 en is geen actief onderhouden alternatief.
Implementeren op een VPS
Als u liever de handmatige stappen overslaat, is Adminer beschikbaar als een-klik implementatie in de de Cloudzy-marketplace op een Cloudzy Linux VPS. Het marketplace-image gebruikt Apache, Basic Auth en een zelfondertekend certificaat, dus het verschilt van de Nginx-, IP-allowlist- en Let's Encrypt-stack hierboven. Beoordeel die beveiligingsverschillen voordat u productie-databasereferenties invoert.
Adminer's eigen voetafdruk is verwaarloosbaar; de database bepaalt uw sizing. Kies CPU, geheugen en opslag op basis van de gegevens- en indexgrootte van de database, querybelasting, verbindingsaantal, back-ups en verwachte groei, niet op basis van Adminer zelf.
Veelgestelde vragen
Is het veilig om Adminer publiekelijk bloot te stellen op een VPS?
Niet op zichzelf. Als u Adminer publiekelijk moet blootstellen, plaatst u het achter HTTP Basic Authentication, een IP-allowlist en HTTPS samen. Deze controles verminderen het risico maar maken publieke blootstelling niet risicovrij. Bind voor gevoelige databases Adminer aan localhost en bereik het via een SSH-tunnel in plaats daarvan.
Hoe toegang ik tot Adminer zonder het bloot te stellen aan het internet?
Configureer het bovenstaande loopback-only Nginx-serverblok zodat Adminer luistert op 127.0.0.1:8080, voer je vervolgens ssh -N -L 127.0.0.1:8080:127.0.0.1:8080 user@your-server-ip op uw eigen machine. Open http://127.0.0.1:8080/adminer.php terwijl de tunnel actief is.
Kan Adminer verbinding maken met PostgreSQL evenals MySQL?
Ja. Adminer ondersteunt MySQL, MariaDB, PostgreSQL, SQLite, MS SQL en Oracle out-of-the-box, met meer databases via plugins. Installeer de bijbehorende PHP-extensie voor uw database, bijvoorbeeld php-pgsql voor PostgreSQL, zodat PHP ermee kan communiceren.
Hoe houd ik Adminer bijgewerkt?
Voer de downloadopdracht opnieuw uit: sudo wget -O /var/www/adminer/adminer.php https://www.adminer.org/latest.php. De latest.php URL geeft altijd de huidige stabiele release terug, dus dit overschrijft uw kopie met de nieuwste versie. Recente beveiligingsreleases maken het de moeite waard om dit te doen op een schema in plaats van alleen wanneer u het onthouwt.
Moet ik Adminer installeren via het apt Pakket of direct downloaden?
Download het enkele bestand direct. Het geeft u onmiddellijk de huidige versie en maakt updates tot een één-regelopdracht, terwijl een distributiepakket achter de officiële release kan lopen. Het directe bestand is hetzelfde gereedschap met een kortere weg naar de laatste beveiligingsfixes.