openldap 서버에서 리버스 그룹 멤버쉽 유지 관리를 구성하려면 어떻게합니까? (의 멤버이다)


18

현재 LDAP 인증을 시스템에 통합하려고 노력하고 있으며 LDAP 그룹을 기반으로 액세스를 제한하고 싶습니다. 이 작업을 수행하는 유일한 방법은 검색 필터를 사용하는 것이므로 검색 필터에서 "memberOf"속성을 사용하는 것이 유일한 옵션이라고 생각합니다. "memberOf"속성은 서버의 "groupOfNames"항목에 대해 새 "member"속성이 작성 될 때마다 서버에서 작성할 수있는 운영 속성이라는 것을 이해하고 있습니다. 내 주요 목표는 기존 "groupOfNames"항목에 "member"속성을 추가하고 제공하는 DN에 일치하는 "memberOf"속성을 추가하는 것입니다.

내가 지금까지 달성 한 것 :

필자는 여전히 LDAP 관리에 익숙하지 않지만 openldap 관리자 안내서에서 찾은 내용을 바탕으로 리버스 그룹 멤버쉽 유지 관리 ( "오버레이 멤버 ")가 내가 원하는 효과를 정확하게 달성 하는 것처럼 보입니다 .

내 서버는 현재 "cn = config"스타일 런타임 구성을 사용하는 openldap 2.4.15의 패키지 설치 (ubuntu에서 분리)를 실행하고 있습니다. 내가 찾은 대부분의 예는 여전히 정적 구성의 이전 "slapd.conf"방법을 참조하며 구성을 새 디렉토리 기반 모델에 적용하기 위해 최선을 다했습니다.

오버레이 멤버를 활성화하기 위해 다음 항목을 추가했습니다.

olcModuleLoad로 모듈 활성화

cn=config/cn\=module\{0\}.ldif

dn: cn=module{0}
objectClass: olcModuleList
cn: module{0}
olcModulePath: /usr/lib/ldap
olcModuleLoad: {0}back_hdb
olcModuleLoad: {1}memberof.la
structuralObjectClass: olcModuleList
entryUUID: a410ce98-3fdf-102e-82cf-59ccb6b4d60d
creatorsName: cn=config
createTimestamp: 20090927183056Z
entryCSN: 20091009174548.503911Z#000000#000#000000
modifiersName: cn=admin,cn=config
modifyTimestamp: 20091009174548Z

데이터베이스에 대한 오버레이를 활성화하고 기본 설정 (groupOfNames, member, memberOf 등)을 사용하도록 허용

cn=config/olcDatabase={1}hdb/olcOverlay\=\{0\}memberof

dn: olcOverlay={0}memberof
objectClass: olcMemberOf
objectClass: olcOverlayConfig
objectClass: olcConfig
objectClass: top
olcOverlay: {0}memberof
structuralObjectClass: olcMemberOf
entryUUID: 6d599084-490c-102e-80f6-f1a5d50be388
creatorsName: cn=admin,cn=config
createTimestamp: 20091009104412Z
olcMemberOfRefInt: TRUE
entryCSN: 20091009173500.139380Z#000000#000#000000
modifiersName: cn=admin,cn=config
modifyTimestamp: 20091009173500Z

내 현재 결과 :

위의 구성을 사용하면 원하는 수의 "member"항목으로 새로운 "groupOfNames"를 추가 할 수 있으며 관련된 모든 DN이 "memberOf"속성으로 업데이트됩니다. 이것은 내가 기대하는 행동의 일부입니다. 오버레이 멤버로 다음을 수행해야한다고 생각하지만 여전히 다음을 수행하는 방법을 모르며 조언을 기꺼이 환영합니다.

  1. 기존 "groupOfNames"에 "member"속성을 추가하고 해당 "memberOf"속성을 자동으로 작성하십시오.
  2. "member"속성을 제거하고 해당 "memberOf"속성 "을 자동으로 제거하십시오.

답변:


10

나는 똑같은 문제로 고생 해 왔으며, openldap 문서는 미니멀하고 거의 도움이되지 않습니다. 그들이 구성 데이터베이스에 갔을 때 (원칙적으로 나쁜 생각은 아님) 사람들이 /etc/ldap/slapd.conf에서 예제를 제공 할 때 현대적인 slapd 구성 (예 : 우분투)에서는 쓸모가 없습니다.

나는 마침내 이것을 작동시켰다. 다음은 요약 ... 첫 번째 LDIF 파일입니다.

dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulePath: /usr/lib/ldap
olcModuleLoad: memberof

두 번째 LDIF 파일 :

dn: olcOverlay=memberof,olcDatabase={1}hdb,cn=config
objectClass: olcMemberOf
objectClass: olcOverlayConfig
objectClass: olcConfig
objectClass: top
olcOverlay: memberof
olcMemberOfDangling: ignore
olcMemberOfRefInt: TRUE
olcMemberOfGroupOC: groupOfNames
olcMemberOfMemberAD: member
olcMemberOfMemberOfAD: memberOf

ldapadd를 사용하여 구성 데이터베이스에 추가하십시오 (일반 구성과 동일).

데이터베이스 의 기존 데이터자동으로 업데이트 하지 않으므로 slapcat을 사용하여 모든 것을 임시 파일로 복사하고 각 그룹을 방문하고 그룹을 삭제하고 동일한 그룹을 다시 추가해야합니다 (memberOf 속성을 강제로 업데이트해야 함) 바르게). 빈 데이터베이스로 시작하는 경우 개체가 추가 될 때 속성이 올바르게 업데이트됩니다.

또한 "olcDatabase = {1} hdb" 는 매우 일반적이지만 설정과 일치하지 않을 수도 있습니다. 반드시 확인하십시오.


1
아닌가 slapadd를 할 수있는 올바른 방법 (중지 된 데이터베이스에)?
mad_vs

11

나는 최근에 내 블로그 www.jordaneunson.com에 글을 썼고 관련 부분을 복사하여 붙여 넣었습니다.

LDAP 서버에서 "slapd"서비스를 중지하고 slapd.conf 파일을 편집하고 다음 두 줄을 추가해야했습니다.

moduleload memberof.la
overlay memberof

vpn이라는 groupOfNames가 이미 있으므로 다음 내용으로 LDIF 파일을 만들어야했습니다.

dn: cn=vpn,ou=Groups,dc=shop,dc=lan
objectclass: groupofnames
cn: vpn
description: Users allowed to connect on VPN
member: uid=jordan,ou=People,dc=shop,dc=lan

그리고 이것을 내 LDAP 데이터베이스에 추가했습니다.

slapadd -f file.ldif

이 후 디버그에서 LDAP 서버를 시작하여 오류를 확인했습니다.

slapd -d 99 -f /etc/ldap/slapd.conf 

"vpn"의 내 그룹 멤버쉽이 내 사용자 항목에 나열되어 있는지 확인했습니다.

ldapsearch -h ldap -x -b "dc=shop,dc=lan" '(uid=jordan)' memberOf 

그리고 bam! 성공!

jordan, People, shop.lan
dn: uid=jordan,ou=People,dc=shop,dc=lan
memberOf: cn=vpn,ou=Groups,dc=shop,dc=lan

그래서 나는 때린 서비스를 다시 시작했고 그 이후로 많은 성공을 거두었습니다. 새로운 GUI 관리 도구의 경우 phpLDAPAdmin을 사용하고 있으며 memberOf 속성이 사용자에게 할당 및 할당 해제되는 데 아무런 문제가 없습니다.

마지막으로 "memberOf"속성은 기본 LDAP v3 스키마의 일부가 아니므로 ldapsearch를 수행하면 특별히 쿼리하지 않으면이 속성이 표시되지 않습니다. 그렇기 때문에 위 예제에서 ldapsearch 매개 변수의 끝에 선언되었습니다.

도움이 되었기를 바랍니다.

편집 : 방금 Apache Directory Studio에서 문제를 테스트했습니다. 위에서 언급 한 것처럼 속성 멤버 값을 전체적으로 입력하면 A-OK가 작동합니다. 그러나 memberOf 속성은 사용자 항목에 표시되지 않습니다. memberOf 속성이 LDAPv3 스키마의 일부가 아니기 때문입니다. 명령 행 도구 ldapsearch를 사용하는지 확인하십시오.

ldapsearch -h ldap -x -b "dc=shop,dc=lan" '(uid=jordan)' memberOf 

1
모듈을로드하고 오버레이를 추가하는 것은 내가 불행히도 한 일입니다. 내가 말했듯이 문제는 "memberOf"속성이 새 groupOfNames 항목에 추가되지 않는다는 것이 아니라 단순히 "member"속성을 기존 그룹에 추가 할 때 추가되지 않는다는 것입니다. 현재 Apache Directory Studio를 사용하여 LDAP를 찾아보고 구성하므로 찾아 볼 때 memberOf 항목이 표시됩니다. 숨겨져도 문제가되지 않습니다.
emills

1
groupOfNames에서 멤버 속성을 어떻게 작성합니까? 전체 DN을 사용하고 있습니까? "uid = user, ou = People, dc = corp, dc = org"또는 사용자 이름 만 입력 하시겠습니까? 역방향 매핑이 작동하려면 memberOf가 역방향 맵을 배치 할 위치를 알 수 있도록 전체 DN을 사용해야합니다.
Jordan Eunson

1
편집 : 위에서 언급 한 것처럼 속성 멤버 값을 전체적으로 입력하면 A-OK가 작동하는 한 Apache Directory Studio에서 문제를 테스트했습니다. 그러나 memberOf 속성은 사용자 항목에 표시되지 않습니다. memberOf 속성이 LDAPv3 스키마의 일부가 아니기 때문입니다. 이를 확인하려면 명령 행 도구 ldapsearch를 사용하십시오. <code> ldapsearch -h ldap -x -b "dc = shop, dc = lan" '(uid = jordan)'memberOf </ code>
Jordan Eunson

1
멤버 항목에 DN을 사용하고 있습니다. 내가 이미 언급했듯이 기존 그룹에 멤버 속성을 추가 할 때가 아니라 새로운 groupOfNames가 추가되어 표시됩니다 (따라서 볼 수 있음).
emills

1
<quote> 추가 된 것 (따라서 볼 수 있음) </ quote> 죄송하지만이 설명은 올바르지 않습니다. 특별히 쿼리하지 않으면 memberOf 속성이 표시되지 않습니다. 위에 나열된 ldapsearch 명령의 출력을 게시 할 수 있습니까? 하나 사용자 변경 해야 memberOf 특성을 가지고 있지만하지 않습니다.
Jordan Eunson
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.