LabHub

기업 인증 연동 · LDAP 과 조직도 · 실습

LDAP 디렉터리 적재하고 필터로 조회하기

LabHub 에서 이어서 보기

목표

slapd 를 직접 기동하고 조직 LDIF 를 적재한 뒤, LDAP 검색 필터를 조합해
원하는 사용자·그룹을 정확히 뽑아낼 수 있게 됩니다.

왜 중요한가

SI 프로젝트에서 "우리 시스템에 사내 계정 붙여 주세요"는 결국 LDAP 조회로 끝납니다.
그런데 필터를 대충 쓰면 비활성 계정과 서비스 계정까지 사용자 목록에 들어오고,
반환 속성을 지정하지 않으면 10만 명 디렉터리에서 전 속성을 끌어와 서버를 괴롭힙니다.
또 이 실습의 디렉터리는 그룹이 사람을 가리키는(member) 구조인데,
로그인마다 '이 사람의 그룹'을 구하려고 전체 그룹을 스캔하는 코드가
실제로 만들어집니다. 사용자 100명일 땐 모르다가 1만 명이 되면 로그인이 3초가 됩니다.

단계

1. slapd 를 1389 포트로 기동합니다.
slapd -h ldap://127.0.0.1:1389 -F /opt/lab/ldap/slapd.d
그리고 Root DSE 를 조회해 /root/ldap/root-dse.txt 에 저장합니다.
파일에 dc=labhub,dc=co,dc=kr 이 들어 있어야 합니다.
2. /opt/lab/fixtures/auth/ldif/00-base.ldif 를 적재합니다.
Base DN dc=labhub,dc=co,dc=kr 조회가 성공해야 합니다.
3. /opt/lab/fixtures/auth/ldif/10-people.ldif 를 적재합니다.
objectClass=inetOrgPerson 엔트리가 30개 있어야 합니다.
4. /opt/lab/fixtures/auth/ldif/20-groups.ldif 를 적재합니다.
objectClass=groupOfNames 엔트리가 6개 있어야 합니다.
5. 개발팀 소속이면서 직급이 과장인 사람uid 만 골라
한 줄에 하나씩 오름차순으로 /root/ldap/q1.txt 에 저장합니다.
(부서 속성은 ou, 직급 속성은 title 입니다.)
6. 직급이 부장 또는 차장이면서 총무팀이 아닌 사람uid
같은 형식으로 /root/ldap/q2.txt 에 저장합니다.
7. uid=hong 이 속한 그룹의 cn 을 한 줄에 하나씩 오름차순으로
/root/ldap/groups-of-hong.txt 에 저장합니다.
8. /root/ldap/whois.sh 를 만듭니다. 인자 하나(uid)를 받아 아래 네 줄을
정확히 이 순서로 출력합니다. 없는 uid 면 0 이 아닌 종료코드로 끝냅니다.

   cn=<이름>   ou=<부서>   title=<직급>   groups=<소속 그룹 수>

참고

단계 8개

  1. slapd 기동과 Root DSE 확인
  2. 베이스 엔트리 적재
  3. 사용자 엔트리 적재
  4. 그룹 엔트리 적재
  5. 복합 조건 필터
  6. OR 와 NOT 조합
  7. 그룹 멤버십 역조회
  8. 사용자 조회 스크립트