我最近设置了一个新的 Samba4 Active Directory 来处理我的小型办公网络的集中身份验证。该服务器上还有一个 postgresql-9.5 实例,我正在尝试让它针对 AD 进行身份验证。认识到之间的差异验证(这就是我需要的)和授权(我相信一旦用户通过身份验证,这完全在 postgresql 中处理),我遇到了问题。
AD目前相当普通,紧随其后这个指南。我已经设置了一些用户,基本的 kerberos 身份验证似乎正在工作(使用 完成,使用 进行验证)。同样,有效。kinit [email protected]
klist
smbclient //myhost.samdom.mydomain.tld/netlogon -U 'myusername'
本地主机正在解析 samba AD,并且 DNS 转发正确地向上游进行。这些工作:
$ host -t SRV _ldap._tcp.samdom.mydomain.tld
$ host -t SRV _kerberos._udp.samdom.mydomain.tld
$ host -t A myhost.samdom.mydomain.tld
顺便说一句:ubuntu-16.04 服务器,postgresql-9.5,samba-4.3.9
问题:
我在 samba 和/或 postgres 的配置中缺少什么来启用针对 AD 的身份验证?
数据库设置
与 postgresql 的基本连接似乎很好:它正在侦听适当的接口(目前全部),用户postgres
可以毫无问题地在本地访问内容。我建立了一个简单的数据库,输出来自\list
:
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+------------+----------+-------------+-------------+-----------------------
pgtest2 | myusername | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
列出的用户(每这个查询):
User name | User ID | Attributes
------------+---------+-------------------
myusername | 16384 | create database
postgres | 10 | superuser, create+
| | database
验证失败
但是,当我在控制台上尝试时:
$ 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
从/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"
配置文件
我认为适当且必要的配置文件(部分):
/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'
(密钥表是用: 生成的,模式为 400,并由 拥有。)
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
答案1
最近我面临着针对 samba4 AD 域控制器对 postgress 用户进行身份验证的任务,我找到了解决方案在此页面中。如您所见,您的情况下的 pg_hba.conf 条目将是:
host all all 0.0.0.0/0 ldap ldapserver=localhost ldapprefix="" ldapsuffix="@SAMDOM.MYDOMAIN.TLD"
或者,如果您更喜欢以 DOMAIN\username 的形式对用户进行身份验证:
host all all 0.0.0.0/0 ldap ldapserver=localhost ldapprefix="SANDOM\" ldapsuffix=""
除了 AD 之外,还必须在数据库中创建 rol,因为如上所述,授权机制是在 postgres 内部完成的。然后重新启动postgresql并尝试连接。
缺点是你会得到错误“需要强(呃)身份验证" 在 postgres 日志中,因此您必须在 samba conf 文件中禁用强 ldap 授权,并在全局设置中添加以下内容:
ldap server require strong auth = No