본문 바로가기

Program

Ubuntu OpenLDAP 접근 제어(ACL) 완벽 정리 - 실무 중심 가이드

반응형

 

LDAP(Lightweight Directory Access Protocol)은 기업 시스템에서 사용자 계정과 인증 정보를 중앙에서 관리하기 위해 널리 사용됩니다. 그중 OpenLDAP은 대표적인 오픈소스 LDAP 서버이며, **접근 제어(ACL, Access Control List)**는 OpenLDAP의 보안을 좌우하는 핵심 기능입니다.

이번 글에서는 Ubuntu 공식 문서인 OpenLDAP Access Control Guide를 기반으로, OpenLDAP의 ACL 개념부터 실전 적용 방법까지 정리해드립니다. LDAP을 막 시작한 관리자부터 실무 운영 중인 개발자까지, 모두에게 유용한 내용이니 끝까지 읽어보시기 바랍니다.


🔐 ACL이란 무엇인가요?

**ACL(Access Control List)**은 OpenLDAP에서 누가 어떤 객체(DN)에 어떤 작업(읽기, 쓰기 등)을 할 수 있는지를 정의하는 보안 정책입니다.

📌 주요 키워드

  • to : ACL의 대상(DN 또는 속성)
  • by : 권한 부여 대상(사용자, 그룹 등)
  • access level : 권한의 수준 (read, write, auth, none 등)

예를 들면:

access to dn.subtree="ou=people,dc=example,dc=com"
    by self write
    by users read
    by anonymous auth

🔎 ACL 구문의 구조

ACL 규칙은 다음 형식으로 구성됩니다:

access to <대상>
    by <주체> <권한>
    [by <주체2> <권한2> ...]

💡 예시 1: 사용자 자신의 정보는 수정 가능, 다른 사용자는 읽기만 가능

access to dn.subtree="ou=people,dc=example,dc=com"
    by self write
    by users read
    by anonymous auth

💡 예시 2: 특정 속성에 대한 권한 제한

access to attrs=userPassword
    by self write
    by anonymous auth
    by * none

💡 예시 3: 관리자 전체 권한, 나머지는 제한

access to *
    by dn.exact="cn=admin,dc=example,dc=com" manage
    by * none

🧩 주요 Access Level

권한 수준 설명

none 접근 불가
compare 값 비교만 가능 (assert)
search 검색 허용
read 읽기 허용
write 쓰기 허용
auth 인증 목적 접근 허용
manage 객체 관리(삭제, 수정 등) 허용

🧰 ACL 적용 위치

Ubuntu에서 OpenLDAP은 동적 구성(Dynamic Configuration, cn=config) 방식을 사용하므로, 직접 slapd.conf를 수정하는 대신 ldapmodify 명령으로 구성해야 합니다.

📌 ACL 조회

ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config olcAccess

📌 ACL 수정 예시

  1. LDIF 파일 생성 (modify_acl.ldif):
dn: olcDatabase={1}mdb,cn=config
changetype: modify
replace: olcAccess
olcAccess: to attrs=userPassword
  by self write
  by anonymous auth
  by * none
olcAccess: to *
  by self write
  by users read
  by anonymous auth
  1. 적용:
sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f modify_acl.ldif

✅ 실무에서 자주 쓰는 ACL 패턴

목적 LDIF 설정

일반 사용자 비밀번호만 변경 허용 attrs=userPassword 에 self write
일반 사용자는 다른 사용자 속성 읽기만 허용 by users read
익명 사용자는 인증만 가능 by anonymous auth
admin만 전체 권한 by dn.exact="cn=admin,dc=example,dc=com" manage

⚠️ 주의사항

  1. 순서 중요: ACL은 위에서부터 평가됩니다. 먼저 매칭된 규칙이 우선 적용되므로, 보다 제한적인 규칙을 위에 배치해야 합니다.
  2. 구성 백업 필수: ACL을 잘못 설정하면 관리자도 접근이 불가능해질 수 있습니다. 변경 전 반드시 slapcat 등으로 백업하세요.
  3. 경로 정확성 체크: dn.subtree, dn.one, dn.exact, attrs 구문은 명확하게 지정해야 오류가 나지 않습니다.

🔄 ACL 테스트 방법

  1. ldapwhoami 명령으로 인증된 사용자 확인
  2. ldapwhoami -x -D "uid=john,ou=people,dc=example,dc=com" -W
  3. 접근 테스트 시도:
  4. ldapsearch -x -D "uid=john,ou=people,dc=example,dc=com" -W -b "dc=example,dc=com"
  5. 로그 확인:
  6. sudo tail -f /var/log/syslog | grep slapd

📦 정리

  • ACL은 OpenLDAP 보안의 핵심입니다.
  • 사용자, 속성, DN 경로에 따라 세밀하게 제어 가능합니다.
  • Ubuntu에서는 slapd.conf 대신 cn=config를 통해 동적으로 설정합니다.
  • 실수로 ACL을 잘못 설정할 경우 접근이 완전히 막힐 수 있으므로, 항상 변경 전 백업을 권장합니다.

 

반응형