
전사적 인증을 위해 Active Directory 서버를 설정하려고 합니다.
AD에 대해 인증해야 하는 서버 중 일부가 DMZ에 배치되어 있으므로 LDAP 서버를 프록시로 사용하여 DMZ에 있는 1개의 서버만 AD 서버가 배치된 LAN에 연결하면 된다고 생각했습니다. ).
인터넷 검색을 통해 slapd(아래 slapd.conf 참조)를 구성하는 데 문제가 없었고 ldapsearch 도구를 사용할 때 작동하는 것 같았으므로 apache2 htaccess에서 이를 사용하여 LDAP 프록시를 통해 사용자를 인증하려고 했습니다.
여기에 문제가 있습니다. AD의 사용자 이름이 'sAMAccountName' 속성에 저장되어 있다는 사실을 발견하여 이를 .htaccess(아래 참조)에 구성했지만 로그인이 작동하지 않았습니다.
syslog에서 우리는 ldapsearch에 대한 필터가 (있어야 하는 것과는 달리) ''가 아니라는 것을 발견했습니다.(&(objectClass=*)(sAMAccountName=authtest01))' 하지만 '(&(objectClass=*)(?=정의되지 않음))' 우리가 알아낸 것은 속성이 존재하지 않거나 이 속성에 대한 값이 구문적으로 잘못되었음을 보여주는 slapd의 방식입니다.
우리는 누락된 스키마를 생각하고 다음을 발견했습니다.Microsoft.스키마(그리고 그 중 .std / .ext 항목) slapd.conf에 포함시키려고 했습니다. 작동하지 않습니다. 작동하는 스키마를 찾지 못했기 때문에 sAMAccountName에 대한 부분을 선택하고 포함된 microsoft.minimal.schema(아래 참조)를 빌드했습니다. 이제 syslog에서 더 정확한 로그를 얻을 수 있습니다.
Jun 16 13:32:04 breauthsrv01 slapd[21229]: get_ava: illegal value for attributeType sAMAccountName
Jun 16 13:32:04 breauthsrv01 slapd[21229]: conn=0 op=1 SRCH base="ou=xxx,dc=int,dc=xxx,dc=de" scope=2 deref=3 filter="(&(objectClass=\*)(?sAMAccountName=authtest01))"
Jun 16 13:32:04 breauthsrv01 slapd[21229]: conn=0 op=1 SRCH attr=sAMAccountName
Jun 16 13:32:04 breauthsrv01 slapd[21229]: conn=0 op=1 SEARCH RESULT tag=101 err=0 nentries=0 text=
하지만 LDAP를 통해 AD와 직접 Apache htaccess를 사용하는 것은 가능합니다. 누구든지 작업 설정을 갖고 있나요? 미리 도움을 주셔서 감사합니다.
slapd.conf:
allow bind_v2
include /etc/ldap/schema/core.schema
...
include /etc/ldap/schema/microsoft.minimal.schema
...
backend ldap
database ldap
suffix "ou=xxx,dc=int,dc=xxx,dc=de"
uri "ldap://80.156.177.161:389"
acl-bind bindmethod=simple binddn="CN=authtest01,ou=GPO-Test,ou=xxx,dc=int,dc=xxx,dc=de" credentials=xxxxx
.htaccess:
AuthBasicProvider ldap
AuthType basic
AuthName "AuthTest"
AuthLDAPURL "ldap://breauthsrv01.xxx.de:389/OU=xxx,DC=int,DC=xxx,DC=de?sAMAccountName?sub"
AuthzLDAPAuthoritative On
AuthLDAPGroupAttribute member
AuthLDAPBindDN CN=authtest02,OU=GPO-Test,OU=xxx,DC=int,DC=xxx,DC=de
AuthLDAPBindPassword test123
Require valid-user
마이크로소프트.최소.스키마:
attributetype ( 1.2.840.113556.1.4.221
NAME 'sAMAccountName'
SYNTAX '1.3.6.1.4.1.1466.115.121.1.15'
SINGLE-VALUE )
답변1
slapd.conf 파일에 매핑을 추가해야 합니다:
moduleload rwm
...
overlay rwm
rwm-map attribute uid sAMAccountName
rwm-map objectClass posixGroup group
rwm-map objectClass posixAccount person
rwm-map objectClass memberUid member
그런 다음 다음을 검색할 수 있습니다.UID속성 대신sAMA계정 이름.htaccess 파일의 속성:
AuthLDAPURL "ldap://breauthsrv01.xxx.de:389/OU=xxx,DC=int,DC=xxx,DC=de?uid?sub"
답변2
다음 오류 메시지가 표시됩니다.
get_ava: attributeType sAMAccountName의 값이 잘못되었습니다.
이는 일치 규칙 sAMAccountName
이 부족한 속성 정의로 인해 발생합니다 . microsoft.minimal.schema
간단히 말해서, OpenLDAP의 스키마 정의를 사용하면 어떤 종류의 검색이 허용되는지(존재, 정확한 일치, 하위 문자열 일치 등) 말할 수 있으며 이 정의에는 아무 것도 없습니다.
이 시도:
attributetype ( 1.2.840.113556.1.4.221
NAME 'sAMAccountName'
EQUALITY caseIgnoreMatch
SYNTAX '1.3.6.1.4.1.1466.115.121.1.15'
SINGLE-VALUE )
답변3
조나단의 대답은 나에게 올바른 방향을 알려주었고 다음과 같은 문제를 해결하게 해주었습니다.
additional info: sAMAccountName: attribute type undefined
문제. 그러나 나는 이 속성을 개인 항목에 대한 합법적인 값으로 정의해야 하고 각 사람에게 해당 속성을 갖도록 허용된 objectClass를 제공해야 한다는 것을 깨달았습니다. inetOrgPerson에 제공할 수 있는 모든 속성과 마찬가지로.
내 microsoft.minimal.schema 파일은 이제 다음과 같습니다.
attributetype ( 1.2.840.113556.1.4.221
NAME 'sAMAccountName'
SYNTAX '1.3.6.1.4.1.1466.115.121.1.15'
SINGLE-VALUE )
attributetype ( 1.2.840.113556.1.4.146
NAME 'objectSid'
SYNTAX '1.3.6.1.4.1.1466.115.121.1.40'
SINGLE-VALUE )
objectclass ( 1.2.840.113556.1.5.6
NAME 'securityPrincipal'
SUP top
AUXILIARY
MUST (objectSid $ sAMAccountName )
MAY () )
# MAY (nTSecurityDescriptor $ securityIdentifier $ supplementalCredentials $
# rid $ sAMAccountType $ sIDHistory $ altSecurityIdentities $ tokenGroups $
# tokenGroupsNoGCAcceptable $ accountNameHistory $
# tokenGroupsGlobalAndUniversal))
MS 선택적 속성을 아무것도 없는 것으로 바꾸므로 이를 정의할 필요가 없습니다.
사용자 항목의 예는 다음과 같습니다.
dn: uid=user2,ou=example,dc=aa,dc=ad,dc=example,dc=gov
uid: user2
sAMAccountName: user2
objectSid: user2
cn: User Two
displayName: User Two
givenName: User2
sn: One
objectClass: inetOrgPerson
objectClass: securityPrincipal
mail: [email protected]
# password from slappasswd is 'user2'
userPassword: {SSHA}sjB5fmIIPTrUUammtmonP+6DdC93+P4L