기업 인증 연동 · 계정 수명주기와 감사 · 실습
계정 감사 리포트 자동 생성
목표
인사 명부와 LDAP 디렉터리를 대사(對査)해 유령 계정·미생성 계정·특권 유령 계정·
장기 미접속 계정을 스크립트로 뽑아내고, 격리 처리 후 감사 리포트를 작성할 수 있게 됩니다.
왜 중요한가
"퇴사자 계정이 즉시 비활성화됩니까"는 모든 보안 감사의 첫 질문입니다.
그리고 대부분의 조직은 이 대사를 분기에 한 번 사람이 엑셀로 합니다.
그 사이에 사고가 납니다. 유령 계정이 생기는 이유는 게으름이 아니라 구조입니다 —
증분 동기화는 삭제를 감지하지 못하고, 프로비저닝(SCIM)이 없으면 개별 시스템에
계정이 그대로 남습니다. 이 대사를 매주 자동으로 돌릴 수 있으면
감사 대응이 아니라 운영이 됩니다.
단계
0. 준비: slapd 를 1389 로 기동하고 00-base, 10-people, 20-groups 를 적재해 둡니다.
1. 디렉터리의 모든 inetOrgPerson 을 뽑아 /root/audit/ldap_users.csv 를 만듭니다.
첫 줄은 uid,cn,ou,title, uid 오름차순 정렬입니다.
2. /opt/lab/fixtures/auth/audit/hr_roster.csv 를/root/audit/hr.csv 로 복사합니다. (내용 동일해야 합니다)
3. 디렉터리에는 있는데 HR 명부에는 없는 uid 를 한 줄에 하나씩 오름차순으로/root/audit/ghost.txt 에 저장합니다.
4. HR 명부에는 있는데 디렉터리에는 없는 uid 를 같은 형식으로/root/audit/missing.txt 에 저장합니다.
5. 유령 계정 중 cn=admins,ou=Groups,dc=labhub,dc=co,dc=kr 그룹의
member 인 것을 골라 /root/audit/critical.txt 에 저장합니다.
6. /opt/lab/fixtures/auth/audit/lastlogin.csv 를 기준으로,
2026-08-01 기준 90일 이상 미접속인 uid 를/root/audit/stale.txt 에 오름차순으로 저장합니다.
(파일에 없는 uid 는 '접속 이력 없음'으로 보고 대상에 포함합니다.)
7. 유령 계정을 모두 ou=Disabled,dc=labhub,dc=co,dc=kr 아래로 이동시킵니다.
(ou=Disabled 엔트리를 먼저 만들어야 합니다.)
이동 후 ou=People 에서는 조회되지 않아야 하고,ou=Disabled 의 엔트리 수가 유령 계정 수와 같아야 합니다.
8. /root/audit/report.md 를 작성합니다.## 총계, ## 유령 계정, ## 미생성 계정, ## 특권 계정, ## 휴면 후보,## 조치 계획 여섯 개의 h2 제목이 있어야 하고, 아래 다섯 줄이 정확히 들어가야 합니다.
total=<디렉터리 전체 사용자 수(격리 포함)> ghost=<유령 계정 수> missing=<미생성 계정 수> critical=<특권 유령 계정 수> stale=<90일 미접속 계정 수>참고
- 차집합:
comm -23 <(sort a.txt) <(sort b.txt) - 날짜를 초로:
date -d 2026-05-01 +%s - DN 이동:
ldapmodrdn -r -s "ou=Disabled,dc=labhub,dc=co,dc=kr" "<기존DN>" "uid=<uid>" - 흔한 실수 1:
comm에 정렬되지 않은 입력을 주는 것. 결과가 조용히 틀립니다. - 흔한 실수 2: CSV 헤더 줄을 uid 목록에 포함시키는 것.
- 흔한 실수 3: 유령 계정을 삭제하는 것. 감사 추적과 참조 무결성 때문에 격리가 원칙입니다.
단계 8개
- 디렉터리 계정 추출
- 인사 명부 확보
- 유령 계정 추출
- 미생성 계정 추출
- 특권 유령 계정
- 장기 미접속 계정
- 격리 처리
- 감사 리포트 작성