LDAP 이란?

안녕하세요.

본 게시물을 통해 LDAP에대해 소개하고자 합니다.

LDAP 소개에 앞서 X.500 표준에 대해 소개하겠습니다.

 

X.500

X.500은 전자 디렉토리 서비스를 전달하는 일련의 컴퓨터 네트워크 표준입니다. X.500 시리즈는 ITU-T(구 CCITT)에서 개발하였습니다. 디렉토리 서비스는 X.400 전자 메일 교환과 이름 검색을 지원하기 위해 개발되었습니다.

X.500 시리즈

ITU-T Number 표준 이름(한글) 표준 이름(영문)
X.500 디렉토리 개념, 모델, 서비스 요약 Overview of concepts, models and services
X.501 디렉토리 모델 Models
X.509 디렉토리 인증 프레임 워크 Authentication framework
X.512 디렉토리 추상 서비스 정의 Abstract service definition
X.518 디렉토리 분배 운영을 위한 과정 Procedures for distributed operation
X.519 디렉토리 프로토콜 규정 Protocol specifications
X.520 디렉토리의 선택된 특성 종류 Selected attribute type
X.521 디렉토리의 선택된 객체 계열 Selected object classes
X.525 디렉토리 복제 Replication
X.530 디렉토리의 관리를 위한 시스템 관리 사용 Use of Systems Management for Administration of the Directory

X.500 정의 프로토콜

Protocol  내용
 DAP (Directory Access Protocol) DUA와 디렉토리 간 수행되는 프로토콜
 DSP (Directory System Protocol) DSA간 상호 동작 프로토콜
 DISP (Directory Information Shadowing Protocol) DSA간 중복정보 교환 프로토콜
 DOP (Directory Operational Biding Management Protocol) DSA간 관리정보 교환 프로토콜

*  DUA : Directory User Agent – 사용자와 디렉토리 간의 인터페이스 역할 수행 프로세스

*  DSA : Directory System Agent – 디렉토리 내 사용자의 요구 수행 프로세스

 

Directory Service

X.500 표준에 정의된 Directory Service에 대해 알아보겠습니다. Directory Service는 OSI 7 Layer의 응용계층에 속하는 프로토콜로서 정보통신 서비스에 필요한 정보를 데이터베이스화 하여 효율적으로 관리하고 사용자가 편리하게 접근할 수 있는 기능을 제공하는 서비스 입니다.

 

Directory Service의 구성

요청 처리과정을 살펴보면 사용자 혹은 응용프로그램에서 DUA를 통해 서비스를 요청을 합니다. DAP를 통해 DSA로 요청이 보내지고 DSA는 요청 서비스를 해석하고 DataBase를 통해 서비스를 수행한 뒤 수행 결과를 생성하여 DUA통해 요청자에게 결과를 전송하게 됩니다. 만약 분산 디렉토리 서비스 환경이라면 요청 처리시 DSP를 통해 각 DSA간 분산처리를 하게 됩니다.

 

LDAP(Light Directory Access Protocol)

ITU에서 개발한 X.500 디렉토리 서비스 표준은 다양한 쿼리를 이용하여 강력한 검색기능을 제공하며 서버와 데이터의 분산이 용이한 표준입니다.

하지만 X.500의 개발자들은 DAP가 방대하고 복잡하여 구현하기 어렵다는 점 때문에 당시 일반 PC급에서는 사용하기 힘들다는 것을 알았고 이의 해결책으로 LDAP이라는 경량화 된 DAP 가 개발되었습니다.

LDAP은 DAP의 기능을 대부분 지원을 하고 DAP 복잡했던 부분이나 사용되지 않는 부분에 대해 단순화 하거나 삭제하였습니다.

IEFT에서 인터넷상의 표준으로 지정하였으며 X.500을 기본 모델로 하여 인터넷환경에서 필수적인 내용을 규정합니다.

이러한 LDAP은 최초 Directory Server의 프론트엔드로 사용되었습니다.

 

LDAP의 구성

 

 

 

 

 

LDAP의 요청처리는, 사용자 혹은 응용프로그램에서 요청을 보내면 LDAP을 통해 LDAP 서버에 전달 됩니다. 서버는 요청을 처리 후 다시 LDAP을 통해 요청자에게 결과를 전송합니다. DAP와 다르게 TCP/IP 상에서 운영됩니다.

 

LDAP의 개선점

LDAP은 DAP를 거치지 않고 X.500 시리즈를 지원하는 디렉토리 엑세스를 제공하며 OSI Protocole Stack이 아닌 인터넷 표준 프로토콜인 TCP/IP에서 운영됩니다. 이로인해 전송 속도를 개선하였으며 OSI 7 Layer 에서 운영 시 보다 Message-Handling 등 OverHead가 줄고 TCP/IP가 보편화 됨에 따라 LDAP은 대부분의 시스템에서 작동 가능해졌습니다.

데이터 형식에 있어서 대부분 단순한 문자열을 사용함으로써 구현을 단순화하고 성능을 향상시켰습니다.

List, Read Operation을 Search 하나로 통합하였습니다.

 

LDAP 구조

LDAP의 구조는 총 4가지의 모델로 나눌 수 있습니다.

Information 모델

Information 모델은 LDAP의 데이터에 대한 종류와 디렉토리에 저장되는 정보에 대한 기본단위를 정의합니다. Entries, Attributes, Values 등 3가지로 정의됩니다.

Entry란, 디렉토리 정보에 대한 기본단위이며, 각각의 Entry는 DN(Distinguish Name)으로 구분되고 Tree구조를 형성합니다. 이러한 Tree형태의 구조를 DIT(Directory Information Tree)라고 칭합니다.

 

 

 

 

 

 

 

 

위와같은 구조로 DataBase에 Data들이 저장됩니다.(RDB와 비교해보길 추천합니다.)

Attributes란, Entry를 구성하는 단위이며 각 Attribute마다 Type과 Value가 존재합니다.

Type은 Attribute가 포함하는 정보의 종류를 명시합니다. (아래 예시를 참고)

약 어 내 용
dn distinguished name
o organization
cn common name
c country
rdn relative DN
ou organization unit
sn surname

Value란, Attribute의 실질적인 데이터를 나타냅니다. 또한 Value는 Sytax와 Matching Rules와 관련이 있습니다.

* Syntax : 데이터의 형식을 결정

* Matching Rules : 값의 동일성 검사, 정렬 시 사용

전체적인 Information Model은 다음과 같습니다.

위 Tree에서 각 동그라미들은 하나의 Entry이고 가장 위에 있는 Entry를 Root Entry 혹은 Suffix라고 합니다.

각 Entry마다 할당 된 “Dc=Plain,DC=org”, “OU=Devieces” 같은 문장은 각 Entry의 RDN이 됩니다.

맨 아래, RDN이 CN=Gerald Carter라는 Entry를 살펴보면 Entry 내 Type과 Value의 값들이 들어가 있으며 해당 Entry의 DN값은 “CN=Gerald Carter,OU=People,Dc=Plain,Dc=org” 가 됩니다.

위에서도 말했듯이 각각의 Entry는 이러한 DN값으로 구분이 되며 해당 Entry의 RDN은 DN의 가장 좌측의 컴포넌트를 RDN이라고 합니다.

추가적으로 Object Class와 Schema(스키마) 에 대해 간략하게 설명드리면

Object Class는 Attribute를 담고있는 틀이라고 생각하시면 됩니다. 하나의 Object Class 내에는 각종 Attribute를 지정할 수 있습니다.
예를들어보면, Entry를 생성시 Object Class를 지정할 수 있습니다. 그러면 해당 Entry는 지정된 Object Class 내 Attribute를 사용할 수 있습니다.

구체적인 예시) Object Class 중 Person이란 Class가 있습니다. 이 Person에는 cn과 sn이라는 Attribute가 들어있습니다. Entry를 생성시 Person이라는 Object Class를 지정해주면 Entry에 cn값과 sn값을 넣을 수 있습니다.

Schema는 Object Class와 Attribute를 정의하는 파일이라고 생각하시면 됩니다. 즉, 어떤 Object Class에 어떠한 Attribute가 들어있는지 정의를 하기도 하고 어떤 Attribute가 어떠한 Syntax를 갖고 Value를 다중으로 지정할 수 있는지 등의 정의를 합니다.

Naming 모델

데이터를 어떻게 구성하고 참조할 것인지에 대한 정의를 합니다.

이는 앞서 Information 모델의 전체적인 그림을 보았을 때 설명드린 것과 같습니다.

Entry는 DN이라는 유일한 값을 갖게되고 DN의 가장 좌측에 위치한 컴포넌트를 RDN이라고 합니다.

추가로 설명 설명드리자면 RDN의 우측 값(상위 Entry)가 다를경우 RDN은 동일한 값을 가질 수 있습니다.

추가적으로 Entry의 DN값에 콤마를 사용해야 되는 경우가 있습니다. 콤마는 DN의 구분자로 사용되므로 반드시 백슬래쉬( \ )를 사용해 주어야 합니다.

또한 Multivalued RDN과 Aliases라는 요소가 있지만 해당 기능은 서버의 성능을 저하시키므로 사용하지 않는 것이 좋습니다.

Functional 모델

디렉토리 트리의 데이터에 접근하는 방법을 정의하며 총 3가지 그룹으로 구성되어 있습니다.

* 질문(Interrogation) 작업
디렉토리 Entry를 검색(Search) / 비교(Compare)하는 기능

* 갱신(Update) 작업
디렉토리 엔트리의 추가(Add), 삭제(Delete), 변경(Modify) 등의 기능

* 인증(Authentication) 및 제어(Control) 작업
클라이언트 확인 및 제어 기능(Bind, Unbind, Abandon)

Security 모델

인증된 접근만 디랙토리 내 정보를 제공합니다. LDAP은 연결지향형 프로토콜로 연결이 이루어지기 위해 서버와 클라이언트 간 인증과정이 필요합니다. LDAP v3에서는 SASL 방식이 제공되며 인증 과정이 이루어 진 후 서버는 클라이언트에게 보다 많은 권한을 부여할 수 있습니다.

 

LDAP Version

LDAP은 LDAPv1, LDAPv2, LDAPv3 등 총 3가지 버전이 있으며 LDAPv3가 가장 최신 버전입니다.

LDAPv1 과 LDAPv2의 차이점

* LDAPv2는 인증과정 없이 LDAP 서버에 Bind 되는 것을 허용

* Read, List Operation이 없어짐

* 클라이언트는 오직 하나의 Server에만 연결 가능. DAP의 Referral기능 미제공

LDAPv2 와 LDAPv3의 차이점

* Referral을 이용 분산 가능

* 사용자 정의 Attribute와 Object Class 생성 가능

* LDAPv3는 UTF-8 Encoding을 이용하여 언어를 표현하는 제약이 완화되었으며 다양한 언어 사용이 가능

* 사용자 정의 Matching Rule 생성 가능

* Hash Function을 이용한 Password 보호로 보안성 향상

 

여기까지 DAP와 LDAP에 대해 알아보았습니다.

최대한 내용을 이해하기 쉽게 작성하려고 하였는데 잘 작성 한 글인지 모르겠네요.

게시글이 많은 도움이 되었길 바랍니다. 감사합니다.

 

참고사항

ITU-T : International Telecommunication Union TelecommunicationSector – 국제전기통신연합 전기통신표준화 부문

CCITT : Comité Consultatif International Téléphonique et Télégraphique(프랑스어) – 국제전화자문위원회. CCIT(국제전신자문위원회)와 CCIF(국제전화자문위원회)가 합변되어 발족한 ITU 산하 자문기관입니다. 1956년에 만들어 졌으며 1993년 ITU-T로 개명되었습니다.

IETF : Internet Engineering Task Force – 국제 인터넷 표준화 기구

 

※ 게시글을 퍼가실 땐 반드시 출처를 남겨주시기 바랍니다.


답글 남기기