Apache LDAP에서 중첩 그룹의 사용자를 인증하는 방법은 무엇입니까?


21

다음 설정으로 LDAP 인증을 수행하고 있습니다.

 AuthName            "whatever"
 AuthType            Basic
 AuthBasicProvider   ldap
 AuthLDAPUrl         "ldap://server/OU=SBSUsers,OU=Users,OU=MyBusiness,DC=company,DC=local?sAMAccountName?sub?(objectClass=*)"
 Require ldap-group  CN=MySpecificGroup,OU=Security Groups,OU=MyBusiness,DC=company,DC=local

이것은 작동하지만 인증하려는 모든 사용자를에 배치해야합니다 MySpecificGroup. 그러나 LDAP 서버 에서 다른 사용자 목록을 가진 MySpecificGroup그룹도 포함 하도록 구성했습니다 MyOtherGroup.

그러나 해당 사용자 MyOtherGroup는 인증되지 않았으므로 수동으로 모두 추가해야 MySpecificGroup하며 기본적으로 중첩 그룹을 사용할 수 없습니다. Windows SBS 2003을 사용하고 있습니다.

이를 위해 Apache LDAP를 구성하는 방법이 있습니까? 또는 무한 재귀에 문제가있어서 허용되지 않습니까?

답변:


19

AuthLDAPSubGroupDepth이 작업을 수행 하도록 설정해야합니다 . 여기에 제공하는 정수는 사용자 검색이 중단되기 전에 평가 될 최대 하위 그룹 중첩 깊이를 지정합니다.

이것을 설정에 추가하십시오 :

AuthLDAPSubGroupDepth 1

더 많은 정보 : here and here .


: 나는 아파치 2.2을 실행하는거야, 그것의 mod_authnz_ldap하지 AuthLDAPSubGroupDepth 지시어가 httpd.apache.org/docs/2.2/mod/mod_authnz_ldap.html
Selivanov 보낸 파벨

그렇다면 왜 업데이트하지 않습니까?
Bart De Vos

2
Debian Squeeze를 실행하고 있으며 안정적인 배포를 통해 패키지를 사용하는 것이 좋습니다 : 잘 테스트 된 정기적 인 보안 업데이트. 아파치 2.3은 아직 베타 버전이며, 곧 안정되거나 안정적인 백 포트에 나타날 것이다. AuthnProviderAlias지금 사용 하여이 문제를 해결했습니다 . 아무도 아파치 2.2 솔루션을 제공하지 않을 경우 현상금은 당신 :)입니다
Selivanov 보낸 파벨

다른 서버에있는 그룹의 새로운 정보를 고려할 때이 방법이 여전히 효과가 있다고 생각하지 않습니다.
Jeff Strunk

3
AuthLDAPSubGroupDepth는 Apache HTTPd 2.4에 없습니다. AuthLDAPMaxSubGroupDepth는 올바른 지시문입니다.
크리스 해리스

33

또한 AuthLDAPSubGroupDepthApache 2.4에서만 사용할 수있는 Microsoft AD LDAP를 사용할 때 LDAP_MATCHING_RULE_IN_CHAIN ​​일치 규칙을 사용하여 중첩 그룹을 사용하여 권한을 부여 할 수 있습니다. 이는 클라이언트에서 하위 그룹을 검색하는 것보다 훨씬 빠릅니다. 네트워크를 통한 쿼리가 적은 DC 서버에서 수행되기 때문입니다.

Require ldap-filter memberof:1.2.840.113556.1.4.1941:=CN=Access to Apache,OU=My Organization Unit,DC=company,DC=com

문자열은 1.2.840.113556.1.4.1941입니다 OID 라고 LDAP_MATCHING_RULE_IN_CHAIN. 이 OID는 Microsoft에서 LDAP 구현 (Active Directory의 일부)과 함께 사용하도록 지정됩니다. 다른 LDAP 서버와 함께 사용할 수 없습니다. 사람이 재정의 할 수있는 형식은 다음과 같습니다.iso(1).member_body(2).us(840).microsoft(113556).ad(1).as_schema(4).LDAP_MATCHING_RULE_IN_CHAIN(1941)

Microsoft 설명서에서 :

이 규칙은 DN에 적용되는 필터로 제한됩니다. 이것은 일치하는 것을 찾을 때까지 개체의 상위 체인을 루트까지 걸어가는 특수한 "확장 된"일치 연산자입니다.

참조 :


가능하다면이 10 배를 찬성했습니다. RHEL 5를 실행하는 사람들에게 이것은 훌륭한 솔루션입니다. 최신 기능을 얻기 위해 공급 업체 소스를 컴파일하는 것이 항상 바람직한 솔루션은 아닙니다!
Aaron Copley

도움이되어서 다행입니다. 이것이 아파치에서 LDAP_MATCHING_RULE_IN_CHAIN의 첫 번째 문서화 된 사용법이라고 생각합니다.
Mircea Vutcovici

LDAP_MATCHING_RULE_IN_CHAIN재귀 그룹 구성원을 검색하고 백엔드 서버에 헤더로 전달 하는 방법이 있습니까 (Apache를 리버스 프록시로 사용)?
Gershon Papi

mod_authnz_ldap이것을 제공하지 않습니다. 그러나 LDAP_MATCHING_RULE_IN_CHAIN애플리케이션에서 LDAP 필터를 사용할 수 있습니다 . 참조 : stackoverflow.com/a/34075052/290087
미르 Vutcovici

6

Apache 2.2의 유일한 옵션은 기본 인증 그룹에 포함 된 모든 그룹을 나열하는 것입니다.

Require ldap-group  CN=MySpecificGroup,OU=Security Groups,OU=MyBusiness,DC=company,DC=local
Require ldap-group  CN=MyOtherGroup,OU=Security Groups,OU=MyBusiness,DC=company,DC=local

중첩 된 그룹이 너무 복잡하지 않은 경우 이는 합리적입니다.


AD 도메인 교차 (두 개의 LDAP 서버 사용)

웹 서버에서 실행 되는 slapd_meta 오버레이로 OpenLDAP를 설정 하여 인증을 프록시 할 수 있습니다.

/etc/ldap/slapd.conf는 다음과 같아야합니다.

database meta
suffix   "DC=company,DC=local"
uri      "ldap://a.foo.com/OU=MyBusiness,DC=company,DC=local"
uri      "ldap://b.foo.com/OU=otherdomainsuffix,DC=company,DC=local"

그러면 mod_authnz_ldap 스탠자는 다음과 같습니다.

AuthName            "whatever"
AuthType            Basic
AuthBasicProvider   ldap
AuthLDAPUrl         "ldapi:///DC=company,DC=local?sAMAccountName?sub?(objectClass=*)"
Require ldap-group  CN=MySpecificGroup,OU=Security Groups,OU=MyBusiness,DC=company,DC=local
Require ldap-group  CN=MyOtherGroup,OU=Security Groups,OU=otherdomainsuffix,DC=company,DC=local

작동하려면 약간의 마사지가 필요하지만 이것이 일반적인 생각이라고 생각합니다.


1
불행히도 그룹이 다른 AD 도메인에 있으면 작동하지 않습니다 (Domain1_DomainLocal_Group에 Domain2_Global_Group 포함). 내가 처음 시도한 것은 :)
Selivanov Pavel

그룹 중 하나가 다른 서버에 있다는 것을 의미합니까? 이것이 사실이라면 AuthLDAPSubGroupDepth도 작동하지 않을 것입니다.
Jeff Strunk

예, 두 대의 서버, 두 개의 도메인. AD에 Linux 상자를 통합하고 PAM 인증을 사용하는 것을 고려했지만, Apache 2.0, mod-authnz-external + pwauth는 그룹을 지원하지 않으므로 mod-auth-pam은 지원되지 않습니다. 이 모든 슬프게도 :(
Selivanov Pavel

1
오, 나는 당신이 대답을 업데이트 한 것을 보지 못했습니다. OpenLDAP를 사용하면 slapd_meta가 해결책이 될 수 있지만이 구성의 요점을 없애줍니다. 그룹에서 사용자를 추가 / 삭제하고 서로 그룹을 포함시켜 단일 지점 (Active Directory)에서 사용자 권한을 관리합니다. 추가 OpenLDAP 서비스가없는 AuthnProviderAlias의 아날로그 솔루션은 다음과 같습니다. <AuthnProviderAlias ​​ldap first-ldap> AuthLDAPURL ... </ AuthnProviderAlias> <AuthnProviderAlias ​​ldap second-ldap> AuthLDAPURL ... </ AuthnProviderAlias> ... AuthBasicProvider first-ldap second -ldap
Selivanov Pavel

1
나는 바트 드 보스에게 현상금을 주기로 결정했습니다. 이것은 내 질문이 아닙니다. 원래 질문에 대한 (내 자신의 특정없이) 그의 솔루션은 간단하고 작동합니다
Selivanov Pavel

4

@Mircea_Vutcovici가 제공하는 솔루션이 나를 위해 일했지만 내 유일한 비판은 사람들이 비트 연산자를 사용하는 것을 볼 때 압박을받을 수 있다는 것입니다.

예를 들어, AD 그룹 인증을 사용하여 Apache HTTPd를 프런트 엔드로 사용하는 Apache Bloodhound 설치를 동료 개발자 그룹에게 전달합니다. 비트 연산자와 관련하여 문제가 발생합니다. 관리자는 당황하지 않을 것입니다 ... 나는 바랍니다.

즉, 비트 연산자를 사용하지 않고 여러 ldap 그룹 정의를 사용하지 않는 솔루션이 있습니다.

다음 구성이 나를 위해 작동합니다.

<Location /protected>
    # Using this to bind
    AuthLDAPURL "ldap://<MY_SERVER>:3268/<MY_SEARCH_BASE>?sAMAccountName?sub?(objectClass=user)"
    AuthLDAPBindDN "<MY_BIND_DN>"
    AuthLDAPBindPassword "<MY_PASSWORD>"
    LDAPReferrals Off

    AuthType Basic
    AuthName "USE YOUR AD ACCOUNT"
    AuthBasicProvider ldap
    Require ldap-group <MY_PARENT_GROUP>
    AuthLDAPMaxSubGroupDepth 1
    AuthLDAPSubgroupAttribute member
    AuthLDAPSubGroupClass group
    AuthLDAPGroupAttribute member
    AuthLDAPGroupAttributeIsDN on
</Location>

중요한 부분은 다음 구성이었습니다.

AuthLDAPSubGroupClass group

AuthLDAPMaxSubGroupDepth는 자체적으로 작동하지 않으며 AuthLDAPSubgroupAttribute와 결합 되어도 작동하지 않습니다. AuthLDAPSubGroupClass를 사용했을 때만 하위 그룹에 대한 인증이 작동하기 시작했습니다 ... 적어도 내 상황에서는.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.