Von Dennis Vinueza auf Dienstag, 09. Juni 2020
Kategorie: Remote Service

Ident-Authentifizierung unter PostgreSQL

Unter PostgreSQL können mehrere Verfahren zur Authentifizierung eines Users zum Einsatz kommen. Üblicherweise werden interne Datenbank-User zur Authentifizierung am Datenbankcluster verwendet, die über eigene Passwörter verfügen.

Eine etwas andere Variante ist die Ident Authentication. Hierbei wird der Name eines Client-Betriebssystembenutzers über einen Ident-Server ermittelt, und, sofern berechtigt, für den Zugriff zur Datenbank verwendet. Mit dem Ident-Protokoll kann ein Server feststellen, welcher User eine bestimmte TCP-Verbindung geöffnet hat. Die Datenbank vertraut in diesem Fall dem Client-Betriebssystem bzw. verlagert die Authentifizierung auf dieses. In diesem Artikel wird die Einrichtung einer solchen Verbindung beschrieben.

Um im Anschluss zu verdeutlichen, dass es sich bei den benutzten Namen zwischen Betriebssystem und Datenbank um unterschiedliche User handelt, wird außerdem noch ein User-Mapping verwendet, einem optionalen Zusatz des Ident-Verfahrens.

Der User wird dazu zunächst im Client-Betriebssystem als root angelegt:

Die nächsten Schritte führen wir nun als User postgres auf dem Datenbankserver aus. Zunächst legen wir einen Datenbankuser pguser​ an: Im PGDATA-Verzeichnis des Datenbank-Clusters editieren wir die Datei pg_ident.conf und erstellen ein simples User-Mapping zwischen dem OS-User des Clients und dem Datenbank-User: Zusätzlich muss in der pg_hba.conf ein Eintrag zur Verwendung des Mappings vorhanden sein. Ein Zugriff mit der Ident-Methode muss immer über das Netzwerk geschehen, daher verwenden wir einen host-Eintrag: Um die Änderungen an den Konfigurationsdateien zu aktivieren, reicht es, die diese neu einzulesen. Wenn wir jetzt versuchen, uns vom User ordix aus anzumelden, schlägt dies allerdings immer noch fehl. Das Postgres-Environment zur Anmeldung wurde bereits über die .bash_profile geladen.

Ein Blick in die Server-Logdatei zeigt uns auch, warum:

Der erwähnte Port 113 ist der Standardport des Ident-Servers, welcher auf dem Client allerdings noch nicht läuft und daher gestartet werden muss. In unserem konkreten Fall ist er tatsächlich noch gar nicht installiert.

Da wir im Beispiel unter SUSE Linux arbeiten, installieren wir zunächst das zugehörige Paket mit zypper in einer root-Session, wieder auf dem Client:

Im Anschluss muss der Dienst gestartet und für den Neustart aktiviert werden:

Jetzt läuft der Ident-Server:

Nun melden wir uns als User ordix am System an und versuchen erneut, uns zu verbinden

Man beachte allerdings bei dieser ganzen Geschichte folgendes: Es wird in der Dokumentation explizit darauf hingewiesen, dass sich diese Methode nur für geschlossene Netzwerke eignet, in denen dem Client-Rechner, auf dem der Ident-Server ausgeführt wird, vertraut wird. Anderenfalls kann ein Angreifer dies nämlich nutzen, um dem Datenbank-Server eine falsche Identität vorzutäuschen.

Fazit

Die Authentifizierung mittels eines User-Mappings funktioniert tadellos, sollte aber nur in gut gesicherten und überwachten Umgebungen verwendet werden.
Kommentare hinterlassen