DokPilotcontact

Wie man SCRAM-Authentifizierung für MongoDB einrichtet

In diesem Tutorial zeigen wir Ihnen, wie Sie SCRAM (Salted Challenge Response Authentication Mechanism) für die Client-Authentifizierung auf einer eigenständigen MongoDB-Instanz einrichten. SCRAM ist ein sicheres Authentifizierungsmechanismus, der die Authentifizierung zwischen Clients und dem MongoDB-Server bereitstellt.

Das Tutorial geht davon aus, dass Sie MongoDB bereits auf Ihrem System installiert haben.

Schritt 1: Starten Sie MongoDB ohne Zugriffskontrolle

Zunächst müssen Sie die eigenständige mongod-Instanz ohne Zugriffskontrolle ausführen. Sie können dies tun, indem Sie in einem Terminalfenster den folgenden Befehl als Benutzer mongod ausführen:

mongod --port 27017 --dbpath /var/lib/mongodb

In diesem Befehl gibt --port die Portnummer an und --dbpath gibt den Pfad zum Datenbankverzeichnis an. Das Tutorial geht davon aus, dass das Verzeichnis /var/lib/mongodb existiert und der Standard-dbPath ist. Sie können ein anderes Datenverzeichnis oder einen anderen Port angeben, wie es benötigt wird.

Wenn die mongod-Instanz gestartet wird, werden einige Systemdateien im Verzeichnis /var/lib/mongodb erstellt. Um sicherzustellen, dass die Systemdateien die richtigen Besitzverhältnisse haben, führen Sie dieses Tutorial als Benutzer mongod aus. Wenn Sie mongod als Root-Benutzer starten, müssen Sie später die Dateiberechtigungen aktualisieren.

Schritt 2: Verbinden Sie sich mit der MongoDB-Instanz

Als nächstes müssen Sie sich mit der Datenbankverbindung über mongosh verbinden. Öffnen Sie ein neues Terminalfenster und geben Sie den folgenden Befehl ein:

mongosh --port 27017

Wenn Sie sich mit einer anderen Datenbankverbindung verbinden, geben Sie zusätzliche Befehlszeilenoptionen wie --host an, wie es benötigt wird.

Schritt 3: Erstellen Sie den Benutzeradministrator

Sie können den Benutzeradministrator entweder vor oder nach dem Aktivieren der Zugriffskontrolle erstellen. Wenn Sie die Zugriffskontrolle aktivieren, bevor Sie einen Benutzer erstellen, bietet MongoDB eine Localhost-Ausnahme, mit der Sie einen Benutzeradministrator in der Admin-Datenbank erstellen können. Sobald erstellt, müssen Sie sich als Benutzeradministrator authentifizieren, um weitere Benutzer zu erstellen.

Verwenden Sie in mongosh die use-Befehlssequenz, um zur Admin-Datenbank zu wechseln, und fügen Sie den Benutzer myUserAdmin mit den Rollen userAdminAnyDatabase und readWriteAnyDatabase hinzu:

use admin
db.createUser(
  {
    user: "myUserAdmin",
    pwd: passwordPrompt(), // or cleartext password
    roles: [
      { role: "userAdminAnyDatabase", db: "admin" },
      { role: "readWriteAnyDatabase", db: "admin" }
    ]
  }
)

Die passwordPrompt()-Methode fordert Sie auf, das Passwort einzugeben. Sie können Ihr Passwort auch direkt als Zeichenfolge angeben. Wir empfehlen, die passwordPrompt()-Methode zu verwenden, um zu verhindern, dass das Passwort auf Ihrem Bildschirm sichtbar ist und möglicherweise das Passwort in der Shell-Historie preisgibt.

Die Rolle userAdminAnyDatabase ermöglicht es diesem Benutzer, folgende Aufgaben auszuführen:

  • Benutzer erstellen
  • Rollen für Benutzer erteilen oder entziehen
  • Benutzerdefinierte Rollen erstellen oder ändern

Sie können Ihrem Benutzer zusätzliche integrierte Rollen oder benutzerdefinierte Rollen zuweisen, wie es benötigt wird.

Die Datenbank, in der Sie den Benutzer erstellen, in diesem Beispiel admin, ist die Authentifizierungsdatenbank des Benutzers. Obwohl sich der Benutzer zur Authentifizierung an diese Datenbank anmelden muss, kann der Benutzer in anderen Datenbanken Rollen haben. Die Authentifizierungsdatenbank des Benutzers beschränkt nicht die Berechtigungen des Benutzers.

Schritt 4: Starten Sie die MongoDB-Instanz mit Zugriffskontrolle neu

Beenden Sie die mongod-Instanz mithilfe von mongosh und geben Sie den folgenden Befehl ein:

db.adminCommand( { shutdown: 1 } )

Beenden Sie mongosh.

Starten Sie die mongod-Instanz mit aktivierter Zugriffskontrolle neu. Wenn Sie die mongod-Instanz über die Befehlszeile starten, fügen Sie die Befehlszeilenoption --auth hinzu:

mongod --auth --port 27017 --dbpath /var/lib/mongodb

Wenn Sie die mongod-Instanz über eine Konfigurationsdatei starten, fügen Sie die security.authorization-Konfigurationsdateieinstellung hinzu:

security:
    authorization: enabled

Clients, die sich mit dieser Instanz verbinden, müssen sich jetzt authentifizieren und können nur die Aktionen ausführen, die durch ihre zugewiesenen Rollen bestimmt werden.

Sie können Benutzer entweder vor oder nach dem Aktivieren der Zugriffskontrolle erstellen. Wenn Sie die Zugriffskontrolle aktivieren, bevor Sie einen Benutzer erstellen, bietet MongoDB eine Localhost-Ausnahme, mit der Sie einen Benutzeradministrator in der Admin-Datenbank erstellen können. Sobald erstellt, müssen Sie sich als Benutzeradministrator authentifizieren, um weitere Benutzer zu erstellen.

Schritt 5: Verbinden und authentifizieren Sie sich als Benutzeradministrator

Sie können sich über mongosh während oder nach der Verbindung authentifizieren. Starten Sie mongosh mit den Befehlszeilenoptionen -u <Benutzername>, -p und --authenticationDatabase <Datenbank>:

mongosh --port 27017 --authenticationDatabase "admin" -u "myUserAdmin" -p

Geben Sie Ihr Passwort ein, wenn Sie aufgefordert werden.

Nächste Schritte

Sie haben jetzt die SCRAM-Authentifizierung für Ihre MongoDB-Installation eingerichtet. Weitere Informationen zur Verwendung der SCRAM-Authentifizierung für Replikatsätze oder Sharded Clusters finden Sie unter Einrichten eines Replikatsatzes mit Keyfile-Authentifizierung.


Tags:
MongoDB
SCRAM