LDAP 문제를 가장 잘 해결하는 방법은 무엇입니까?

LDAP 문제를 가장 잘 해결하는 방법은 무엇입니까?

LDAPS를 통해 인증하도록 Red Hat Ansible Tower를 구성하려고 합니다. LDAPS 설정을 구성하는 웹 GUI가 있지만 이를 테스트하는 유일한 방법은 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. "LDAP 서버 URI", "LDAP 바인딩 DN" 및 "LDAP 그룹 유형 매개변수"를 -H타워 로 "LDAP 그룹 유형 매개변수"로 설정하려고 시도했지만 성공하지 못했습니다.-D-b

accessgroupansiblegroup실제 사용자(예: user1및 )를 포함하는 추가 OU 호출이 있지만 user2이를 이렇게 변경하면 -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.

추가 질문과 답변

추가 문서

관련 정보