如何最好地排除 LDAP 故障?

如何最好地排除 LDAP 故障?

我正在尝试将 Red Hat Ansible Tower 配置为通过 LDAPS 进行身份验证。它有一个 Web GUI 来配置 LDAPS 设置,但测试它的唯一方法是通过ldapsearchCLI 实用程序。在把这个项目扔到我的腿上之前,我从未使用过 LDAPS。

思考 ldapsearch -x -H ldaps://myldapserver:ldapport -D "CN=ansible,OU=blah,DC=blah" -b "OU=ansiblegroup,DC=blah" -w passwd返回以下内容:

# search result
search: 2
result: 0 Success

# numResponses: 3
# numEntires: 2

说实话,我不知道这些结果意味着什么,但我认为它有效,因为它说Success。我尝试将-Has Tower 的“LDAP 服务器 URI”、-D“LDAP 绑定 DN”和-b“LDAP 组类型参数”设置为“LDAP 组类型参数”,但没有成功。

accessgroup其中有一个额外的 OU 调用ansiblegroup,其中包含实际用户(比方说user1user2),但如果我将其更改为,-b "OU=accessgroup,OU=ansiblegroup,DC=blah则会得到以下内容:

search: 2
result: 32 No such object
matchedDN: OU=ansiblegroup,DC=blah"

那么我该去哪里呢?除了 1,000 页的 LDAP 手册之外,还有什么可能有用的东西吗?

答案1

假设有以下配置

TOWER_URL="tower.example.com";
curl --silent --user "${ACCOUNT}:${PASSWORD}" --location "https://${TOWER_URL}/api/v2/settings/ldap" | jq '.'

导致输出为

{
  "AUTH_LDAP_SERVER_URI": "ldaps://ad.example.com:636",
  "AUTH_LDAP_BIND_DN": "CN=tower_ldap,OU=service_accounts,OU=accounts,DC=example,DC=com",
  "AUTH_LDAP_BIND_PASSWORD": "$encrypted$",
  "AUTH_LDAP_START_TLS": false,
  "AUTH_LDAP_CONNECTION_OPTIONS": {
    "OPT_REFERRALS": 0,
    "OPT_NETWORK_TIMEOUT": 30
  },
  "AUTH_LDAP_USER_SEARCH": [
    "DC=example,DC=com",
    "SCOPE_SUBTREE",
    "(sAMAccountName=%(user)s)"
  ],
  "AUTH_LDAP_USER_DN_TEMPLATE": null,
  "AUTH_LDAP_USER_ATTR_MAP": {
    "first_name": "givenName",
    "last_name": "sn",
    "email": "userPrincipalName"
  },
  "AUTH_LDAP_GROUP_SEARCH": [
    "OU=groups,DC=example,DC=com",
    "SCOPE_SUBTREE",
    "(objectClass=group)"
  ],
  "AUTH_LDAP_GROUP_TYPE": "NestedActiveDirectoryGroupType",
  "AUTH_LDAP_GROUP_TYPE_PARAMS": {},
  "AUTH_LDAP_REQUIRE_GROUP": "CN=tower_user,OU=resource_groups,OU=groups,DC=example,DC=com",
  "AUTH_LDAP_DENY_GROUP": null,
  "AUTH_LDAP_USER_FLAGS_BY_GROUP": {},
  "AUTH_LDAP_ORGANIZATION_MAP": {},
  "AUTH_LDAP_TEAM_MAP": {},
  "AUTH_LDAP_1_SERVER_URI": "",
  "AUTH_LDAP_1_BIND_DN": "",
  "AUTH_LDAP_1_BIND_PASSWORD": "",
  "AUTH_LDAP_1_START_TLS": true,
  "AUTH_LDAP_1_CONNECTION_OPTIONS": {
    "OPT_REFERRALS": 0,
    "OPT_NETWORK_TIMEOUT": 30
  },
  ...

name您可以按如下方式查询目录

ldapsearch -h ad.example.com -p 389 \
           -D "tower_ldap" -x -w "${LDAP_PASSWORD}" \
           -b "DC=example,DC=com" \
           -s sub "(& (memberOf:1.2.840.113556.1.4.1941:=CN=tower_user,OU=resource_groups,OU=groups,DC=example,DC=com) )" name \
           | grep "name:" | cut -d " " -f 2-

cn仅获取允许登录或进一步搜索的用户的用户名

... cn | grep "cn:" | cut -d " " -f 2-
... cn | grep "cn:" | cut -d " " -f 2- | wc -l

请注意

"AUTH_LDAP_REQUIRE_GROUP": "CN=tower_user,OU=resource_groups,OU=groups,DC=example,DC=com"

包含仅作为成员的角色组

CN=tower_user_role,OU=role_groups,OU=groups,DC=example,DC=com

因此查询NestedActiveDirectoryGroupType

进一步问答

进一步的文档

相关内容