Unisquads
로그인
홈
이용약관·개인정보처리방침·콘텐츠정책·© 2026 Unisquads
이용약관·개인정보처리방침·콘텐츠정책
© 2026 Unisquads. All rights reserved.

LDAP (r1)

이 문서의 과거 버전 (r1)을 보고 있습니다. 수정일: 2026.02.14 23:11

LDAP

이름

LDAP (Lightweight Directory Access Protocol)

분류

네트워크 프로토콜, 디렉터리 서비스

개발

미시간 대학교 (1993년)

기반

X.500 디렉터리 서비스

기본 포트

389 (일반), 636 (SSL/TLS)

주요 용도

사용자 인증, 디렉터리 정보 조회, 중앙 집중식 계정 관리

데이터 구조

계층적 디렉터리 정보 트리(DIT)

기술 상세

표준

IETF RFC 4510 시리즈

주요 구현

OpenLDAP, Microsoft Active Directory, 389 Directory Server

작동 모드

바인딩(Binding), 검색(Searching), 비교(Comparing), 추가(Adding), 삭제(Deleting), 수정(Modifying)

보안

SASL, SSL/TLS, StartTLS

데이터 표현

LDAP Data Interchange Format(LDIF)

스키마

객체 클래스(Object Class), 속성(Attribute), 구문(Syntax)으로 정의

주요 속성

dn (고유 이름), cn (일반 이름), uid (사용자 ID), dc (도메인 구성 요소), ou (조직 단위)

익명, 단순(Simple), [[SASL]]

관련 프로토콜

X.500, DSML, SCIM

응용 분야

싱글 사인온(SSO), 이메일 주소록, 네트워크 장비 관리, ERP/CRM 시스템 통합

1. 개요

LDAP(Lightweight Directory Access Protocol)는 TCP/IP 네트워크 상에서 디렉터리 서비스 정보를 관리하고 접근하기 위한 개방형 표준 응용 계층 프로토콜이다. 디렉터리는 사용자, 시스템, 네트워크, 서비스, 애플리케이션 등에 대한 정보를 계층적이고 속성 기반의 형태로 저장하는 특수한 데이터베이스이다. LDAP는 이러한 디렉터리에서 정보를 조회, 검색, 수정하는 통신 규약을 정의한다.

이 프로토콜은 1993년 미시간 대학교에서 개발된 더 복잡한 DAP(Directory Access Protocol) 프로토콜의 경량화된 버전으로 시작되었다. DAP는 OSI 프로토콜 스택을 요구했으나, LDAP는 널리 보급된 TCP/IP를 사용하여 구현과 배포가 훨씬 용이해졌다. 이 '가벼움'이 이름에 반영되어 있으며, 이 덕분에 인터넷 표준으로 빠르게 채택되었다.

LDAP의 주요 역할은 중앙 집중화된 정보 저장소를 제공하여 네트워크 상의 다양한 리소스에 대한 인증과 조회를 단순화하는 것이다. 예를 들어, 조직의 모든 직원 정보(이름, 이메일, 부서, 전화번호)를 LDAP 디렉터리에 저장하면, 이메일 클라이언트, VPN 게이트웨이, 웹 애플리케이션 등 여러 시스템이 이 단일 소스를 통해 사용자를 인증하거나 연락처 정보를 조회할 수 있다.

LDAP는 클라이언트-서버 모델을 기반으로 동작한다. LDAP 클라이언트(예: 인증을 필요로 하는 애플리케이션)는 LDAP 서버에 연결하여 바인드(인증) 연산을 수행한 후, 검색, 비교, 추가, 수정, 삭제 등의 연산을 요청할 수 있다. 서버는 이 요청을 처리하고 적절한 응답을 클라이언트에게 반환한다. 정보는 DN(Distinguished Name)으로 고유하게 식별되는 항목들로 구성되며, 트리 구조로 조직화된다.

2. LDAP의 역사와 발전

LDAP는 X.500이라는 국제 전기 통신 연합(ITU-T)의 복잡한 디렉터리 서비스 표준을 기반으로 하여, 더 가볍고 TCP/IP 네트워크 상에서 쉽게 구현할 수 있도록 단순화된 프로토콜로 시작되었다. 1990년대 초반, 미시간 대학교의 연구팀은 X.500 디렉터리 접근 프로토콜(DAP)의 무거운 스택과 OSI 모델 의존성을 해결하기 위해 경량화된 버전을 개발했다. 이 작업의 결과물이 LDAP 버전 1과 버전 2였으며, 인터넷 엔지니어링 태스크 포스(IETF)를 통해 표준화 과정을 거쳤다.

LDAP 버전 3(LDAPv3)은 1997년에 RFC 2251을 비롯한 일련의 RFC 문서로 표준화되며 결정적인 발전을 이루었다. 이 버전은 UTF-8을 통한 국제화 지원, SASL을 이용한 확장 가능한 인증, 클라이언트가 서버의 능력을 탐색할 수 있는 기능, 그리고 중요한 확장 메커니즘을 도입했다. 이러한 개선 사항은 LDAP를 단순한 접근 프로토콜을 넘어서 완전한 디렉터리 서비스의 핵심 표준으로 자리매김하게 했다.

2000년대에 들어서면서 LDAP는 기업 환경의 사실상 표준 디렉터리 서비스 프로토콜이 되었다. Microsoft의 Active Directory와 같은 상용 제품뿐만 아니라 OpenLDAP와 같은 오픈소스 구현체가 광범위하게 채택되면서, 사용자 인증, 조직도 관리, 애플리케이션 설정 저장소 등 다양한 분야에서 핵심 인프라 역할을 수행하게 되었다. 이후로도 IETF는 LDAPv3 표준을 보완하는 여러 확장 표준을 발표해왔으며, 여전히 현대적인 ID 관리 및 싱글 사인온 시스템의 기반 기술로 활발히 사용되고 있다.

3. LDAP의 기본 구조와 모델

LDAP의 핵심은 디렉터리 서비스 정보를 조직화하고 접근하기 위한 구조화된 모델에 있다. 이 모델은 X.500 표준을 단순화한 것으로, 계층적 트리 구조를 기반으로 한다.

가장 기본적인 구성 요소는 속성이다. 속성은 'uid', 'cn', 'mail'과 같은 이름을 가지며 하나 이상의 값을 가질 수 있는 데이터의 최소 단위이다. 이러한 속성들은 논리적으로 그룹화되어 객체 클래스를 형성한다. 객체 클래스는 'inetOrgPerson'이나 'organizationalUnit'과 같이 특정 종류의 항목(예: 사람, 조직 단위)을 정의하는 템플릿 역할을 하며, 해당 항목이 가져야 할 필수 속성과 선택적 속성을 규정한다. 이러한 객체 클래스와 속성 타입의 정의를 모아놓은 규칙 집합이 스키마이다.

모든 항목은 디렉터리 내에서 고유하게 식별되어야 한다. 이를 위해 사용되는 것이 고유 이름이다. DN은 항목의 전체 경로를 나타내며, 계층 구조에서 루트까지의 모든 상위 항목을 포함한다. 예를 들어, 'uid=john,ou=People,dc=example,dc=com'과 같은 DN은 'dc=com' 도메인 아래 'dc=example', 그 아래 'ou=People' 조직 단위에 속한 'uid=john' 사용자를 가리킨다. 이러한 DN들의 집합이 전체 디렉터리 정보 트리를 구성한다. DIT는 일반적으로 지리적, 조직적 기준(국가, 조직, 부서)이나 도메인 이름 체계(dc=example,dc=com)에 따라 설계된다.

구성 요소

설명

예시

속성

데이터의 기본 단위. 이름과 하나 이상의 값으로 구성된다.

cn: John Doe, mail: john@example.com

객체 클래스

항목의 종류를 정의하고 포함할 속성들을 규정하는 템플릿이다.

inetOrgPerson, organizationalUnit

DN (고유 이름)

디렉터리 내에서 항목을 고유하게 식별하는 전체 경로 이름이다.

uid=john,ou=People,dc=example,dc=com

DIT (디렉터리 정보 트리)

DN들로 이루어진 계층적 트리 구조 전체를 지칭한다.

도메인(dc=com, dc=example)을 루트로 하는 조직도

3.1. 디렉터리 정보 트리(DIT)

디렉터리 정보 트리(DIT, Directory Information Tree)는 LDAP 디렉터리 내 모든 데이터를 계층적으로 구성하는 구조적 모델이다. 이는 데이터를 루트(Root)로부터 시작하여 가지를 뻗어나가는 나무 형태로 표현하며, 각 데이터 항목은 트리 내 특정 위치에 존재하는 엔트리(Entry)에 해당한다. DIT의 계층 구조는 일반적으로 조직의 구조, 지리적 위치, 또는 기능적 구분을 반영하여 설계된다. 예를 들어, dc=example, dc=com과 같은 도메인 컴포넌트(Domain Component)를 루트 근처에 두고, 그 아래에 ou=People(조직 단위)이나 ou=Groups와 같은 가지를 만들어 사용자를 분류한다.

DIT 내 각 엔트리는 고유한 DN(Distinguished Name)으로 식별된다. DN은 해당 엔트리의 위치를 루트까지 거슬러 올라가는 전체 경로를 지정한다. 예를 들어, uid=kim, ou=People, dc=example, dc=com이라는 DN은 dc=com 아래 dc=example 조직의 ou=People 컨테이너에 위치한 uid=kim 사용자 엔트리를 가리킨다. 이 계층 구조는 데이터를 논리적으로 그룹화하고, 관리 권한을 위임하며, 검색 범위를 효율적으로 제한하는 데 핵심적인 역할을 한다.

DIT의 설계는 디렉터리 서비스의 성능과 유지보수성에 직접적인 영향을 미친다. 너무 평평하거나(깊이가 얕은) 너무 깊은 트리 구조는 검색 효율을 저하시킬 수 있다. 일반적으로 권장되는 설계 원칙은 다음과 같다.

설계 요소

설명

예시

루트 접미사(Root Suffix)

트리의 최상위 기준점. 주로 도메인 이름을 사용.

dc=example, dc=com

컨테이너(Container)

엔트리를 그룹화하는 중간 노드. 주로 OU(Organizational Unit) 사용.

ou=Users, ou=Devices

리프 노드(Leaf Node)

실제 데이터를 담은 최종 엔트리.

사용자(uid=lee), 그룹(cn=Admins)

이러한 구조를 통해 관리자는 특정 하위 트리(예: ou=Sales, dc=example, dc=com)에 대한 검색이나 관리 작업을 집중적으로 수행할 수 있다. 또한, 스키마와 접근 제어 목록(ACL)을 DIT의 특정 부분에 적용하여 데이터 무결성과 보안을 강화할 수 있다.

3.2. 스키마와 객체 클래스

LDAP 스키마는 디렉터리에 저장될 수 있는 데이터의 유형, 구조, 제약 조건을 정의하는 규칙의 집합이다. 스키마는 객체 클래스와 속성으로 구성되며, 디렉터리의 데이터 무결성과 일관성을 보장하는 핵심 역할을 한다.

객체 클래스는 디렉터리 내 하나의 항목(엔트리)이 어떤 종류의 객체를 나타내는지 정의한다. 각 객체 클래스는 해당 유형의 엔트리가 반드시 가져야 하는 필수 속성과 선택적으로 가질 수 있는 부가 속성의 집합을 지정한다. 객체 클래스는 일반적으로 계층 구조를 이루며, 상위 클래스로부터 속성을 상속받는다. 주요 객체 클래스 유형은 다음과 같다.

클래스 유형

설명

예시

구조적(Structural)

실제 디렉터리 정보 트리(DIT)에서 독립적인 엔트리를 생성할 수 있는 기본 클래스이다.

inetOrgPerson, organizationalUnit

보조적(Auxiliary)

구조적 클래스에 추가적인 속성 집합을 부여하기 위해 다른 클래스에 "혼합"될 수 있다.

posixAccount, mailPrefs

추상적(Abstract)

다른 클래스가 상속받기 위한 템플릿 역할을 하며, 직접 인스턴스를 생성할 수 없다.

top (모든 클래스의 최상위 조상)

속성은 데이터를 저장하는 실제 단위이다. 각 속성은 고유한 OID(객체 식별자)와 하나 이상의 구문(Syntax)을 가지며, 해당 구문은 속성 값이 가져야 할 데이터 형식(예: 정수, 문자열, 날짜)을 정의한다. 또한 속성은 단일 값 또는 다중 값을 가질 수 있는지 여부도 스키마에 명시된다. 예를 들어, cn(일반 이름) 속성은 문자열 구문을 가지며, member 속성은 다중 값을 가질 수 있는 DN 구문을 가진다. LDAP 구현체는 일반적으로 core.schema, inetorgperson.schema와 같은 표준 스키마 파일을 제공하며, 조직의 특정 요구사항에 맞게 사용자 정의 스키마를 추가하여 확장할 수 있다.

3.3. 속성과 DN

LDAP 디렉터리 내의 각 항목은 고유하게 식별되어야 하며, 그 항목이 가지는 데이터를 정의해야 합니다. 이를 위해 DN(Distinguished Name, 고유 이름)과 속성(Attribute)이라는 두 가지 핵심 개념이 사용됩니다.

DN은 디렉터리 정보 트리(DIT) 내에서 특정 항목을 고유하게 가리키는 문자열입니다. 계층 구조를 반영하며, 일반적으로 루트로부터 해당 항목까지의 경로를 역순으로 나열하여 구성합니다. 예를 들어, uid=kim,ou=People,dc=example,dc=com이라는 DN은 dc=com 도메인 아래 dc=example 조직, 그 아래 ou=People 조직 단위에 속한 uid=kim 사용자를 가리킵니다. DN은 RDN(Relative Distinguished Name, 상대 고유 이름)이라는 구성 요소들로 이루어지며, 각 RDN은 해당 항목을 부모 항목 내에서 구별짓는 하나 이상의 속성-값 쌍입니다. 위 예시에서 uid=kim이 RDN에 해당합니다.

반면, 속성은 항목이 실제로 저장하는 데이터 단위입니다. 각 속성은 타입(Type)과 하나 이상의 값(Value)을 가집니다. 속성 타입은 저장할 데이터의 종류를 정의하며, 스키마에 의해 사전에 정의됩니다. 일반적인 속성의 예는 다음과 같습니다.

속성 타입

설명

일반적인 예시 값

cn

Common Name, 일반 이름

김철수

sn

Surname, 성

김

uid

User ID, 사용자 아이디

kim

mail

이메일 주소

kim@example.com

userPassword

사용자 암호 (해시 형태로 저장)

{SSHA}...

하나의 항목은 여러 속성을 가질 수 있으며, 각 속성은 다중 값을 가질 수도 있습니다. 예를 들어, 한 사람 항목의 telephoneNumber 속성에 회사 전화번호와 집 전화번호를 모두 저장할 수 있습니다. DN과 속성은 밀접하게 연결되어 있습니다. 항목의 RDN을 구성하는 것은 그 항목의 속성 중 하나(또는 조합)이며, 이는 전체 DN에서 가장 왼쪽에 위치하는 부분입니다. 따라서 DN은 디렉터리 내 위치를, 속성은 그 위치에 있는 객체의 세부 정보를 담는 구조라고 볼 수 있습니다.

4. LDAP 프로토콜과 동작 방식

LDAP는 클라이언트-서버 모델을 기반으로 하는 프로토콜이며, 클라이언트가 디렉터리 서버에 특정 연산을 요청하고 서버가 응답하는 방식으로 동작한다. 주요 연산에는 바인드(Bind), 검색(Search), 수정(Modify), 추가(Add), 삭제(Delete), 비교(Compare) 및 확장 연산(Extended Operation) 등이 포함된다. 이러한 연산들은 클라이언트가 디렉터리 정보를 조회하거나 관리하기 위한 기본적인 수단을 제공한다.

바인드(Bind)와 인증

LDAP 세션은 일반적으로 바인드 연산으로 시작된다. 이 연산은 클라이언트가 서버에 자신을 인증하는 과정이다. 가장 간단한 형태는 사용자 DN과 비밀번호를 사용하는 단순 인증이다. 또한, SASL 메커니즘을 통한 보다 강력한 인증도 지원된다. 익명 바인드는 인증 자격 증명 없이 연결하는 방식으로, 서버의 접근 제어 설정에 따라 제한된 정보만 조회할 수 있다. 인증 성공 후, 클라이언트는 허용된 권한 내에서 다른 연산들을 수행할 수 있다.

검색(Search)과 필터

가장 빈번하게 사용되는 연산은 검색이다. 클라이언트는 검색 요청 시 검색 기준점(베이스 DN), 검색 범위(기준점, 한 단계 하위, 전체 하위 트리), 검색 필터, 반환할 속성 등을 지정한다. 검색 필터는 논리 연산자(&(AND), |(OR), !(NOT))와 비교 연산자(=, ~=, >=, <=, =*)를 조합하여 구성한다. 예를 들어, (&(objectClass=person)(sn=Kim*))는 성이 'Kim'으로 시작하는 모든 person 객체를 찾는 필터이다. 서버는 이 필터와 일치하는 모든 엔트리를 찾아 클라이언트에 반환한다.

수정(Modify) 및 기타 연산

데이터를 변경하기 위한 주요 연산은 수정(Modify)이다. 이 연산은 특정 DN을 가진 엔트리에 대해, 추가(add), 삭제(delete), 교체(replace) 작업을 속성 단위로 수행한다. 추가(Add)와 삭제(Delete) 연산은 각각 새로운 엔트리를 생성하거나 기존 엔트리를 전체 삭제한다. 비교(Compare) 연산은 특정 엔트리가 주어진 속성 값을 가지고 있는지 확인하는 데 사용된다. 이러한 연산들은 모두 성공 또는 실패 결과를 포함하는 응답 메시지로 종료된다.

연산 이름

주요 목적

비고

Bind

연결 세션 인증

익명, 단순, SASL 방식 지원

Search

디렉터리 내 정보 조회

필터를 사용한 정교한 검색 가능

Modify

기존 엔트리의 속성 변경

속성값 추가, 삭제, 교체

Add

새로운 엔트리 생성

고유한 DN과 필수 속성이 필요

Delete

엔트리 전체 삭제

하위 엔트리가 있으면 실패

Compare

속성값 존재 여부 확인

권한 검사 등에 활용

4.1. 바인드(Bind)와 인증

LDAP 세션은 바인드(Bind) 연산으로 시작된다. 바인드 연산은 클라이언트가 서버에 자신의 신원을 증명하는 인증 과정이다. 이 과정에서 클라이언트는 서버에 연결할 때 사용할 DN(Distinguished Name)과 비밀번호를 제공한다. 성공적인 바인드는 클라이언트에게 특정 권한을 부여하며, 이후의 모든 연산은 이 권한 수준 내에서 수행된다.

바인드는 주로 세 가지 방식을 사용한다. 가장 기본적인 방식은 익명 바인드로, DN과 비밀번호 없이 연결한다. 이는 공개 정보 조회에 사용된다. 두 번째는 단순 인증 바인드로, DN과 평문 비밀번호를 전송하여 인증한다. 세 번째는 SASL(Simple Authentication and Security Layer)을 이용한 바인드로, Kerberos나 외부 인증 시스템과 같은 더 강력하고 유연한 인증 메커니즘을 사용할 수 있다.

단순 인증 바인드는 보안상 취약점이 있다. 비밀번호가 네트워크를 통해 평문으로 전송될 수 있기 때문이다. 따라서 실제 운영 환경에서는 LDAPS 또는 StartTLS를 통해 통신 채널을 암호화하거나, SASL 메커니즘을 활용하여 인증 정보를 보호한다. 바인드 실패 시 서버는 적절한 오류 코드를 반환하며, 세션은 종료되거나 제한된 권한으로 유지될 수 있다.

성공적인 바인드 후의 클라이언트 권한은 서버의 접근 제어 목록(ACL)에 의해 결정된다. ACL은 특정 DN이나 그룹에 대해 디렉터리 내 객체와 속성에 대한 읽기, 검색, 수정, 삭제 권한을 세밀하게 정의한다. 따라서 바인드는 단순한 로그인이 아니라, 이후 모든 작업의 권한 부여를 위한 핵심 절차이다.

4.2. 검색(Search)과 필터

검색 연산은 LDAP 클라이언트가 디렉터리에서 정보를 조회하는 가장 핵심적인 방법이다. 클라이언트는 검색 요청에 검색 기준점(DN), 검색 범위, 필터, 반환할 속성 목록을 지정하여 서버에 전송한다. 서버는 해당 기준점 아래의 지정된 범위 내에서 필터 조건과 일치하는 모든 항목을 찾아 클라이언트에게 결과를 반환한다.

검색 범위는 주로 세 가지 수준으로 구분된다.

* base (기본 항목): 검색 기준점으로 지정된 DN 항목 자체만을 검사한다.

* one (1단계): 기준점 DN의 바로 아래 자식 항목들만 검색하며, 기준점 항목 자체나 손자 항목은 포함하지 않는다.

* sub (하위 트리): 기준점 DN 항목을 포함하여 그 아래의 모든 하위 항목을 재귀적으로 검색한다. 가장 일반적으로 사용되는 범위이다.

검색의 정확도와 효율성을 결정하는 핵심 요소는 검색 필터이다. 필터는 괄호로 묶여 표현되며, 속성 이름, 연산자, 비교 값을 사용하여 조건을 정의한다. 기본적인 필터 연산자는 다음과 같다.

연산자

설명

예시

=

같음

(uid=kim)

~=

대략적 같음 (근사치)

(sn~=Smith)

>=

크거나 같음

(uidNumber>=1000)

<=

작거나 같음

(uidNumber<=5000)

&

논리적 AND (모두 만족)

(&(objectClass=person)(l=Seoul))

`\

`

논리적 OR (하나라도 만족)

!

논리적 NOT (부정)

(!(objectClass=groupOfNames))

=*

존재함 (값이 존재하는지 확인)

(telephoneNumber=*)

복잡한 필터는 이러한 연산자를 중첩하여 구성할 수 있다. 예를 들어, 서울에 거주하는 모든 사용자 중에서 '영업' 부서가 아닌 사람을 찾으려면 (&(objectClass=person)(l=Seoul)(!(department=Sales)))와 같은 필터를 사용할 수 있다. 검색 성능에 큰 영향을 미치므로, 적절한 스키마 인덱싱과 함께 사용해야 한다.

4.3. 수정(Modify) 및 기타 연산

LDAP의 수정(Modify) 연산은 디렉터리 내 기존 항목(엔트리)의 속성 값을 변경하는 데 사용된다. 이 연산은 단일 DN을 대상으로 하며, 해당 엔트리에 대해 수행할 일련의 변경 작업 목록을 포함한다. 각 변경 작업은 '추가'(add), '삭제'(delete), '대체'(replace) 중 하나의 유형을 가지며, 특정 속성과 그 값을 지정한다. 예를 들어, 사용자의 전화번호 속성을 갱신하거나, 그룹 멤버십 목록에 새 값을 추가하는 데 활용된다.

수정 외에도 LDAP은 몇 가지 다른 핵심 연산을 제공한다. 추가(Add) 연산은 새로운 엔트리를 디렉터리 정보 트리(DIT) 내 지정된 위치에 생성한다. 삭제(Delete) 연산은 지정된 DN의 엔트리를 전체적으로 제거한다. 이름 변경(Modify DN/Rename) 연산은 엔트리의 DN을 변경하거나, 다른 상위 엔트리 아래로 이동시키는 기능을 한다. 비교(Compare) 연산은 주어진 속성 값이 엔트리에 존재하는지 확인하기 위해 사용된다.

연산 명칭

설명

주요 용도

Modify

기존 엔트리의 속성 값을 추가, 삭제, 대체한다.

사용자 정보 갱신, 그룹 멤버 관리

Add

새 엔트리를 DIT 내 특정 위치에 생성한다.

새 사용자 또는 장비 등록

Delete

지정된 DN의 엔트리를 디렉터리에서 완전히 제거한다.

사용자 또는 리소스 삭제

Modify DN

엔트리의 DN을 변경하거나 다른 상위 엔트리로 이동시킨다.

사용자명 변경, 조직 구조 조정

Compare

엔트리가 특정 속성 값을 가지고 있는지 검증한다.

인증 또는 권한 확인

이러한 모든 연산은 일반적으로 클라이언트가 서버에 성공적으로 바인드(Bind)하여 인증을 마친 후에 수행된다. 각 연산은 성공 또는 실패를 나타내는 결과 코드와 함께 응답을 반환한다.

5. LDAP의 주요 용도와 적용 사례

LDAP는 디렉터리 서비스를 제공하는 프로토콜로, 주로 읽기 중심의 정보를 효율적으로 조회하고 관리하는 데 사용된다. 그 핵심 용도는 계정 정보와 같은 정적인 데이터를 중앙에서 저장하고 다양한 시스템이 이를 참조할 수 있게 하는 것이다. 이로 인해 기업 인프라에서 사용자 관리와 시스템 접근 통제의 핵심 구성 요소로 자리 잡았다.

가장 대표적인 적용 사례는 중앙 집중식 인증 시스템이다. 수많은 서버, 워크스테이션, 네트워크 장비, 웹 애플리케이션이 각각 독립된 사용자 계정을 유지하는 것은 관리 부담이 크다. LDAP 디렉터리에 사용자 아이디와 암호 정보를 저장하면, 이러한 모든 시스템이 동일한 LDAP 서버에 접속하여 사용자를 인증할 수 있다. 이는 단일 사인온(SSO) 환경의 기초를 제공하며, 계정 생성, 비밀번호 변경, 권한 수정과 같은 작업을 한 곳에서 처리할 수 있게 한다.

또한 LDAP는 조직도 및 연락처 디렉터리로 널리 활용된다. 사용자의 부서, 직책, 전화번호, 이메일 주소와 같은 속성을 저장하여 회사 내 전화번호부나 이메일 클라이언트의 주소록 서비스에 사용된다. 예를 들어, 마이크로소프트 아웃룩이나 모질라 썬더버드의 글로벌 주소록은 종종 LDAP를 백엔드로 사용한다. 이는 정보의 일관성을 유지하고 실시간으로 업데이트된 정보를 제공하는 데 유리하다.

마지막으로, 다양한 애플리케이션 설정 관리에도 적용된다. 이메일 서버, 프록시 서버, VPN 솔루션 등은 사용자 설정, 그룹 정책, 접근 규칙을 LDAP 디렉터리에 저장하여 중앙에서 관리할 수 있다. 이는 설정의 일관성과 확장성을 높여준다. 아래 표는 LDAP의 주요 용도를 정리한 것이다.

주요 용도

설명

적용 예시

중앙 집중식 인증

사용자 아이디/암호를 저장하여 여러 시스템이 동일한 자격 증명으로 인증할 수 있게 함.

리눅스 PAM, 윈도우 네트워크 로그온, 웹 애플리케이션 로그인

조직도/연락처 디렉터리

사용자 속성(이름, 부서, 연락처)을 저장하여 전사적 주소록 서비스 제공.

이메일 클라이언트 주소록, 내부 전화번호부, 조직 관리 시스템

애플리케이션 설정 관리

애플리케이션별 구성, 정책, 사용자 매핑 정보를 중앙 저장.

메일 서버 도메인 설정, VPN 접근 권한 그룹, 프록시 사용자 정책

5.1. 중앙 집중식 인증 시스템

LDAP는 사용자 계정, 비밀번호, 그룹 멤버십과 같은 인증 정보를 단일 저장소에 통합하여 관리하는 데 널리 사용된다. 이를 통해 기업이나 조직은 여러 애플리케이션과 시스템이 하나의 디렉터리를 참조하여 사용자를 확인할 수 있게 된다. 이 접근 방식은 계정 정보의 중복을 제거하고, 사용자 추가/삭제/변경과 같은 관리 작업을 단순화하며, 보안 정책을 일관되게 적용할 수 있게 한다.

중앙 집중식 인증의 일반적인 아키텍처는 LDAP 서버가 디렉터리 정보를 저장하고, 클라이언트 애플리케이션(예: 웹 애플리케이션, 메일 서버, 네트워크 운영 체제)이 LDAP 바인드 연산을 통해 사용자 자격 증명을 검증하는 형태를 띤다. 사용자가 애플리케이션에 로그인을 시도하면, 애플리케이션은 제공된 사용자 이름과 비밀번호를 사용하여 LDAP 서버에 연결을 시도한다. 서버는 디렉터리 내 해당 사용자의 항목을 찾아 비밀번호 속성 값을 비교하고, 결과를 성공 또는 실패로 클라이언트에 반환한다.

이 시스템은 단순한 인증을 넘어 권한 부여에도 활용된다. 사용자가 속한 그룹이나 사용자 항목 자체에 정의된 특정 속성을 기반으로 애플리케이션의 접근 수준을 결정할 수 있다. 예를 들어, '관리자' 그룹에 속한 사용자에게는 더 높은 시스템 권한을 부여하는 방식이다. 주요 적용 사례는 다음과 같다.

적용 분야

설명

주요 활용 예

네트워크 인증

사용자가 컴퓨터나 내부 네트워크에 로그인하는 과정

Microsoft Active Directory 도메인 로그인, 리눅스 PAM 모듈 통합

애플리케이션 로그인

웹 또는 데스크톱 애플리케이션의 사용자 인증

지라, 컨플루언스, 제노스 등의 엔터프라이즈 소프트웨어

이메일 및 협업 도구

메일 서버나 그룹웨어의 계정 관리

사이버로드 메일서버, 오픈LDAP를 백엔드로 사용하는 다양한 시스템

VPN 및 네트워크 장비 접근

원격 접속 또는 네트워크 장비 관리자 인증

시스코 장비의 AAA[1] 서버 통합

이러한 중앙 집중식 방식은 관리 효율성과 보안성을 크게 향상시키지만, LDAP 서버 자체가 단일 장애점이 될 수 있다는 위험도 내포한다. 따라서 고가용성 구성을 위해 다중 서버 복제나 이중화 설정이 필수적이다.

5.2. 조직도 및 연락처 디렉터리

LDAP 디렉터리는 조직 내 인원의 계층적 구조를 효과적으로 표현하는 데 적합하다. 일반적으로 디렉터리 정보 트리의 최상위에는 조직(예: o=회사명)이나 도메인 구성 요소(예: dc=example, dc=com)가 위치하며, 그 아래에 조직 단위(OU)를 통해 부서(예: ou=영업부, ou=개발팀)를 구성한다. 각 부서 하위에는 실제 사용자 항목이 고유 이름으로 저장된다. 이 구조는 조직의 실제 보고 체계를 그대로 반영할 수 있어, 애플리케이션이 특정 부서나 역할의 사용자 그룹을 쉽게 조회할 수 있게 한다.

연락처 정보 관리 또한 LDAP의 주요 활용 분야이다. 사용자 항목은 cn(일반 이름), sn(성), mail(이메일 주소), telephoneNumber(전화번호), title(직함), physicalDeliveryOfficeName(사무실 위치) 등 표준화된 속성을 통해 상세한 인적 정보를 저장한다. 이 정보는 중앙에서 관리되고 실시간으로 동기화되므로, 전사적인 주소록이나 전화번호부 시스템의 백엔드로 널리 사용된다. 예를 들어, 이메일 클라이언트나 VoIP 전화 시스템은 LDAP를 쿼리하여 수신자의 이름을 입력하는 것만으로 정확한 이메일 주소나 내선 번호를 자동으로 완성할 수 있다.

조직도와 연락처 디렉터리 기능은 종종 결합되어 제공된다. 사용자는 LDAP 클라이언트를 통해 특정 부서의 모든 구성원 목록을 조회하거나, 특정 직함을 가진 사람을 검색하는 등 다양한 방식으로 정보에 접근할 수 있다. 이는 인사 관리 시스템, 그룹웨어, 협업 도구와의 연동을 통해 업무 효율성을 높이는 기반이 된다. 정보의 일관성과 중앙 집중식 관리의 이점 덕분에, 대규모 기업이나 교육 기관에서 직원 및 학생 디렉터리를 구축하는 사실상의 표준 방법론으로 자리 잡았다.

5.3. 애플리케이션 설정 관리

애플리케이션 설정 관리는 LDAP의 중요한 활용 분야 중 하나이다. 많은 기업용 소프트웨어와 서비스는 구성 정보를 LDAP 디렉터리에 저장하여 중앙 집중화된 관리와 일관된 정책 적용을 가능하게 한다. 이를 통해 시스템 관리자는 각 애플리케이션의 설정 파일을 개별적으로 수정하는 대신, 하나의 디렉터리에서 모든 구성을 관리할 수 있다.

일반적으로 저장되는 설정 정보에는 애플리케이션 서버의 연결 매개변수, 사용자 세션 정책, 기능 플래그, 서비스 발견을 위한 엔드포인트 정보 등이 포함된다. 예를 들어, 이메일 서버는 사용자 쿼터 제한이나 전송 규칙을, 프록시 서버는 접근 허용 목록을 LDAP에서 조회할 수 있다. 이러한 방식은 특히 동일한 설정을 공유해야 하는 서버 클러스터 환경에서 효율적이다.

애플리케이션 유형

관리 가능한 설정 예시

웹 애플리케이션

사용자 역할(Role), UI 테마, 시스템 환경 변수

메시징 시스템

대화방 정책, 파일 업로드 제한, 이력 보관 기간

데이터베이스

연결 풀 설정, 읽기 전용 복제본 정보, 백업 스케줄

이 접근 방식의 주요 장점은 설정 변경의 신속한 전파와 버전 관리의 용이성이다. 관리자는 LDAP 디렉터리 내의 특정 속성 값만 수정하면, 해당 설정을 참조하는 모든 애플리케이션이 즉시 새로운 구성을 적용한다. 또한 설정의 변경 이력을 디렉터리 서버 로그를 통해 통합적으로 추적할 수 있어 감사(audit)와 문제 해결에 유리하다.

6. 주요 LDAP 서버 구현체

LDAP 프로토콜을 구현한 서버 소프트웨어는 여러 가지가 존재한다. 각 구현체는 표준 LDAP 프로토콜을 준수하면서도 관리 도구, 성능, 통합 기능, 라이선스 정책 등에서 차별화된 특징을 보인다. 가장 널리 사용되는 구현체로는 오픈소스 진영의 OpenLDAP와 상용 진영의 Microsoft Active Directory를 꼽을 수 있다.

구현체

주요 특징

라이선스/배포 형태

OpenLDAP

경량화되고 표준 준수도가 높은 오픈소스 구현체. 높은 유연성과 확장성을 제공한다.

오픈소스 (OpenLDAP Public License)

Microsoft Active Directory

윈도우 도메인 환경과 깊게 통합된 디렉터리 서비스. DNS, Kerberos 등을 포함한 종합 플랫폼이다.

상용 (Microsoft Windows Server에 포함)

389 Directory Server

레드햇이 후원하는 강력한 오픈소스 디렉터리 서버. 웹 기반의 포괄적인 관리 콘솔을 제공한다.

오�소스 (GPL v3)

Apache Directory Server

자바로 작성된 오픈소스 구현체. 테스트 및 임베디드 용도로 적합하다.

오픈소스 (Apache License 2.0)

OpenLDAP는 가장 대표적인 오픈소스 LDAP 서버 구현체이다. 표준에 대한 엄격한 준수와 높은 이식성을 중시하며, 슬랩d(slapd) 데몬이 핵심 구성 요소이다. 설정 파일 기반의 구성 방식을 사용하여 세밀한 제어가 가능하지만, 이로 인해 초기 학습 곡선이 다소 높은 편이다. 다양한 운영체제에서 동작하며, 많은 리눅스 배포판의 기본 LDAP 서버로 채택되고 있다.

Microsoft Active Directory는 LDAP를 핵심 프로토콜로 사용하는 디렉터리 서비스이지만, 단순한 LDAP 서버를 넘어선 통합 인증 및 관리 플랫폼이다. 윈도우 기반 클라이언트와의 원활한 통합, 그룹 정책(Group Policy)을 통한 중앙 관리, 그리고 DNS 및 Kerberos 인증과의 긴밀한 결합이 주요 강점이다. 주로 순수 윈도우 환경이나 하이브리드 환경의 중앙 인증 서버로 널리 사용된다.

389 Directory Server는 기업용 기능에 초점을 맞춘 또 다른 주요 오픈소스 구현체이다. 레드햇 엔터프라이즈 리눅스의 일부로도 제공되며, 웹 기반의 직관적인 관리 콘솔(389 콘솔)을 통해 복제 설정, 보안 정책, 스키마 관리 등을 GUI로 편리하게 수행할 수 있다. 고가용성과 다중 마스터 복제를 강력하게 지원하는 것이 특징이다.

6.1. OpenLDAP

OpenLDAP는 LDAP 프로토콜의 오픈 소스 구현체이다. 이 프로젝트는 1998년 미시간 대학교의 LDAP 구현체 코드를 기반으로 시작되었으며, 현재는 독립적인 오픈 소스 프로젝트로 유지되고 발전하고 있다. OpenLDAP는 GNU 일반 공중 사용 허가서 하에 배포되며, 리눅스, BSD, 유닉스 및 윈도우를 포함한 다양한 플랫폼에서 실행된다.

OpenLDAP의 핵심 구성 요소는 slapd(Standalone LDAP Daemon) 서버이다. 이 서버는 높은 확장성과 유연성을 제공하며, 다양한 백엔드 데이터베이스([2])를 지원한다. 또한, 모듈식 설계를 통해 복제, 프록시, 동적 오버레이와 같은 고급 기능을 플러그인 형태로 추가할 수 있다. 관리 도구로는 ldapsearch, ldapmodify, ldapadd 등의 명령줄 유틸리티가 포함되어 있다.

특징

설명

표준 준수

RFC 표준을 엄격히 준수하는 LDAPv3 프로토콜을 구현한다.

고가용성

멀티마스터 복제(Multi-master Replication)를 통한 장애 조치와 부하 분산을 지원한다.

보안

TLS/SSL(LDAPS), StartTLS, SASL 인증 메커니즘을 포괄적으로 지원한다.

확장성

동적 오버레이와 모듈을 통해 기능을 쉽게 확장할 수 있다.

OpenLDAP는 기업 환경에서 중앙 집중식 사용자 인증, 주소록 서비스, 시스템 설정 저장소 등으로 널리 사용된다. 또한, 많은 상용 및 오픈 소스 애플리케이션이 디렉터리 서비스의 백엔드로 OpenLDAP를 지원한다. 프로젝트는 활발한 커뮤니티에 의해 개발되며, 정기적인 업데이트와 보안 패치가 제공된다.

6.2. Microsoft Active Directory

Microsoft Active Directory(AD)는 마이크로소프트가 개발한 상용 디렉터리 서비스 구현체이다. 윈도우 서버 운영 체제 환경에서 중앙 집중식 인증, 권한 부여, 자원 관리 및 정책 관리를 제공하는 핵심 서비스로 널리 사용된다. 단순한 LDAP 서버를 넘어 도메인 기반의 통합 ID 관리 및 네트워크 관리 플랫폼 역할을 한다.

AD의 구조는 도메인, 트리, 포리스트, 조직 단위(OU)와 같은 논리적 구성 요소와 사이트라는 물리적 구성 요소로 이루어진다. 기본 정보 저장소는 NTDS.DIT 파일이며, 여기에 모든 도메인 객체(사용자, 컴퓨터, 그룹, 정책 등)가 저장된다. AD는 LDAP 프로토콜(LDAPS 및 StartTLS 포함), DNS, Kerberos 인증 프로토콜, SMB/CIFS 프로토콜을 통합하여 작동한다. 특히 Kerberos는 AD 환경 내 기본 인증 메커니즘으로 사용된다.

다른 LDAP 구현체와 비교했을 때 AD의 주요 특징은 그룹 정책(GPO)을 통한 중앙 집중식 설정 관리와 강력한 단방향 트러스트 및 양방향 트러스트 관계를 통한 다중 도메인 관리 기능이다. 또한 Active Directory Domain Services(AD DS), Active Directory Certificate Services(AD CS), Active Directory Federation Services(AD FS) 등 다양한 역할 서비스를 추가할 수 있는 확장성 있는 플랫폼을 제공한다.

특징

설명

주요 프로토콜

LDAP/LDAPS, Kerberos, DNS, SMB

데이터 저장소

NTDS.DIT 파일

핵심 관리 개념

도메인, 포리스트, 조직 단위(OU), 그룹 정책(GPO)

주요 인증 방식

Kerberos 티켓, NTLM (레거시)

상호 운용성

표준 LDAP 클라이언트를 통한 기본 조회 가능, Samba를 통한 유닉스 계열 통합 지원

6.3. 389 Directory Server

389 Directory Server는 레드햇이 주도적으로 개발하고 지원하는 오픈 소스 LDAP 서버 구현체이다. 원래는 'Netscape Directory Server'로 시작하여, 이후 'Fedora Directory Server'와 'Red Hat Directory Server'를 거쳐 현재의 이름으로 불린다. 프로젝트 이름의 '389'는 LDAP 서비스의 기본 포트 번호인 389에서 유래하였다[3].

이 서버는 기업 환경에서 요구되는 높은 성능, 확장성, 안정성을 제공하는 것을 목표로 한다. 주요 기능으로는 다중 마스터 복제(Multi-Master Replication)를 통한 고가용성 구성, 세분화된 접근 제어, 포괄적인 스키마 관리 도구, 그리고 웹 기반의 관리 콘솔이 포함된다. 또한 SELinux와 통합된 보안 정책을 지원한다.

389 Directory Server는 리눅스 배포판, 특히 페도라와 RHEL(Red Hat Enterprise Linux)과 긴밀하게 통합되어 있다. 공식 패키지 저장소를 통해 쉽게 설치 및 업데이트가 가능하며, 레드햇으로부터 상업적 지원을 받을 수 있다. 이는 기업 사용자들에게 중요한 선택 요인이 된다.

특징

설명

개발 주체

레드햇 주도

라이선스

GNU GPL v2

관리 인터페이스

웹 기반 콘솔(Cockpit 플러그인), 명령줄 도구

주요 강점

다중 마스터 복제, RHEL 통합, 엔터프라이즈급 지원

기반 기술

원래 넷스케이프 디렉터리 서버 코드베이스

이 구현체는 OpenLDAP에 비해 더 통합된 관리 도구와 상용 지원 옵션을 제공하는 점이 특징이며, Microsoft Active Directory의 오피 소스 대안으로서도 고려된다.

7. 보안 고려사항

LDAP는 네트워크를 통해 디렉터리 정보에 접근하는 데 널리 사용되므로, 통신 및 데이터 저장 시 보안을 강화하는 것이 필수적이다. 주요 보안 고려사항은 크게 암호화, 접근 제어, 그리고 일반적인 공격으로부터의 방어로 나눌 수 있다.

첫 번째 핵심 요소는 통신 채널의 암호화이다. 기본 LDAP 프로토콜은 평문으로 데이터를 전송하므로, 사용자 자격 증명이나 민감한 속성 정보가 네트워크 상에서 노출될 위험이 있다. 이를 방지하기 위해 LDAPS(LDAP over SSL) 또는 StartTLS를 사용하여 TLS/SSL 암호화 터널을 구축해야 한다. LDAPS는 별도의 포트(기본 636)를 사용하는 반면, StartTLS는 기존 포트(389)에서 암호화 연결로 업그레이드하는 방식이다. 두 방식 모두 중간자 공격을 방지하고 데이터 무결성과 기밀성을 보장한다.

데이터에 대한 세밀한 접근 통제는 또 다른 중요한 보안 계층이다. 대부분의 LDAP 서버 구현체는 접근 제어 목록(ACL)을 제공하여, 특정 DN(고유 이름)이나 객체 클래스, 속성에 대해 누가 어떤 연산(읽기, 쓰기, 검색 등)을 수행할 수 있는지를 정의한다. 예를 들어, 일반 사용자는 자신의 전화번호는 읽을 수 있지만, 다른 사용자의 비밀번호 속성에는 전혀 접근하지 못하도록 ACL을 구성할 수 있다. 적절한 ACL 정책은 최소 권한의 원칙을 적용하여 불필요한 데이터 노출을 방지한다.

LDAP 시스템이 직면하는 일반적인 보안 위협에는 인증 정보 탈취를 위한 스니핑, 바인드 연산을 이용한 무차별 대입 공격 또는 사전 공격, 그리고 검색 필터를 조작하여 서버에 과부하를 일으키는 LDAP 인젝션 등이 있다. 이러한 위협을 완화하기 위해 강력한 비밀번호 정책을 적용하고, 실패한 인증 시도를 모니터링하며, 사용자 입력을 검증하는 것이 중요하다. 또한, 서버 소프트웨어와 관련 라이브러리를 정기적으로 업데이트하여 알려진 취약점에 대응해야 한다.

7.1. 암호화와 TLS/SSL

LDAP 초기 버전은 기본적으로 암호화되지 않은 평문 통신을 사용했다. 이는 네트워크 상에서 전송되는 인증 정보와 민감한 디렉터리 데이터가 스니핑 공격에 노출될 수 있음을 의미했다. 이를 해결하기 위해 SSL 및 후속 기술인 TLS를 통한 채널 암호화가 표준 보안 메커니즘으로 채택되었다.

LDAP 통신을 암호화하는 두 가지 주요 방법은 LDAPS와 StartTLS이다. LDAPS는 LDAP over SSL의 약자로, 별도의 포트(기본 636)를 사용하여 처음부터 암호화된 연결을 수립한다. 반면, StartTLS는 기존의 평문 연결 포트(기본 389)에서 표준 LDAP 연결을 먼저 수립한 후, TLS 협상을 통해 기존 연결을 암호화된 채널로 업그레이드하는 방식을 사용한다. StartTLS는 포트 수를 줄이고 유연성을 제공하는 장점이 있다.

방식

기본 포트

동작 방식

특징

LDAPS

636

별도 암호화 포트에서 SSL/TLS 연결 직접 수립

초기 구현 방식, 간단하지만 별도 포트 관리 필요

StartTLS

389

평문 연결 후 StartTLS 확장 연산으로 암호화 채널 전환

하나의 포트로 평문/암호화 처리 가능, 현대적 접근 방식

서버와 클라이언트 간 암호화를 성공적으로 사용하려면 유효한 X.509 디지털 인증서가 서버 측에 구성되어야 하며, 클라이언트는 일반적으로 해당 인증서를 신뢰해야 한다. 적절한 암호화 정책을 적용하지 않으면 중간자 공격(Man-in-the-Middle Attack)에 취약해질 수 있다. 따라서 현대적인 LDAP 배포에서는 인증 및 데이터 조회를 포함한 모든 트래픽에 대해 TLS 암호화를 필수적으로 적용하는 것이 보안 모범 사례로 간주된다.

7.2. 접근 제어 목록(ACL)

접근 제어 목록(ACL)은 LDAP 디렉터리 내 특정 엔트리(항목)나 속성에 대한 접근 권한을 세밀하게 정의하는 규칙 집합이다. 이는 디렉터리 서버의 핵심 보안 메커니즘으로, "누가", "무엇에", "어떤 작업을" 할 수 있는지를 명시한다. ACL은 일반적으로 디렉터리 서버의 구성 파일(예: OpenLDAP의 slapd.conf 또는 cn=config)에 정의되거나, 일부 구현체에서는 디렉터리 내 특정 관리 엔트리 자체에 저장된다.

ACL 규칙은 일반적으로 몇 가지 핵심 요소로 구성된다. 접근 권한을 부여할 대상을 지정하며, 이는 특정 DN(고유 이름), 그룹 구성원, 인증 상태(예: 익명 사용자, 인증된 사용자), 또는 IP 주소 범위 등이 될 수 있다. 다음으로 권한을 적용할 디렉터리 내 엔트리와 속성의 범위를 정의한다. 마지막으로 허용 또는 거부할 구체적인 접근 유형을 명시한다. 일반적인 접근 유형은 읽기(search, read, compare), 쓰기(add, delete, modify), 그리고 인증 정보(예: 사용자 비밀번호)에 대한 쓰기 권한인 auth 등이 있다.

아래 표는 간단한 ACL 규칙의 예와 그 의미를 보여준다.

접근 대상

적용 범위

권한

설명

anonymous

ou=people,dc=example,dc=com

auth

익명 사용자는 해당 하위 트리에서 인증(바인드)만 가능하다.

users (그룹)

ou=people,dc=example,dc=com

read

'users' 그룹 구성원은 해당 하위 트리의 엔트리 정보를 읽을 수 있다.

uid=admin,ou=people,dc=example,dc=com

dc=example,dc=com

write

지정된 관리자 DN은 전체 디렉터리 트리에 쓰기 권한을 가진다.

ACL의 평가는 규칙이 정의된 순서대로 이루어지는 경우가 많으며, 첫 번째로 일치하는 규칙이 적용된다. 따라서 보다 구체적인 규칙을 일반적인 규칙보다 먼저 배치하는 것이 중요하다. 적절히 구성된 ACL은 최소 권한 원칙을 구현하여, 사용자와 애플리케이션이 자신의 역할에 꼭 필요한 작업만 수행할 수 있도록 보장한다. 이는 무단 수정으로부터 데이터를 보호하고, 개인 정보가 포함된 속성(예: userPassword, mail)에 대한 접근을 제한하는 데 필수적이다.

7.3. 일반적인 보안 위협

LDAP 서버는 인증과 권한 부여의 핵심 구성 요소로서, 여러 보안 위협에 노출될 수 있다. 가장 흔한 위협 중 하나는 자격 증명 탈취를 위한 중간자 공격이다. 암호화되지 않은 LDAP 트래픽을 스니핑하면 사용자의 바인드(Bind) 요청에 포함된 평문 비밀번호가 유출될 수 있다. 또한, 약하거나 기본값으로 남겨진 비밀번호는 무차별 대입 공격이나 사전 공격에 취약하다.

서버 자체의 구성 오류도 주요 위협 요인이다. 과도하게 허용적인 접근 제어 목록(ACL)은 공격자가 민감한 디렉터리 정보를 읽거나 수정할 수 있게 한다. 예를 들어, 모든 사용자에게 모든 속성에 대한 읽기 권한을 부여하면 개인 식별 정보가 노출될 위험이 있다. 또한, 적절하지 않은 스키마 검증은 악의적인 데이터 삽입을 허용하여 서비스 거부 공격이나 데이터 무결성 훼손으로 이어질 수 있다.

LDAP 인젝션은 웹 애플리케이션의 일반적인 취약점을 통해 LDAP 검색 필터를 조작하는 공격이다. 공격자는 사용자 입력 필드에 특수 문자를 삽입하여 의도하지 않은 LDAP 쿼리를 실행할 수 있다. 이는 디렉터리 정보를 무단으로 유출하거나, 인증 로직을 우회하거나, 심지어 전체 디렉터리 구조를 파악하는 데 악용될 수 있다.

서버 소프트웨어의 취약점을 이용한 공격도 지속적인 위협이다. 패치가 적용되지 않은 LDAP 서버는 버퍼 오버플로우나 서비스 거부 공격에 취약할 수 있다. 또한, LDAP 서버를 통한 분산 서비스 거부 공격의 증폭기로 악용되는 경우도 있다. 이는 작은 크기의 클라이언트 요청이 매우 큰 응답을 유발하도록 조작되어 타깃 시스템을 공격하는 방식이다.

8. LDAP 관련 기술과 표준

LDAP는 단일 프로토콜이 아닌, 여러 보안 및 기능 확장 표준과 함께 사용되는 기술 스택이다. 주요 관련 기술로는 LDAPS와 StartTLS가 있으며, 이들은 모두 통신 구간의 암호화를 목적으로 하지만 접근 방식이 다르다. LDAPS는 LDAP over SSL의 약자로, 기본적으로 암호화된 포트(일반적으로 636번)를 통해 통신한다. 반면, StartTLS는 평문 포트(389번)에 연결한 후, TLS 협상을 통해 연결을 업그레이드하여 암호화한다. 현대 보안 관행에서는 명시적인 LDAPS보다 StartTLS 방식이 더 권장되는 경향이 있다[4].

인증 메커니즘을 확장하기 위해 SASL(Simple Authentication and Security Layer)이 널리 사용된다. SASL은 LDAP 바인드 연산에 다양한 인증 방법을 제공하는 프레임워크이다. 이를 통해 단순한 아이디/비밀번호 방식을 넘어 Kerberos, GSSAPI, DIGEST-MD5 등과 같은 강력한 인증 방식을 LDAP 세션에 적용할 수 있다. 이는 중앙 집중식 싱글 사인온 시스템을 구축하는 데 중요한 기반이 된다.

LDAP는 또한 다른 네트워크 프로토콜 및 서비스와 긴밀하게 연동된다. 가장 대표적인 사례는 이메일 시스템으로, Microsoft Exchange Server나 Sendmail, Postfix와 같은 메일 전송 에이전트가 사용자 정보 조회를 위해 LDAP를 백엔드 디렉터리로 활용한다. 또한, 많은 VPN 솔루션과 네트워크 접근 제어 시스템이 사용자 인증 및 정책 정보를 LDAP 서버에서 가져온다. 이러한 광범위한 연동성은 LDAP를 기업 IDM의 핵심 구성 요소로 자리매김하게 했다.

8.1. LDAPS와 StartTLS

LDAPS(LDAP over SSL)는 LDAP 프로토콜의 트래픽을 SSL 또는 TLS 암호화 터널 안에서 전송하는 방식을 가리킨다. 이는 별도의 포트(기본적으로 636번)를 사용하여 암호화된 연결을 처음부터 수립한다는 점이 특징이다. 초기에는 SSL을 기반으로 했으나, 현재는 보다 안전한 TLS 프로토콜을 사용하는 것이 일반적이다. LDAPS는 클라이언트와 서버 간의 모든 통신, 특히 인증 정보를 포함한 민감한 데이터를 도청으로부터 보호하는 데 목적이 있다.

반면, StartTLS는 표준 LDAP 포트(389번)를 통해 평문 연결을 먼저 수립한 후, 특별한 확장 연산을 사용하여 기존 연결을 암호화된 TLS 연결로 업그레이드하는 메커니즘이다. 이 방식은 동일한 포트에서 암호화된 통신과 암호화되지 않은 통신을 모두 처리할 수 있는 유연성을 제공한다. 클라이언트는 StartTLS 확장 연산을 지원하는 서버에 연결한 후, 이 연산을 요청하여 보안 채널로 전환한다.

두 방식의 주요 차이점은 연결 초기화 방식과 사용 포트에 있다. 다음 표는 핵심적인 차이를 보여준다.

특징

LDAPS

StartTLS

연결 방식

처음부터 암호화된 SSL/TLS 터널 내에서 LDAP 통신

평문 연결 수립 후, TLS로 업그레이드

기본 포트

636

389

프로토콜

LDAP 프로토콜 자체가 SSL/TLS 위에서 실행

LDAP 프로토콜의 확장 연산(StartTLS) 사용

유연성

별도 포트 필요, 방화벽 정책 추가 관리 필요

단일 포트로 암호화/비암호화 연결 모두 처리 가능

현대적인 보안 관행에서는 StartTLS 방식이 더 선호되는 경향이 있다. 이는 불필요한 추가 포트 개방을 줄이고, 암호화 사용을 강제하는 정책을 더 쉽게 구현할 수 있기 때문이다. 또한, IETF의 표준 권고사항도 보안 강화를 위해 StartTLS의 사용을 장려하고 있다. 그러나 레거시 시스템이나 특정 네트워크 환경에서는 여전히 LDAPS 방식이 널리 사용된다.

8.2. SASL 인증

SASL(Simple Authentication and Security Layer)은 LDAP를 포함한 다양한 네트워크 프로토콜에 인증 및 데이터 보안 서비스를 제공하는 프레임워크이다. LDAP는 기본적으로 단순한 사용자 ID와 비밀번호(바인드) 인증만을 지원하지만, SASL을 통합함으로써 Kerberos, GSSAPI, DIGEST-MD5 등 훨씬 강력하고 유연한 인증 메커니즘을 사용할 수 있게 되었다. 이는 LDAP 서버와 클라이언트 간의 인증 과정을 추상화하여, 다양한 보안 프로토콜을 플러그인 형태로 지원할 수 있도록 한다.

SASL 인증이 LDAP에 도입되면, 클라이언트와 서버는 지원하는 SASL 메커니즘 목록을 협상한다. 일반적인 절차는 다음과 같다.

1. 클라이언트가 서버에 바인드 요청을 보낼 때 SASL 메커니즘을 지정한다.

2. 서버는 해당 메커니즘에 필요한 초기 데이터를 클라이언트에 보낸다.

3. 클라이언트와 서버는 메커니즘에 정의된 일련의 챌린지-응답(challenge-response) 교환을 수행한다.

4. 인증이 성공하면 세션이 설정되고, 필요에 따라 추가적인 보안 계층(예: 암호화)이 협상된다.

주요 SASL 메커니즘과 LDAP에서의 역할은 아래 표와 같다.

메커니즘

설명

주요 용도

EXTERNAL

클라이언트의 신원이 이미 외부 수단(예: TLS 클라이언트 인증서)으로 입증된 경우 사용한다.

TLS/SSL 상에서의 강력한 인증

GSSAPI

Kerberos 티켓을 사용한 인증을 제공한다.

기업 내부의 통합 SSO(Single Sign-On) 환경

DIGEST-MD5

비밀번호를 암호화된 형태(해시)로 전송하여 평문 전송을 방지한다.

CRAM-MD5보다 강화된 인증, 비-Kerberos 환경

PLAIN

사용자 DN과 비밀번호를 평문으로 전송한다.

테스트 또는 TLS 암호화 채널 내에서의 사용

SASL을 사용하는 주요 이점은 인증 자격 증명이 LDAP 프로토콜 자체에 묶이지 않는다는 점이다. 이를 통해 시스템 관리자는 중앙 Kerberos 도메인과 같은 기존 보안 인프라를 LDAP 인증에 재사용할 수 있으며, 애플리케이션은 단일 인증 인터페이스(SASL)만 구현하면 다양한 백엔드 인증 시스템과 연동할 수 있다. 또한, 일부 SASL 메커니즘은 인증 과정에서 세션 암호화를 협상할 수 있어, 별도의 LDAPS 또는 StartTLS 설정 없이도 통신 채널을 보호하는 데 기여한다.

8.3. LDAP와 연동되는 프로토콜

LDAP는 자체적으로 강력한 디렉터리 서비스 프로토콜이지만, 다른 여러 네트워크 프로토콜 및 시스템과의 연동을 통해 그 유용성이 크게 확장된다. 주로 인증, 권한 부여, 계정 관리를 위한 백엔드 디렉터리로 활용되며, 다양한 애플리케이션과 서비스가 LDAP를 통해 사용자 정보를 중앙에서 조회하고 관리한다.

가장 대표적인 연동 사례는 Kerberos 인증 프로토콜이다. Microsoft Active Directory는 LDAP 디렉터리와 Kerberos 인증 서비스를 통합하여, 사용자가 단일 자격 증명으로 네트워크 리소스에 접근할 수 있는 싱글 사인온 환경을 제공한다. 또한 이메일 시스템에서는 SMTP, IMAP, POP3 서버가 LDAP를 통해 사용자 인증을 수행하거나 주소록을 조회한다. HTTP 기반 웹 애플리케이션도 사용자 로그인 인증을 LDAP 서버에 위임하는 경우가 흔하다.

기업 인프라 관리 분야에서는 DNS 서버가 동적 업데이트 정보를 저장하거나, DHCP 서버가 IP 주소 임대 정보와 클라이언트 식별을 위해 LDAP와 연동될 수 있다. RADIUS나 TACACS+와 같은 네트워크 접근 제어 프로토콜도 사용자 인증 백엔드로 LDAP 디렉터리를 자주 사용한다. 이러한 연동은 표준화된 LDAP API와 클라이언트 라이브러리를 통해 이루어지며, 대부분의 운영체제와 프로그래밍 언어는 LDAP 클라이언트 기능을 기본 지원하거나 널리 사용되는 라이브러리를 제공한다.

연동 프로토콜/시스템

주요 연동 목적

Kerberos

통합 인증 및 [[SSO

SMTP/IMAP/POP3

메일 사용자 인증 및 주소록 조회

HTTP/웹 애플리케이션

웹 기반 사용자 로그인 인증

RADIUS/TACACS+

네트워크 장비 접근 인증 백엔드

DNS/DHCP

동적 설정 정보의 중앙 집중식 저장

9. 관련 문서

  • 위키백과 - LDAP

  • 나무위키 - LDAP

  • Microsoft Learn - LDAP(Lightweight Directory Access Protocol)란?

  • Oracle - Oracle Internet Directory 설명서

  • IETF - RFC 4511: Lightweight Directory Access Protocol (LDAP): The Protocol

  • IBM Documentation - LDAP 개념

  • 국가기록원 - 기록관리시스템 연계를 위한 LDAP 활용 가이드

리비전 정보

버전r1
수정일2026.02.14 23:11
편집자unisquads
편집 요약AI 자동 생성