Samba

針對 samba 活動目錄的 postgresql 身份驗證

  • April 26, 2018

我最近設置了一個新的 Samba4 Active Directory 來處理我的小型辦公網路的集中身份驗證。在這台伺服器上還有一個 postgresql-9.5 實例,我正在嘗試讓它針對 AD 進行身份驗證。認識到身份驗證(這是我需要的)和授權之間的區別(我相信一旦使用者通過身份驗證,這將完全在 postgresql 中處理),我遇到了問題。

AD 目前相當普通,緊跟這個 howto。我已經設置了一些使用者,並且基本的 kerberos 身份驗證似乎正在工作(使用 完成kinit myusername@SAMDOM.MYDOMAIN.TLD,使用 驗證klist)。同樣,smbclient //myhost.samdom.mydomain.tld/netlogon -U 'myusername'作品。

localhost 正在解析到 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 myusername@SAMDOM.MYDOMAIN.TLD -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

myusername@SAMDOM.MYDOMAIN.TLD@pgtest2 LOG:  could not receive data from client: Connection reset by peer
myusername@SAMDOM.MYDOMAIN.TLD@pgtest2 FATAL:  GSSAPI authentication failed for user "myusername@SAMDOM.MYDOMAIN.TLD"
myusername@SAMDOM.MYDOMAIN.TLD@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'

(密鑰表是用: 生成的samba-tool domain exportkeytab postgres.keytab -U postgres/myhost.samdom.mydomain.tld@SAMDOM.MYDOMAIN.TLD,是模式 400,並歸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

最近我面臨針對 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 之外,還必須在數據庫中創建角色,因為如上所述,授權機制是在 postgres 中完成的。然後重新啟動 postgresql 並嘗試連接。

缺點是您將在 postgres 日誌中收到錯誤“ Strong(er) authentication required ”,因此您必須在 samba conf 文件中禁用強 ldap 授權,並在全域設置中添加:

ldap server require strong auth = No

引用自:https://unix.stackexchange.com/questions/291722