En Adminer-instans, der kører på en åben adresse, er en af de stilleste måder at miste en database på. Nogen deployer den enkelte PHP-fil for at tjekke en tabel, URL'en virker, og filen forbliver der i måneder, indtil en forældet kopi bliver en angrebsflade. Det er grunden til, at denne guide om Adminer-installation på en Linux VPS bruger ligeså meget plads på at sikre værktøjet som på at få det til at køre.
Adminer er en enkelt PHP-fil (ca. 503 KB i den fulde build), der understøtter MySQL, MariaDB, PostgreSQL, SQLite og adskillige andre databaser. Det er trivielt at deploye, hvilket er præcis grunden til, at det ofte deployes skødesløst.
Du installerer det på en moderne Ubuntu eller Debian VPS med Nginx og PHP-FPM, tilføjer HTTP-autentificering, en IP-tilladelsesliste og HTTPS med Let's Encrypt, og afslutter med en klar regel for, hvornår du helt springer den offentlige opsætning over og i stedet når Adminer via en SSH-tunnel.
TL;DR
- Adminer er én PHP-fil, du downloader til et webroot med
wgeti et webroot; Nginx og PHP-FPM serverer det. - En offentlig Adminer-instans har brug for alle tre: et HTTP-autentificeringslag, en IP-tilladelsesliste og HTTPS. Ét af dem alene er ikke nok.
- For de mest følsomme databaser bør du slet ikke eksponere Adminer: bind det til
localhostog nå det via en SSH-tunnel. - Opdatering er én kommando: kør igen
wgetdownloadkommandoen. Nylige sikkerhedsopdateringer gør det at holde det opdateret til en reel driftsopgave, ikke blot noget ønskeligt.
Forudsætninger: Hvad du skal bruge inden installation
Denne guide er rettet mod Ubuntu 26.04 og 24.04 plus Debian 13, med kompatibilitetsnoter til Ubuntu 22.04 og Debian 12. Standard PHP-FPM-versionerne er 8.5 på Ubuntu 26.04, 8.3 på Ubuntu 24.04, 8.4 på Debian 13, 8.2 på Debian 12 og 8.1 på Ubuntu 22.04.
- En Linux VPS med Ubuntu 22.04, Ubuntu 24.04, Ubuntu 26.04, Debian 12 eller Debian 13, med en bruger der har
sudoadgang. - En allerede kørende databaseserver (MySQL, MariaDB eller PostgreSQL), enten på denne VPS eller en som Adminer kan nå via netværket. Denne guide installerer ikke en database; den installerer det værktøj, du bruger til at administrere en.
- PHP-FPM fra operativsystemets understøttede repositories. Selvom Adminers kompilerede fil understøtter PHP 5.3+, brug den aktuelle distro-leverede version angivet ovenfor frem for at installere en forældet PHP-version.
- For den offentlige HTTPS-opsætning skal du have et hostnavn, der peger til VPS'en, og indgående TCP-porte 80 og 443 tilgængelige. Certbot Nginx-arbejdsgang bruger HTTP-01-validering på port 80. Let's Encrypt understøtter nu kortvarige IP-adressecertifikater, men Certbot installerer dem ikke automatisk via sin Nginx-arbejdsgang, så denne guide bruger et hostnavn.
Bemærk: Denne guide bruger Nginx bevidst. Hvis du kører Apache, gælder download- og hardening-logikken stadig, men server-block-konfigurationen nedenfor gælder ikke.
Installer Nginx og PHP-FPM
Start med at opdatere pakkeindekset og installere Nginx og PHP-FPM sammen med den PHP-databaseudvidelse, din server har brug for:
sudo apt update
sudo apt install -y nginx php-fpm php-mysql
For en PostgreSQL-backend, installer php-pgsql i stedet for, eller ved siden af, php-mysql:
sudo apt install -y php-pgsql
Bekræft at PHP-FPM-soklen eksisterer:
ls /run/php/
Match socketfilnavnet med den version, der er angivet ovenfor, for eksempel php8.5-fpm.sock på Ubuntu 26.04, php8.3-fpm.sock på Ubuntu 24.04, eller php8.4-fpm.sock på Debian 13. Hvis den forventede sokkel mangler, tjek den matchende tjeneste med systemctl status php8.5-fpm, erstat 8.5 med den version, der er installeret på dit OS.
Pro-tip: En socket-mismatch er en mulig årsag til en
502 Bad Gateway. Matchfastcgi_passtil filnavnet under/run/php/, bekræft at den tilsvarende PHP-FPM-tjeneste kører, og kontroller/var/log/nginx/error.loghvis fejlen fortsætter.
Download Adminer
Opret et bibliotek til at servicere Adminer fra, og download derefter den enkelte fil ind i det. latest.php URL peger altid til den aktuelle stabile udgivelse:
sudo mkdir -p /var/www/adminer
sudo wget -O /var/www/adminer/adminer.php https://www.adminer.org/latest.php
Hvis du kun arbejder med MySQL eller MariaDB, er MySQL-only-buildet mindre (ca. 406 KB) og hentes på samme måde:
sudo wget -O /var/www/adminer/adminer.php https://www.adminer.org/latest-mysql.php
Hold Adminer-biblioteket root-ejet, mens du giver PHP-FPM læseadgang:
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 betyder, at genudførelse af downloadet også er din opdateringsvej, som vedligeholdelsessektionen vender tilbage til.
Konfigurer Nginx-serverblokken
Opret et serverblok, der serverer Adminer-biblioteket og videresender .php anmodninger til den PHP-FPM-sokkel, du identificerede tidligere. Åbn en ny sitefil:
sudo nano /etc/nginx/sites-available/adminer
Indsæt følgende og erstat db.example.com med det hostnavn, der allerede peger på din VPS, og bekræft at fastcgi_pass soklen matcher din PHP-version:
# /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;
}
}
Aktiver sitet ved at symlinkere det til sites-enabled, og test derefter konfigurationen uden at genindlæse Nginx endnu:
sudo ln -s /etc/nginx/sites-available/adminer /etc/nginx/sites-enabled/
sudo nginx -t
nginx -t bør rapportere at syntaksen er gyldig og testen er vellykket. Genindlæs ikke Nginx endnu, fordi sitet ikke har autentificering eller IP-begrænsning. Fortsæt gennem disse to hardening-trin; IP-begrænsningssteget udfører den første genindlæsning efter at begge beskyttelser er på plads.
Lås ned: Autentificering, IP-begrænsning og HTTPS
En offentlig Adminer-instans sidder direkte foran dine databasereferencer, så den kræver lagdelte forsvar frem for en enkelt lås. De tre lag nedenfor gør forskellige ting: HTTP-autentificering stopper alle uden adgangskode ved webserveren, IP-tilladelseslisten stopper alle der forbinder fra en ikke-godkendt adresse, og HTTPS forhindrer de legitimationsoplysninger du skriver i at krydse netværket i ren tekst. Tilføj alle tre. Ingen af dem erstatter de andre.
Tilføj HTTP-basisautentificering
Installer htpasswd hjælpeprogrammet, som følger med pakken apache2-utils pakke på Ubuntu og Debian:
sudo apt install -y apache2-utils
Opret en adgangskodefile og en bruger (du bliver bedt om adgangskoden):
sudo htpasswd -B -C 10 -c /etc/nginx/.htpasswd adminuser
sudo chown root:www-data /etc/nginx/.htpasswd
sudo chmod 640 /etc/nginx/.htpasswd
Tilføj direktiverne til den præcise Adminer PHP-placering, så PHP-anmodningen selv er beskyttet:
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;
}
Begge direktiver er dokumenteret i Nginx HTTP auth_basic moduldokumentation. Kør sudo nginx -t for at validere konfigurationen, men genindlæs ikke Nginx endnu; IP-tilladelseslisten tilføjes næste. Send ikke Basic Auth-legitimationsoplysningerne over almindelig HTTP; vent til HTTPS er aktiveret nedenfor.
Begræns adgang efter IP-adresse
Grundlæggende godkendelse blokerer uautoriserede brugere, men Nginx modtager stadig anmodninger fra alle kilder. Erstat den eksisterende Adminer PHP-placering med den følgende kombinerede blok, så IP-reglerne og Basic Auth-direktiverne forbliver ét sted:
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;
}
Erstat eksempeladresserne med din faktiske offentlige IP-adresse eller betroede netværksinterval. Behold kun allow du har brug for og slet ubrugte eksempler. Den første post demonstrerer en enkelt adresse, mens den anden demonstrerer et CIDR-interval. Nginx returnerer 403 Forbidden til adresser der ikke matcher en allow allow-regel. Nginx adgangsmoduldokumentation dokumenterer direktivsyntaksen. Test og genindlæs Nginx:
sudo nginx -t && sudo systemctl reload nginx
Aktiver HTTPS med Let's Encrypt
Med et domæne der peger på VPS'en, installer Certbot og dets Nginx-plugin, og anmod derefter om et certifikat:
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d db.example.com
Certbot redigerer dit serverblok til at servere HTTPS på port 443 og tilbyder at omdirigere HTTP til HTTPS; accepter omdirigeringen. Det installerer også en fornyelsestimer, så certifikatet fornyes automatisk inden det udløber. Du kan bekræfte fornyelsesvejen med sudo certbot renew --dry-run, som bør fuldføres uden fejl.
Besøg nu https://db.example.com/adminer.php fra en tilladt adresse og bekræft at Nginx beder om Basic Auth-legitimationsoplysningerne inden Adminer indlæses.
Vælg din adgangsmodel: Offentlig HTTPS vs. SSH-tunnel
Opsætningen ovenfor er passende, når du har brug for browseradgang til en database fra flere maskiner, eller når åbning af en SSH-session er upraktisk. Det er ikke den eneste model, og for en følsom database er det ikke den mest defensive.
For følsomme opsætninger bør du ikke eksponere Adminer offentligt. Adminer's officielle sikkerhedsvejledning anbefaler at gøre det utilgængeligt fra det offentlige internet når som helst muligt. Hvis du vælger kun tunnelbaseret adgang, erstat det offentlige Nginx-serverblok med denne loopback-only konfiguration og spring den offentlige HTTPS-opsætning 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 og genindlæs erstatningskonfigurationen:
sudo nginx -t && sudo systemctl reload nginx
Åbn derefter tunnelen fra din egen maskine:
ssh -N -L 127.0.0.1:8080:127.0.0.1:8080 user@your-server-ip
Med tunnelen kørende, åbn http://127.0.0.1:8080/adminer.php. Nginx accepterer kun Adminer-forbindelser via VPS'ens loopback-interface, mens SSH bærer trafikken via sin krypterede forbindelse. Dette bruger adfærden beskrevet i OpenSSH lokal-videresendelsesdokumentation.
Brug den offentlige HTTPS-, Basic Auth- og IP-tilladelsesliste-opsætning, når du har brug for direkte browseradgang fra flere maskiner. Foretrækk den loopback-only SSH-opsætning, når offentlig adgang er unødvendig.
Vigtigste pointe: Den mest sikre Adminer er den, der aldrig er tilgængelig fra det offentlige internet.
Holde Adminer opdateret
Den glemte instans er den virkelige risiko her, og det er værd at behandle det som en planlagt opgave frem for en efterfølgende tanke. Opdatering af Adminer er én kommando, den samme wget kommando, du brugte til at installere det, fordi latest.php altid henter den aktuelle udgivelse:
sudo wget -O /var/www/adminer/adminer.php https://www.adminer.org/latest.php
Dette er ikke en teoretisk bekymring. Adminer 5.4.3, udgivet 9. juli 2026, håndterede syv GitHub Security Advisories i en enkelt udgivelse. Den tidligere advisory for CVE-2026-25892 viste at selv Adminers versionskontrol-endepunkt kunne omdannes til en uautoriseret denial-of-service vektor; problemet blev løst i version 5.4.2. En forældet kopi akkumulerer offentligt dokumenterede sårbarheder, så opdatering af den bør være rutinevedligeholdelse.
Bemærk: Bliv på den aktuelle upstream Adminer-udgivelse. AdminerEvo-repositoriet blev arkiveret i januar 2025 og er ikke et aktivt vedligeholdt alternativ.
Implementering på en VPS
Hvis du hellere vil springe de manuelle trin over, er Adminer tilgængelig som en enkelt-klik implementering i Cloudzy-marketplacen på en Cloudzy Linux VPS. Marketplace-imaget bruger Apache, Basic Auth og et selvsigneret certifikat, så det adskiller sig fra Nginx-, IP-tilladelsesliste- og Let's Encrypt-stakken ovenfor. Gennemgå disse sikkerhedsforskelle inden du indtaster produktionsdatabaseoplysninger.
Adminers eget fodaftryk er ubetydeligt; databasen driver din dimensionering. Vælg CPU, hukommelse og opbevaring baseret på databasens data- og indeksstørrelse, forespørgselsbyrde, forbindelsesantal, sikkerhedskopier og forventet vækst frem for selve Adminer.
Ofte stillede spørgsmål
Er det sikkert at eksponere Adminer offentligt på en VPS?
Ikke alene. Hvis du skal eksponere Adminer offentligt, placer det bag HTTP Basic Authentication, en IP-tilladelsesliste og HTTPS tilsammen. Disse kontroller reducerer risikoen men gør ikke offentlig eksponering risikofri. For følsomme databaser, bind Adminer til localhost og nå det via en SSH-tunnel i stedet.
Hvordan får jeg adgang til Adminer uden at eksponere det for internettet?
Konfigurer den loopback-only Nginx serverblok vist ovenfor, så Adminer lytter på 127.0.0.1:8080og kører derefter ssh -N -L 127.0.0.1:8080:127.0.0.1:8080 user@your-server-ip på din egen maskine. Åbn http://127.0.0.1:8080/adminer.php mens tunnelen kører.
Kan Adminer forbinde til PostgreSQL såvel som MySQL?
Ja. Adminer understøtter MySQL, MariaDB, PostgreSQL, SQLite, MS SQL og Oracle ud af boksen, med flere databaser tilgængelige via plugins. Installer den matchende PHP-udvidelse til din database, for eksempel php-pgsql for PostgreSQL, så PHP kan tale med det.
Hvordan holder jeg Adminer opdateret?
Kør download-kommandoen igen: sudo wget -O /var/www/adminer/adminer.php https://www.adminer.org/latest.php. Den latest.php URL returnerer altid den aktuelle stabile udgivelse, så dette overskriver din kopi med den nyeste version. Nylige sikkerhedsudgivelser gør det værd at gøre dette på en tidsplan frem for kun når du husker det.
Bør jeg installere Adminer via apt pakke eller downloade det direkte?
Download den enkelte fil direkte. Det giver dig den aktuelle version med det samme og gør opdateringer til en enkeltlinjekommando, mens et distributionspakke kan halte bagefter den officielle udgivelse. Den direkte fil er det samme værktøj med en kortere vej til de seneste sikkerhedsrettelser.