Zum Hauptinhalt springen
S-EDV news
← Alle Anleitungen
📘 Anleitung Datenbanken 15.06.2026 · 9 min Lesezeit

MongoDB nativ installieren und absichern: Ubuntu/Debian ohne Docker (Community Edition 8.0)

MongoDB Community Edition 8.0 direkt auf Ubuntu oder Debian installieren – über das offizielle APT-Repository, als systemd-Dienst betrieben, mit SCRAM-Authentifizierung, IP-Bindung und TLS gehärtet. Kein Docker, kein Volume-Mapping.

Moderne IT-Grafik zur Anleitung für die native Installation und Absicherung von MongoDB Community Edition 8.0 auf Ubuntu und Debian ohne Docker, mit APT-Repository, Firewall, Terminal, Datenbankservice und Dashboard.

Wer MongoDB produktiv auf einem Linux-Server betreiben möchte, greift häufig automatisch zu Docker – dabei bringt die native Installation handfeste Vorteile: direkter systemd-Lifecycle, klassisches Log-Management via journalctl, einfacherer Zertifikatszugriff ohne Volume-Mapping und eine schlankere Angriffsfläche. Diese Anleitung zeigt, wie du MongoDB Community Edition 8.0 über das offizielle mongodb-org-APT-Repository auf Ubuntu (20.04, 22.04, 24.04) oder Debian 12 einrichtest, als systemd-Dienst betreibst und mit drei aufeinander aufbauenden Maßnahmen härtest: SCRAM-Authentifizierung, IP-Bindung und TLS. Gedacht ist sie für KMU-Admins, Selfhoster und Entwickler, die eine saubere, wartbare Datenbankinstanz ohne Container-Overhead benötigen.

Voraussetzungen

  1. Ubuntu 20.04 LTS (Focal), 22.04 LTS (Jammy) oder 24.04 LTS (Noble) – alternativ Debian 12 (Bookworm), jeweils 64-bit (amd64 oder arm64)
  2. Root- oder sudo-Zugang zum Server
  3. Internetverbindung zu repo.mongodb.org und pgp.mongodb.com (für APT-Repo und GPG-Schlüssel)
  4. Pakete gnupg, curl und openssl verfügbar (werden ggf. nachinstalliert)
  5. Für TLS in Produktion: PEM-Zertifikat von einer vertrauenswürdigen CA (z. B. Let's Encrypt oder interne PKI); für Test/Entwicklung reicht ein selbstsigniertes Zertifikat
  6. ca. 30 Minuten Zeit

Schritt 1: Voraussetzungen und Paketquellen vorbereiten

Zuerst stellst du sicher, dass gnupg und curl installiert sind – beide werden für den GPG-Schlüssel-Import benötigt:

sudo apt-get install -y gnupg curl

Anschließend importierst du den offiziellen MongoDB-GPG-Schlüssel. Dieser wird in /usr/share/keyrings/ abgelegt und später in der Sources-Datei explizit referenziert – der moderne, sichere Weg statt des veralteten apt-key-Kommandos:

curl -fsSL https://pgp.mongodb.com/server-8.0.asc | \
  sudo gpg -o /usr/share/keyrings/mongodb-server-8.0.gpg \
  --dearmor

Wichtig: Verwende ausschließlich das offizielle Paket mongodb-org aus dem mongodb.com-Repository – nicht das Paket mongodb aus den Standard-Ubuntu/Debian-Quellen. Letzteres ist eine veraltete, inoffizielle Variante und wird hier nicht verwendet.

Schritt 2: APT-Repository hinzufügen

Jetzt trägst du das Repository passend zu deiner Distribution ein. Wähle den zutreffenden Befehl:

Ubuntu 24.04 (Noble):

echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-8.0.gpg ] https://repo.mongodb.org/apt/ubuntu noble/mongodb-org/8.0 multiverse" | \
  sudo tee /etc/apt/sources.list.d/mongodb-org-8.0.list

Ubuntu 22.04 (Jammy):

echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-8.0.gpg ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/8.0 multiverse" | \
  sudo tee /etc/apt/sources.list.d/mongodb-org-8.0.list

Ubuntu 20.04 (Focal):

echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-8.0.gpg ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/8.0 multiverse" | \
  sudo tee /etc/apt/sources.list.d/mongodb-org-8.0.list

Debian 12 (Bookworm):

echo "deb [ signed-by=/usr/share/keyrings/mongodb-server-8.0.gpg ] https://repo.mongodb.org/apt/debian bookworm/mongodb-org/8.0 main" | \
  sudo tee /etc/apt/sources.list.d/mongodb-org-8.0.list
DistributionVersionCodenameArchitekturen
Ubuntu24.04 LTSNobleamd64, arm64
Ubuntu22.04 LTSJammyamd64, arm64
Ubuntu20.04 LTSFocalamd64, arm64
Debian12Bookwormamd64

Schritt 3: MongoDB installieren und Version pinnen

Paketliste aktualisieren und das Metapaket mongodb-org installieren. Es zieht automatisch alle Komponenten nach: mongod, mongos, mongosh sowie die Datenbanktools (mongodump, mongorestore, mongoexport, mongostat usw.):

sudo apt-get update
sudo apt-get install -y mongodb-org

Direkt nach der Installation pinnst du die Version. Ohne diesen Schritt kann ein späteres apt upgrade MongoDB auf eine inkompatible Version heben – mit potenziell gravierenden Folgen für laufende Datenbankinstanzen:

echo "mongodb-org hold" | sudo dpkg --set-selections
echo "mongodb-org-database hold" | sudo dpkg --set-selections
echo "mongodb-org-server hold" | sudo dpkg --set-selections
echo "mongodb-mongosh hold" | sudo dpkg --set-selections
echo "mongodb-org-mongos hold" | sudo dpkg --set-selections
echo "mongodb-org-tools hold" | sudo dpkg --set-selections

Verifizieren: dpkg -l mongodb-org sollte die installierte Version anzeigen. Um die Pins zu prüfen: dpkg --get-selections | grep hold – alle sechs Pakete sollten hold zeigen.

Schritt 4: systemd-Dienst starten und aktivieren

Nach einer frischen Installation registrierst du den Dienst bei systemd, startest ihn und aktivierst den Autostart beim Booten:

sudo systemctl daemon-reload
sudo systemctl start mongod
sudo systemctl enable mongod
sudo systemctl status mongod

Verifizieren: systemctl status mongod zeigt active (running). Logs findest du unter /var/log/mongodb/mongod.log oder per sudo journalctl -u mongod -n 50 --no-pager. Der Dienst lauscht standardmäßig auf Port 27017, ausschließlich auf dem Loopback-Interface (127.0.0.1) – das ist der sichere Default seit MongoDB 3.6.

Schritt 5: Ersten Admin-User anlegen (localhost exception)

Bevor du Authentifizierung aktivierst, muss mindestens ein Admin-User existieren. MongoDB ermöglicht das über die sogenannte „localhost exception": Solange noch kein User angelegt ist, erlaubt MongoDB einen passwortfreien Loopback-Zugriff. Diese Exception erlischt automatisch nach dem ersten angelegten User.

Öffne die MongoDB-Shell:

mongosh --port 27017

Lege in der Shell den Admin-User an. passwordPrompt() fragt das Passwort interaktiv ab – sicherer als es im Klartext in den Befehlsverlauf zu schreiben:

use admin
db.createUser({
  user: "adminUser",
  pwd: passwordPrompt(),
  roles: [
    { role: "userAdminAnyDatabase", db: "admin" },
    { role: "readWriteAnyDatabase", db: "admin" }
  ]
})

Beende die Shell mit exit.

Schritt 6: TLS-Zertifikat vorbereiten

MongoDB erwartet eine einzelne PEM-Datei, die Private Key und Zertifikatskette kombiniert enthält. Das ist eine häufige Fehlerquelle: Nur das Zertifikat oder nur den Key bereitzustellen führt zu einem Startfehler ohne klare Fehlermeldung.

Für Test und Entwicklung – selbstsigniertes Zertifikat:

sudo mkdir -p /etc/ssl/mongodb

# CA-Schlüssel und -Zertifikat erzeugen
sudo openssl req -x509 -newkey rsa:4096 -keyout /etc/ssl/mongodb/ca.key \
  -out /etc/ssl/mongodb/ca.pem -days 3650 -nodes \
  -subj "/CN=MongoDB-CA"

# Server-Schlüssel und CSR erzeugen
sudo openssl req -newkey rsa:4096 -keyout /etc/ssl/mongodb/server.key \
  -out /etc/ssl/mongodb/server.csr -nodes \
  -subj "/CN=localhost"

# Server-Zertifikat durch CA signieren
sudo openssl x509 -req -in /etc/ssl/mongodb/server.csr \
  -CA /etc/ssl/mongodb/ca.pem -CAkey /etc/ssl/mongodb/ca.key \
  -CAcreateserial -out /etc/ssl/mongodb/server.crt -days 365

# PEM-Datei erstellen (Key + Cert kombiniert – MongoDB-Anforderung!)
sudo cat /etc/ssl/mongodb/server.key /etc/ssl/mongodb/server.crt > /etc/ssl/mongodb/mongod.pem

Für Produktion mit Let's Encrypt oder eigener PKI:

cat /etc/letsencrypt/live/deine-domain.de/privkey.pem \
    /etc/letsencrypt/live/deine-domain.de/fullchain.pem \
    > /etc/ssl/mongodb/mongod.pem

Anschließend Berechtigungen setzen – die Dateien müssen für den Prozess-User mongodb lesbar sein:

sudo chown mongodb:mongodb /etc/ssl/mongodb/mongod.pem /etc/ssl/mongodb/ca.pem
sudo chmod 600 /etc/ssl/mongodb/mongod.pem
sudo chmod 644 /etc/ssl/mongodb/ca.pem

Schritt 7: mongod.conf – Authentifizierung, bindIp und TLS aktivieren

Alle drei Härtungsmaßnahmen werden in der zentralen Konfigurationsdatei /etc/mongod.conf im YAML-Format konfiguriert. Öffne die Datei mit einem Editor deiner Wahl und ersetze den Inhalt durch diese gehärtete Konfiguration:

systemLog:
  destination: file
  path: /var/log/mongodb/mongod.log
  logAppend: true
  logRotate: reopen

storage:
  dbPath: /var/lib/mongodb
  journal:
    enabled: true

processManagement:
  timeZoneInfo: /usr/share/zoneinfo

net:
  port: 27017
  bindIp: 127.0.0.1        # Nur Loopback; für Fernzugriff ergänzen: 127.0.0.1,192.168.1.10
  tls:
    mode: requireTLS
    certificateKeyFile: /etc/ssl/mongodb/mongod.pem
    CAFile: /etc/ssl/mongodb/ca.pem
    disabledProtocols: TLS1_0,TLS1_1

security:
  authorization: enabled

Was die einzelnen Blöcke bewirken: security.authorization: enabled aktiviert SCRAM-SHA-256 als Standard-Authentifizierungsmechanismus. net.bindIp: 127.0.0.1 schränkt den Lauschbereich auf das Loopback-Interface ein – für Fernzugriff von einem App-Server trägst du dessen interne IP zusätzlich ein, niemals pauschal 0.0.0.0 ohne flankierende Firewallregeln. net.tls.mode: requireTLS erzwingt verschlüsselte Verbindungen; ältere TLS-Versionen 1.0 und 1.1 werden explizit via disabledProtocols ausgeschlossen.

TLS-ModusVerhaltenEmpfehlung
disabledTLS komplett deaktiviertNur intern/Dev ohne Netzverkehr
allowTLSTLS optional, Klartext akzeptiertNicht empfohlen
preferTLSTLS bevorzugt, Klartext als FallbackNur Migrationszeitraum
requireTLSAusschließlich TLS-VerbindungenProduktion

Dienst neu starten, damit die Konfiguration greift:

sudo systemctl restart mongod

Verifizieren: sudo systemctl status mongod muss active (running) zeigen. Schlägt der Start fehl, sieh sofort in den Logs nach: sudo journalctl -u mongod -n 100 --no-pager. Häufigste Ursachen sind fehlende oder falsch gesetzte Berechtigungen auf der PEM-Datei sowie eine fehlende CAFile-Angabe.

Schritt 8: Verbindung mit Authentifizierung und TLS testen

Jetzt testest du, ob die gehärtete Instanz korrekt antwortet. Der mongosh-Aufruf muss TLS und die CA-Datei angeben:

mongosh --port 27017 \
  --tls \
  --tlsCAFile /etc/ssl/mongodb/ca.pem \
  --authenticationDatabase admin \
  -u adminUser -p

Nach der Passworteingabe sollte der Prompt admin> erscheinen. Eine kurze Funktionsprüfung in der Shell:

db.runCommand({ connectionStatus: 1 })

Verifizieren: Das Ergebnis enthält "ok": 1 sowie unter authInfo.authenticatedUsers deinen adminUser. Eine Verbindung ohne --tls oder ohne gültige Credentials sollte fehlschlagen.

Schritt 9: Firewall mit UFW konfigurieren

Als letzten Härtungsschritt sicherst du den Port auf Netzwerkebene ab. Standardfall – MongoDB ist nur lokal erreichbar und Port 27017 bleibt nach außen geschlossen:

sudo ufw deny 27017

Wenn ein App-Server aus dem internen Netz auf MongoDB zugreifen muss:

sudo ufw allow from 192.168.1.100 to any port 27017
sudo ufw reload

Ersetze 192.168.1.100 durch die tatsächliche IP des App-Servers. Für Produktionsumgebungen: Port 27017 niemals ohne Quell-IP-Einschränkung ins Internet freigeben.

Troubleshooting / Typische Fehler

mongod startet nicht nach Aktivierung der Authentifizierung

Wenn du security.authorization: enabled gesetzt hast, ohne vorher einen Admin-User anzulegen, ist kein Login mehr möglich. Lösung: Authentifizierung in mongod.conf vorübergehend auf disabled zurücksetzen, Dienst starten, User anlegen, dann wieder aktivieren.

TLS-Startfehler: „certificate file could not be loaded"

Die häufigste Ursache ist eine PEM-Datei, die nur das Zertifikat enthält, aber nicht den Private Key – oder umgekehrt. MongoDB benötigt zwingend beide kombiniert in einer Datei: cat server.key server.crt > mongod.pem. Zusätzlich müssen Besitzer und Berechtigungen stimmen: sudo chown mongodb:mongodb mongod.pem && sudo chmod 600 mongod.pem.

TLS-Startfehler: „CAFile not set"

Bei aktiviertem TLS ist net.tls.CAFile zwingend erforderlich. Alternativ kannst du net.tls.tlsUseSystemCA: true setzen, wenn du einem System-CA-Store vertraust. Fehlt beides, verweigert mongod den Start.

Verbindung schlägt fehl, obwohl mongod läuft

Prüfe zuerst, auf welchen Interfaces mongod tatsächlich lauscht: ss -tlnp | grep 27017. Wenn dort nur 127.0.0.1:27017 steht, aber du von einer anderen IP verbindest, musst du net.bindIp in mongod.conf um die Ziel-IP erweitern und den Dienst neu starten.

Version-Pin vergessen – apt upgrade hat MongoDB aktualisiert

Überprüfe mit dpkg --get-selections | grep mongodb, ob die Pakete noch auf hold stehen. Wenn nicht, setze die Pins erneut wie in Schritt 3 beschrieben. Für ein kontrolliertes Upgrade: Pins kurz auf install setzen, upgraden, sofort wieder auf hold zurücksetzen.

LDAP-Authentifizierung nicht mehr nutzen

LDAP ist in MongoDB 8.0 als deprecated markiert und wird in einem zukünftigen Major Release entfernt. Für neue Deployments immer SCRAM (Standard) oder X.509-Zertifikatsauthentifizierung verwenden.

Häufige Fragen

Kann ich MongoDB 8.0 auch auf Ubuntu 18.04 oder Debian 11 installieren?

Nein. MongoDB 8.0 Community Edition unterstützt offiziell nur Ubuntu 20.04/22.04/24.04 und Debian 12 (Bookworm). Für ältere Systeme wäre ein OS-Upgrade oder die Verwendung einer älteren MongoDB-Version (z. B. 7.0 auf Debian 11) nötig.

Muss ich TLS konfigurieren, wenn MongoDB nur lokal erreichbar ist?

Für rein lokale Verbindungen (App und Datenbank auf demselben Host, bindIp: 127.0.0.1) ist TLS optional, da der Traffic das Netzwerk nicht verlässt. Sobald MongoDB über das Netzwerk erreichbar ist – auch nur innerhalb eines internen VLANs – ist TLS in Produktionsumgebungen dringend empfohlen. Der Konfigurationsaufwand ist überschaubar.

Was ist der Unterschied zwischen net.tls und net.ssl in mongod.conf?

net.ssl ist der ältere Namespace und aus Rückwärtskompatibilität erhalten. net.tls ist der aktuelle, bevorzugte Namespace. Beide konfigurieren dieselbe Funktionalität. Für neue Deployments immer net.tls verwenden.

Wie rotiere ich TLS-Zertifikate ohne Downtime?

Ab MongoDB 5.0 ist Online-Zertifikatsrotation ohne Neustart möglich. Neue Zertifikatsdateien unter demselben Pfad ablegen, dann in mongosh als Admin ausführen: db.rotateCertificates(). Bestehende Verbindungen behalten das alte Zertifikat bis zu ihrem natürlichen Ende.

Wie verhindere ich dauerhaft unbeabsichtigte apt-Upgrades?

Die Pins aus Schritt 3 bleiben persistent. Zum Freigeben für ein gezieltes Upgrade: echo "mongodb-org install" | sudo dpkg --set-selections – für jedes Unterpaket wiederholen. Nach dem Upgrade sofort wieder auf hold setzen.

Fazit

Eine nativ installierte MongoDB-Instanz ist kein Hexenwerk – der entscheidende Unterschied zu einer unsicheren Standardinstallation liegt in der Reihenfolge: erst den Admin-User anlegen, dann Authentifizierung aktivieren. Mit SCRAM-Authentifizierung, einer auf interne IPs beschränkten bindIp-Konfiguration und TLS mit requireTLS bist du gegen die häufigsten Angriffsvektoren gewappnet. Version-Pinning schützt vor unbeabsichtigten Upgrades, UFW liefert eine zusätzliche Netzwerkschicht. Wer Wert auf direkten systemd-Lifecycle, klassisches Log-Management und unkomplizierten Zertifikatszugriff legt, ist mit der nativen Installation oft besser bedient als mit Docker-Volumes und Container-Netzwerken.

Weiterführende Anleitungen und Quellen

  1. PostgreSQL nativ installieren und absichern (Ubuntu/Debian, ohne Docker)
  2. MariaDB / MySQL installieren und absichern
  3. VPS absichern und härten: Anleitung mit UFW, SSH-Keys und Fail2Ban
  4. Let's Encrypt mit certbot – TLS-Zertifikate ohne Reverse-Proxy
  5. MongoDB Docs: Install MongoDB Community Edition on Ubuntu (v8.0)
  6. MongoDB Docs: Configure mongod for TLS/SSL (v8.0)
  7. MongoDB Docs: Enable SCRAM Client Authentication (v8.0)