我正在尝试配置我的 Postgresql server 12.6 [Ubuntu 20.04 build] 以通过 LDAP 针对我的 2012 Active Directory 树进行经过身份验证的 LDAP 用户身份验证。我已经设置了我的 pg_hba.conf 文件,这是我最近的尝试。我还尝试了 ldapserver 样式设置,但都得到了相同的错误结果。
host all all all ldap ldapurl="ldap://stc.int:389/dc=stc,dc=int?sAMAccountName" ldapbinddn="CN=PostgreSQL Service Account,OU=Service Accounts,DC=stc,DC=int" ldapbindpasswd="<scrubed>"
当我尝试登录时,服务器上出现以下错误:
2021-05-26 12:47:00.008 UTC [2767782] btyger-admin@btyger-admin LOG: could not search LDAP for filter "(sAMAccountName=btyger-admin)" on server "stc.int": Operations error
2021-05-26 12:47:00.008 UTC [2767782] btyger-admin@btyger-admin DETAIL: LDAP diagnostics: 000004DC: LdapErr: DSID-0C0907E9, comment: In order to perform this operation a successful bind must be completed on the connection., data 0, v2580
2021-05-26 12:47:00.008 UTC [2767782] btyger-admin@btyger-admin FATAL: LDAP authentication failed for user "btyger-admin"
2021-05-26 12:47:00.008 UTC [2767782] btyger-admin@btyger-admin DETAIL: Connection matched pg_hba.conf line 106: "host all all all ldap ldapurl="ldap://stc.int:389/dc=stc,dc=int?sAMAccountName" ldapbinddn="CN=PostgreSQL Service Account,OU=Service Accounts,DC=stc,DC=int" ldapbindpasswd="<scrubed>""
我知道当 LDAP 客户端尝试进行未经身份验证的搜索时会发生 AD 错误。我已使用同一台机器上的 ldapsearch 命令验证了凭据,并且参数/凭据验证正确。
我是不是遗漏了什么或者发现了一个错误?
答案1
longshot:将范围设置为 sub。此配置中的标准是 base。
ldapurl RFC 4516 LDAP URL。这是以更紧凑和标准的形式编写其他一些 LDAP 选项的另一种方法。格式为
ldap[s]://主机[:端口]/basedn[?[属性][?[范围][?[过滤器]]]]
scope 必须是 base、one、sub 之一,通常是最后一个。(默认值为 base,通常在本应用程序中无用。)attribute 可以指定单个属性,在这种情况下,它将用作 ldapsearchattribute 的值。如果 attribute 为空,则 filter 可以用作 ldapsearchfilter 的值。
答案2
我找到了问题所在。这是 Active Directory LDAP 策略的问题。
- 一项政策规定,如果没有经过身份验证的用户,我就无法进行搜索。
- 另一个人说我不允许绑定不安全的 LDAP。
- 我以为我使用了不同的 TLS 证书
因此,当我尝试通过 LDAPS 绑定为服务帐户时,我遇到了错误的证书错误。当我尝试通过不安全的 LDAP 进行绑定时,我被禁止通过不安全的 LDAP 进行绑定。