기업 인증 연동 · LDAP 과 조직도 · 실습
LDAP 디렉터리 적재하고 필터로 조회하기
목표
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=<소속 그룹 수>참고
- 기본 조회:
ldapsearch -x -H ldap://127.0.0.1:1389 -b "dc=labhub,dc=co,dc=kr" -LLL "(필터)" 속성명 - 적재:
ldapadd -x -H ldap://127.0.0.1:1389 -D "cn=admin,dc=labhub,dc=co,dc=kr" -w labhub123 -f 파일.ldif - 건수 세기: 결과에서
dn:으로 시작하는 줄을 세면 됩니다. - 흔한 실수 1: 필터 괄호 짝이 안 맞는 것.
(&(a=1)(b=2))처럼 전체를 한 번 더 감싸야 합니다. - 흔한 실수 2: 반환 속성을 지정하지 않아 전 속성이 쏟아지는 것.
- 흔한 실수 3:
-b를 빼먹는 것. Base 없이는 어디서부터 찾을지 서버가 모릅니다.
단계 8개
- slapd 기동과 Root DSE 확인
- 베이스 엔트리 적재
- 사용자 엔트리 적재
- 그룹 엔트리 적재
- 복합 조건 필터
- OR 와 NOT 조합
- 그룹 멤버십 역조회
- 사용자 조회 스크립트