Ich habe vor kurzem ein neues Samba4 Active Directory eingerichtet, um die zentrale Authentifizierung für mein kleines Büronetzwerk zu handhaben. Auf diesem Server befindet sich auch eine PostgreSQL-9.5-Instanz, und ich versuche, sie gegenüber dem AD authentifizieren zu lassen. Erkennen des Unterschieds zwischenAuthentifizierung(das ist, was ich brauche) undGenehmigung(Ich glaube, dies wird vollständig innerhalb von PostgreSQL gehandhabt, sobald der Benutzer authentifiziert wurde), ich stoße auf Probleme.
Die AD ist im Moment eher langweilig und folgt dichtdiese Anleitung. Ich habe einige Benutzer eingerichtet und die grundlegende Kerberos-Authentifizierung scheint zu funktionieren (durchgeführt mit , überprüft mit ). Funktioniert ebenfalls.kinit [email protected]
klist
smbclient //myhost.samdom.mydomain.tld/netlogon -U 'myusername'
Der lokale Host wird zum Samba AD aufgelöst und die DNS-Weiterleitung erfolgt korrekt nach oben. Folgendes funktioniert:
$ host -t SRV _ldap._tcp.samdom.mydomain.tld
$ host -t SRV _kerberos._udp.samdom.mydomain.tld
$ host -t A myhost.samdom.mydomain.tld
Übrigens: Ubuntu-16.04-Server, PostgreSQL-9.5, Samba-4.3.9
Frage:
Was fehlt mir in der Konfiguration von Samba und/oder Postgres, um die Authentifizierung gegenüber dem AD zu aktivieren?
DB-Einrichtung
Die grundlegende Konnektivität mit PostgreSQL scheint gut zu sein: Es hört auf den entsprechenden Schnittstellen (alle für den Moment), der postgres
Benutzer kann problemlos lokal auf Dinge zugreifen. Ich habe eine einfache Datenbank eingerichtet, Ausgabe von \list
:
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+------------+----------+-------------+-------------+-----------------------
pgtest2 | myusername | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
mit aufgelisteten Benutzern (prodiese Abfrage):
User name | User ID | Attributes
------------+---------+-------------------
myusername | 16384 | create database
postgres | 10 | superuser, create+
| | database
Authentifizierung fehlgeschlagen
Wenn ich es jedoch auf der Konsole versuche:
$ psql -h myhost.samdom.mydomain.tld -U [email protected] -d pgtest2
psql: GSSAPI continuation error: Unspecified GSS failure. Minor code may provide more information
GSSAPI continuation error: No Kerberos credentials available
Aus /var/log/postgresql/postgresql-9.5-main.log
:
[email protected]@pgtest2 LOG: could not receive data from client: Connection reset by peer
[email protected]@pgtest2 FATAL: GSSAPI authentication failed for user "[email protected]"
[email protected]@pgtest2 DETAIL: Connection matched pg_hba.conf line 92: "host all all 0.0.0.0/0 gss krb_realm=SAMDOM.MYDOMAIN.TLD include_realm=1 map=krb"
Konfigurationsdateien
Die Konfigurationsdatei (Teile), die ich für angemessen und notwendig halte:
/etc/postgresql/9.5/main/pg_hba.conf
:local all postgres peer local all all peer host all all 0.0.0.0/0 gss krb_realm=SAMDOM.MYDOMAIN.TLD include_realm=1 map=krb host all all 127.0.0.1/32 md5 host all all ::1/128 md5
/etc/postgresql/9.5/main/postgres.conf
:krb_server_keyfile = '/var/lib/postgresql/9.5/main/postgres.keytab'
(Der Keytab wurde mit generiert:, hat Modus 400 und ist Eigentum von .)
samba-tool domain exportkeytab postgres.keytab -U postgres/[email protected]
postgres:postgres
/etc/samba/smb.conf
:# Global parameters [global] workgroup = SAMDOM realm = SAMDOM.MYDOMAIN.TLD netbios name = MYHOST interfaces = lo eno1 bind interfaces only = Yes server role = active directory domain controller dns forwarder = 11.22.33.254 idmap_ldb:use rfc2307 = yes tls enabled = yes tls keyfile = tls/key.pem tls certfile = tls/cert.pem tls cafile = tls/ca.pem [netlogon] path = /var/lib/samba/sysvol/samdom.mydomain.tld/scripts read only = No [sysvol] path = /var/lib/samba/sysvol read only = No
Antwort1
Vor kurzem stand ich vor der Aufgabe der Authentifizierung von Postgress-Benutzern gegenüber dem Samba4 AD-Domänencontroller und fand die Lösungauf dieser Seite. Wie Sie sehen, würde der Eintrag pg_hba.conf in Ihrem Fall lauten:
host all all 0.0.0.0/0 ldap ldapserver=localhost ldapprefix="" ldapsuffix="@SAMDOM.MYDOMAIN.TLD"
oder wenn Sie die Benutzerauthentifizierung lieber im Format DOMAIN\Benutzername bevorzugen:
host all all 0.0.0.0/0 ldap ldapserver=localhost ldapprefix="SANDOM\" ldapsuffix=""
Die Rolle muss zusätzlich zu AD in der Datenbank erstellt werden, da der Autorisierungsmechanismus, wie oben erwähnt, innerhalb von Postgres erfolgt. Starten Sie dann PostgreSQL neu und versuchen Sie die Verbindung.
Der Nachteil ist, dass Sie den Fehler "Starke(re) Authentifizierung erforderlich" im Postgres-Protokoll, daher müssen Sie die starke LDAP-Autorisierung in der Samba-Konfigurationsdatei deaktivieren, indem Sie Folgendes in den globalen Einstellungen hinzufügen:
ldap server require strong auth = No