問題:

問題:

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

AD目前相當普通,緊追在後這個指南。我已經設定了一些用戶,基本的 kerberos 身份驗證似乎正在工作(使用 完成,使用 驗證)。同樣,有效。kinit [email protected]klistsmbclient //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

相關內容