1. 개요
OpenLDAP은 리눅스 서버 환경에서 사용자 계정, 그룹, 접근권한, 감사 로그를 중앙에서 관리할 수 있는 디렉토리 서비스다.
이 문서는 예전에 내가 구축했던 CentOS 7 기준으로 작성되었지만, Ubuntu 등 다른 배포판에서도 동일한 원리로 적용할 수 있다.
단, 패키지명과 설정 경로는 다를 수 있다.
⚠️ 주의: 본문에 등장하는 IP, 계정명, 도메인명, hostname 등은 모두 예시다.
실제 운영 환경에서는 반드시 조직 정책에 맞게 수정해야 한다.
2. OpenLDAP의 역할
OpenLDAP은 단순한 사용자 인증 도구가 아니라, 운영 서버의 계정 보안과 접근 통제의 기반이 된다.
LDAP 서버 하나로 여러 시스템과 애플리케이션의 계정 인증을 통합할 수 있다.
| 기능 | 설명 |
|---|---|
| 중앙 계정 관리 | 사용자·그룹 정보를 통합 관리 (uid, gid, home, shell) |
| OS 레벨 인증 통합 | PAM/NSS를 통해 SSH, sudo, su 인증까지 중앙화 |
| 애플리케이션 통합 | Jenkins, GitLab, Grafana, Zabbix 등 대부분 LDAP 연동 지원 |
| 감사(Audit) 로그 통합 | 로그인, su, sudo, 파일 조작 등 행위를 중앙 로그로 적재 |
| 보안 정책 통제 | 그룹별 접근 제한, 디렉토리 ACL, sudo 정책 일원화 |
3. LDAP 데이터 구조
LDAP은 트리(Tree) 형태의 디렉토리 구조로 데이터를 저장한다.
각 엔트리는 DN(Distinguished Name)으로 구분된다.
dc=example,dc=com
├── ou=People
│ ├── uid=user01
│ ├── uid=user02
└── ou=Group
├── cn=admin
└── cn=devops
| 속성 | 의미 |
|---|---|
| DC (Domain Component) | 도메인 구성 요소 (example.com) |
| OU (Organizational Unit) | 부서, 팀, 프로젝트 단위의 구분 |
| CN (Common Name) | 사람, 그룹, 디바이스 등의 이름 |
| DN (Distinguished Name) | 엔트리의 절대경로 (uid=user01,ou=People,dc=example,dc=com) |
4. 아키텍처 개요
┌──────────────────────────────┐
│ LDAP Client (Linux) │
│ PAM / NSS / SSSD / nslcd │
└──────────────┬───────────────┘
│ 인증 요청
┌──────────────┴───────────────┐
│ OpenLDAP Server │
│ LDIF 기반 계정/그룹 관리 │
│ ACL / sudo / host 정책 적용 │
└──────────────┬───────────────┘
│ 로그 전달
┌──────────────┴───────────────┐
│ Auditd / Syslog Server │
│ 사용자 활동 로그 중앙화 │
└──────────────────────────────┘
이 구조를 통해 사용자 인증 → 접근제어 → 감사 추적까지 하나의 흐름으로 관리할 수 있다.
Keycloak, Okta, Azure AD 같은 SSO 솔루션이 로그인 전단의 인증을 담당한다면,
OpenLDAP은 운영 서버 내부의 계정 제어와 명령 로그를 담당한다.
5. 운영 정책 예시
| 구분 | 접근 정책 |
|---|---|
| 운영팀 | 모든 서버 접근 및 sudo 가능 |
| 개발팀 | 특정 디렉토리 읽기/실행 가능, sudo 제한 |
| 품질/테스트팀 | 읽기 전용 접근 |
| 로컬 계정 (예: deploy) | 직접 SSH 불가, LDAP 계정만 사용 |
| LDAP 사용자 | 본인 비밀번호 변경 가능 (8자 이상) |
이 정책을 LDAP 그룹 OU로 구분하고, ACL과 sudo.schema로 매핑한다.
예를 들어 운영팀은 cn=ops,ou=Group에 속하고, 해당 그룹에는 sudoRole이 부여된다.
6. 감사 로그 설계
OpenLDAP은 자체 로그 외에도 auditd와 연동해 명령 실행, 계정 전환(su), 파일 삭제 등의 이력을 추적한다.
로그는 Syslog(Local4)로 중앙 서버에 집계된다.
예시 로그 (IP, 계정명 등은 전부 임의값):
type=USER_AUTH msg=audit(...): user pid=24821 uid=2001 auid=2001 ses=1439 msg='op=PAM:authentication acct="svcadmin" exe="/bin/su" res=success'
type=SYSCALL msg=audit(...): exe="/bin/rm" key="SEC_AUDIT" cwd="/home/app" name="temp.log" nametype=DELETE
이 로그를 통해 **“누가, 언제, 어떤 계정으로, 어떤 명령을 실행했는가”**를 추적할 수 있다.
7. 보안 운영 유의사항
- IP, 계정명, hostname은 환경에 맞게 반드시 수정할 것.
- LDIF 파일은
/etc/openldap/slapd.d내 원본 파일을 직접 수정하지 않고,
별도의 디렉토리(/etc/openldap/ldif/)에 작성 후ldapmodify로 반영해야 한다. slapd.conf는 OpenLDAP 2.4 이후 deprecated. 모든 설정은 LDIF 방식으로 관리해야 한다.- 서버 간 LDAP 동기화를 구성할 경우,
ldaps://(SSL) 또는 VPN 구간 암호화를 필수로 설정할 것.
8. 다음 글 예고
2편에서는 실제 OpenLDAP 서버 설치 및 초기 설정(ldif 구성, schema 적용, manager 계정 생성) 절차를 다룬다.
CentOS를 기준으로 진행하지만, Ubuntu 계열도 /etc/ldap 경로와 서비스명만 다르다.
ⓒ 2025 엉뚱한 녀석의 블로그 [quirky guy's Blog]. All rights reserved. Unauthorized copying or redistribution of the text and images is prohibited. When sharing, please include the original source link.
🛠 마지막 수정일: 2025.10.25
답글 남기기
댓글을 달기 위해서는 로그인해야합니다.