Zum Hauptinhalt springen
50 % Rabatt alle Pläne, begrenzte Zeit. Ab $2.48/mo
10 min left
Datenbanken und Analytics

Adminer auf einem Linux VPS installieren (mit Nginx und richtiger Absicherung)

H Von Haze 10 Min. Lesezeit
Adminer login screen served by Nginx on a Linux VPS

Eine laufende Adminer-Instanz auf einer offenen Adresse ist eine der unscheinbarsten Möglichkeiten, eine Datenbank zu verlieren. Jemand deployt die einzelne PHP-Datei, um eine Tabelle zu prüfen, die URL funktioniert, und die Datei bleibt dort monatelang, bis eine veraltete Kopie zur Angriffsfläche wird. Dieser Fehlermodus erklärt, warum dieser Leitfaden zur Adminer-Installation auf einem Linux-VPS der Absicherung genauso viel Raum widmet wie der Inbetriebnahme.

Adminer ist eine einzelne PHP-Datei (etwa 503 KB im vollständigen Build), die MySQL, MariaDB, PostgreSQL, SQLite und weitere Datenbanken unterstützt. Das Deployment ist trivial einfach, was genau der Grund ist, warum es oft leichtfertig durchgeführt wird.

Sie installieren es auf einem modernen Ubuntu- oder Debian-VPS mit Nginx und PHP-FPM, fügen HTTP-Authentifizierung, eine IP-Allowlist und HTTPS mit Let's Encrypt hinzu, und schließen mit einer klaren Regel ab, wann Sie das öffentliche Setup ganz überspringen und Adminer stattdessen über einen SSH-Tunnel erreichen sollten.

Kurzfassung

  • Adminer ist eine PHP-Datei, die Sie mit wget in ein Web-Verzeichnis herunterladen; Nginx und PHP-FPM stellen sie bereit.
  • Eine öffentliche Adminer-Instanz benötigt alle drei: eine HTTP-Authentifizierungsschicht, eine IP-Allowlist und HTTPS. Eines davon allein reicht nicht aus.
  • Für die sensibelsten Datenbanken sollten Sie Adminer überhaupt nicht exponieren: binden Sie es an localhost und es über einen SSH-Tunnel erreichbar machen.
  • Aktualisieren ist ein einzelner Befehl: führen Sie erneut den wget Befehl aus. Neuere Sicherheits-Releases machen die Aktualisierung zu einer echten Betriebsaufgabe, nicht zu einem optionalen Schritt.

Voraussetzungen: Was Sie vor der Installation benötigen

Dieser Leitfaden richtet sich an Ubuntu 26.04 und 24.04 sowie Debian 13, mit Kompatibilitätshinweisen für Ubuntu 22.04 und Debian 12. Die Standard-PHP-FPM-Versionen sind 8.5 auf Ubuntu 26.04, 8.3 auf Ubuntu 24.04, 8.4 auf Debian 13, 8.2 auf Debian 12 und 8.1 auf Ubuntu 22.04.

  • Ein Linux-VPS mit Ubuntu 22.04, Ubuntu 24.04, Ubuntu 26.04, Debian 12 oder Debian 13, mit einem Benutzer, der sudo Zugriff
  • Ein bereits laufender Datenbankserver (MySQL, MariaDB oder PostgreSQL), entweder auf diesem VPS oder auf einem, den Adminer über das Netzwerk erreichen kann. Dieser Leitfaden installiert keine Datenbank; er installiert das Tool zur Verwaltung einer vorhandenen Datenbank.
  • PHP-FPM aus den vom Betriebssystem unterstützten Repositories. Obwohl die kompilierte Adminer-Datei PHP 5.3+ unterstützt, verwenden Sie die oben aufgeführte, von der Distribution bereitgestellte Version anstatt eine veraltete PHP-Version zu installieren.
  • Für das öffentliche HTTPS-Setup benötigen Sie einen Hostnamen, der auf den VPS zeigt, sowie eingehende TCP-Ports 80 und 443. Der Certbot-Nginx-Workflow verwendet HTTP-01-Validierung auf Port 80. Let's Encrypt unterstützt jetzt kurzlebige IP-Adresszertifikate, aber Certbot installiert diese nicht automatisch über seinen Nginx-Workflow, daher verwendet dieser Leitfaden einen Hostnamen.

Hinweis: Dieser Leitfaden verwendet absichtlich Nginx. Wenn Sie Apache verwenden, gelten die Download- und Härtungslogik weiterhin, die folgende Server-Block-Konfiguration jedoch nicht.

Nginx und PHP-FPM installieren

Beginnen Sie damit, den Paketindex zu aktualisieren und Nginx und PHP-FPM zusammen mit der PHP-Datenbankextension zu installieren, die Ihr Server benötigt:

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

Für ein PostgreSQL-Backend installieren Sie php-pgsql anstelle von oder zusätzlich zu php-mysql:

sudo apt install -y php-pgsql

Stellen Sie sicher, dass der PHP-FPM-Socket vorhanden ist:

ls /run/php/

Stimmen Sie den Socket-Dateinamen mit der oben aufgeführten Version ab, zum Beispiel php8.5-fpm.sock auf Ubuntu 26.04, php8.3-fpm.sock auf Ubuntu 24.04 oder php8.4-fpm.sock auf Debian 13. Wenn der erwartete Socket fehlt, überprüfen Sie den entsprechenden Dienst mit systemctl status php8.5-fpm, ersetzen Sie 8.5 durch die auf Ihrem Betriebssystem installierte Version.

Profi-Tipp: Eine Socket-Diskrepanz ist eine mögliche Ursache für ein 502 Bad Gateway. Stimmen Sie fastcgi_pass mit dem Dateinamen unter /run/php/, stellen Sie sicher, dass der entsprechende PHP-FPM-Dienst läuft, und überprüfen Sie /var/log/nginx/error.log wenn der Fehler weiterhin besteht.

Adminer herunterladen

Erstellen Sie ein Verzeichnis für Adminer und laden Sie dann die einzelne Datei herunter. Die latest.php URL verweist immer auf die aktuelle stabile Version:

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

Wenn Sie nur mit MySQL oder MariaDB arbeiten, ist der MySQL-only-Build kleiner (etwa 406 KB) und wird auf die gleiche Weise heruntergeladen:

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

Lassen Sie das Adminer-Verzeichnis im Besitz von root, während Sie PHP-FPM Lesezugriff gewähren:

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 bedeutet, dass das erneute Ausführen des Downloads auch Ihr Update-Weg ist, auf den der Wartungsabschnitt zurückkommt.

Den Nginx-Serverblock konfigurieren

Erstellen Sie einen Serverblock, der das Adminer-Verzeichnis bedient und .php Anfragen an den PHP-FPM-Socket, den Sie zuvor identifiziert haben, weiterleitet. Öffnen Sie eine neue Site-Datei:

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

Fügen Sie Folgendes ein und ersetzen Sie db.example.com durch den bereits auf Ihren VPS zeigenden Hostnamen und bestätigen Sie, dass der fastcgi_pass Socket Ihrer PHP-Version entspricht:

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

Aktivieren Sie die Site durch Symlink in sites-enabled, und testen Sie dann die Konfiguration, ohne Nginx neu zu laden:

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

nginx -t sollte melden, dass die Syntax korrekt und der Test erfolgreich ist. Laden Sie Nginx noch nicht neu, da die Site weder Authentifizierung noch IP-Beschränkung hat. Führen Sie diese zwei Härtungsschritte durch; der IP-Beschränkungsschritt führt den ersten Neustart nach beiden Schutzmaßnahmen durch.

Zugang sichern: Authentifizierung, IP-Beschränkung und HTTPS

Eine öffentliche Adminer-Instanz steht direkt vor Ihren Datenbankzugangsdaten und benötigt daher geschichtete Verteidigungen statt eines einzelnen Schlosses. Die drei folgenden Ebenen erfüllen unterschiedliche Aufgaben: HTTP-Authentifizierung hält jeden ohne Passwort am Webserver auf, die IP-Allowlist blockiert Verbindungen von nicht genehmigten Adressen, und HTTPS verhindert, dass die eingegebenen Zugangsdaten im Klartext über das Netzwerk übertragen werden. Fügen Sie alle drei hinzu. Keines davon ersetzt die anderen.

HTTP-Basisauthentifizierung hinzufügen

Installieren Sie das htpasswd Dienstprogramm, das im Paket apache2-utils Paket auf Ubuntu und Debian enthalten ist:

sudo apt install -y apache2-utils

Erstellen Sie eine Passwortdatei und einen Benutzer (Sie werden nach dem Passwort gefragt):

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

Fügen Sie die Direktiven zum genauen Adminer-PHP-Standort hinzu, damit die PHP-Anfrage selbst geschützt ist:

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 Direktiven sind dokumentiert in der Nginx-HTTP-auth_basic-Modul-Referenz. Ausführen sudo nginx -t zur Überprüfung der Konfiguration, laden Sie Nginx aber noch nicht neu; die IP-Allowlist wird als nächstes hinzugefügt. Übermitteln Sie die Basic-Auth-Zugangsdaten nicht über einfaches HTTP; warten Sie, bis HTTPS unten aktiviert ist.

Zugriff nach IP-Adresse beschränken

Basisauthentifizierung blockiert nicht authentifizierte Benutzer, aber Nginx empfängt weiterhin Anfragen von jeder Quelle. Ersetzen Sie den vorhandenen Adminer-PHP-Standort durch den folgenden kombinierten Block, damit IP-Regeln und Basic-Auth-Direktiven an einem Ort bleiben:

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

Ersetzen Sie die Beispieladressen durch Ihre tatsächliche öffentliche IP-Adresse oder den vertrauenswürdigen Netzwerkbereich. Behalten Sie nur die allow Einträge, die Sie benötigen, und löschen Sie nicht verwendete Beispiele. Der erste Eintrag zeigt eine einzelne Adresse, der zweite zeigt einen CIDR-Bereich. Nginx gibt 403 Forbidden an Adressen, die keiner allow allow-Regel entsprechen. Die Nginx-Access-Modul-Referenz Die Syntax der Direktiven ist dort dokumentiert. Testen und laden Sie Nginx neu:

sudo nginx -t && sudo systemctl reload nginx

HTTPS mit Let's Encrypt aktivieren

Mit einer auf den VPS zeigenden Domain installieren Sie Certbot und sein Nginx-Plugin, dann fordern Sie ein Zertifikat an:

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

Certbot bearbeitet Ihren Serverblock, um HTTPS auf Port 443 bereitzustellen, und bietet eine HTTP-zu-HTTPS-Umleitung an; akzeptieren Sie die Umleitung. Er installiert auch einen Erneuerungstimer, sodass das Zertifikat automatisch vor Ablauf erneuert wird. Sie können den Erneuerungspfad bestätigen mit sudo certbot renew --dry-run, das ohne Fehler abgeschlossen werden sollte.

Besuchen Sie jetzt https://db.example.com/adminer.php von einer erlaubten Adresse aus und stellen Sie sicher, dass Nginx die Basic-Auth-Zugangsdaten anfordert, bevor Adminer geladen wird.

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

Ihr Zugriffsmodell wählen: Öffentliches HTTPS oder SSH-Tunnel

Das obige Setup ist angemessen, wenn Sie Browser-Zugriff auf eine Datenbank von mehreren Rechnern benötigen oder wenn das Öffnen einer SSH-Sitzung unpraktisch ist. Es ist nicht das einzige Modell, und für eine sensible Datenbank ist es nicht das defensivste.

Für sensible Setups sollten Sie Adminer nicht öffentlich zugänglich machen. Adminer's offizielle Sicherheitsempfehlungen empfiehlt, es aus dem öffentlichen Internet wann immer möglich unzugänglich zu machen. Wenn Sie nur Tunnel-Zugriff wählen, ersetzen Sie den öffentlichen Nginx-Serverblock durch diese Nur-Loopback-Konfiguration und überspringen Sie das öffentliche HTTPS-Setup:

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

Testen und laden Sie die Ersatzkonfiguration neu:

sudo nginx -t && sudo systemctl reload nginx

Öffnen Sie dann den Tunnel von Ihrer eigenen Maschine:

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

Mit laufendem Tunnel öffnen Sie http://127.0.0.1:8080/adminer.php. Nginx akzeptiert Adminer-Verbindungen nur über die Loopback-Schnittstelle des VPS, während SSH den Datenverkehr über seine verschlüsselte Verbindung transportiert. Dies nutzt das in der OpenSSH-Dokumentation zur lokalen Weiterleitung.

Verwenden Sie das öffentliche HTTPS-, Basic-Auth- und IP-Allowlist-Setup, wenn Sie direkten Browser-Zugriff von mehreren Maschinen benötigen. Bevorzugen Sie das Nur-Loopback-SSH-Setup, wenn öffentlicher Zugriff nicht notwendig ist.

Wichtigste Erkenntnis: Der sicherste Adminer ist derjenige, der vom öffentlichen Internet niemals erreichbar ist.

Adminer aktuell halten

Die vergessene Instanz ist das eigentliche Risiko hier, und es lohnt sich, sie als geplante Aufgabe zu behandeln und nicht als Nachgedanken. Adminer zu aktualisieren ist ein einziger Befehl, derselbe wget Befehl, den Sie für die Installation verwendet haben, weil latest.php immer die aktuelle Version herunterlädt:

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

Dies ist kein theoretisches Problem. Adminer 5.4.3, veröffentlicht am 9. Juli 2026, hat sieben GitHub-Sicherheitshinweise in einem einzigen Release behoben. Der frühere Hinweis zu CVE-2026-25892 zeigte, dass selbst Adminers Versions-Check-Endpunkt in einen nicht authentifizierten Denial-of-Service-Vektor umgewandelt werden könnte; das Problem wurde in Version 5.4.2 behoben. Eine veraltete Kopie häuft öffentlich dokumentierte Schwachstellen an, daher sollte ihre Aktualisierung routinemäßige Wartung sein.

Hinweis: Bleiben Sie beim aktuellen Upstream-Release von Adminer. Das AdminerEvo-Repository wurde im Januar 2025 archiviert und ist keine aktiv gepflegte Alternative.

Auf einem VPS bereitstellen

Wenn Sie die manuellen Schritte lieber überspringen möchten, ist Adminer als Ein-Klick-Deployment verfügbar im dem Cloudzy-Marketplace auf einem Cloudzy Linux VPS. Das Marketplace-Image verwendet Apache, Basic Auth und ein selbstsigniertes Zertifikat, unterscheidet sich also vom Nginx-, IP-Allowlist- und Let's Encrypt-Stack oben. Überprüfen Sie diese Sicherheitsunterschiede, bevor Sie Produktions-Datenbank-Anmeldeinformationen eingeben.

Adminers eigener Ressourcenbedarf ist vernachlässigbar; die Datenbank bestimmt die Dimensionierung. Wählen Sie CPU, Arbeitsspeicher und Speicher anhand der Daten- und Indexgröße der Datenbank, Abfragelast, Verbindungsanzahl, Backups und erwartetem Wachstum, nicht anhand von Adminer selbst.

Häufig gestellte Fragen

Ist es sicher, Adminer auf einem VPS öffentlich zugänglich zu machen?

Nicht allein. Wenn Sie Adminer öffentlich zugänglich machen müssen, stellen Sie es hinter HTTP Basic Authentication, einer IP-Allowlist und HTTPS zusammen. Diese Kontrollen reduzieren das Risiko, machen den öffentlichen Zugang aber nicht risikolos. Für sensible Datenbanken binden Sie Adminer an localhost und greifen Sie stattdessen über einen SSH-Tunnel darauf zu.

Wie greife ich auf Adminer zu, ohne es dem Internet auszusetzen?

Konfigurieren Sie den oben gezeigten Nur-Loopback-Nginx-Serverblock, damit Adminer auf 127.0.0.1:8080darauf zeigt, führe dann ssh -N -L 127.0.0.1:8080:127.0.0.1:8080 user@your-server-ip auf Ihrer eigenen Maschine. Öffnen Sie http://127.0.0.1:8080/adminer.php während der Tunnel läuft.

Kann Adminer sowohl mit PostgreSQL als auch mit MySQL verbinden?

Ja. Adminer unterstützt MySQL, MariaDB, PostgreSQL, SQLite, MS SQL und Oracle sofort einsatzbereit, mit weiteren Datenbanken über Plugins. Installieren Sie die passende PHP-Erweiterung für Ihre Datenbank, zum Beispiel php-pgsql für PostgreSQL, damit PHP damit kommunizieren kann.

Wie halte ich Adminer aktuell?

Führen Sie den Download-Befehl erneut aus: sudo wget -O /var/www/adminer/adminer.php https://www.adminer.org/latest.php. Die latest.php URL gibt immer die aktuelle stabile Version zurück, sodass dies Ihre Kopie mit der neuesten Version überschreibt. Jüngste Sicherheitsveröffentlichungen machen es wert, dies nach einem Zeitplan zu tun, anstatt nur wenn Sie sich erinnern.

Sollte ich Adminer über das apt Paket installieren oder direkt herunterladen?

Laden Sie die einzelne Datei direkt herunter. Sie erhalten sofort die aktuelle Version und Aktualisierungen werden zu einem einzeiligen Befehl, während ein Distributionspaket hinter dem offiziellen Release zurückbleiben kann. Die direkte Datei ist dasselbe Werkzeug mit einem kürzeren Weg zu den neuesten Sicherheitsfixes.

Teilen

Mehr aus dem Blog

Weiterlesen.

Bereit zum Deployen? Ab 2,48 $/Monat.

Unabhängige Cloud, seit 2008. AMD EPYC, NVMe, 40 Gbps. 14 Tage Geld-zurück-Garantie.