다음 이전 차례

1. 소개

이 문서는 LDAP 디렉토리 서버를 설치하여 사용하는데 있어 도움을 주기 위한 것으로 LDAP 서버의 설치, 설정, 구동 및 유지 보수 방법을 배운다. 그 후 LDAP 클라이언트와 유틸리티를 사용하여 디렉토리내에 정보를 저장, 검색 및 갱신하는 방법을 배운다. LDAP 디렉토리 서버 데몬, slapd은 여러가지 많은 UNIX 플랫폼에서 작동된다.

LDAP 서버들간의 사본을 다루는 다른 데몬, slurpd이 있는데, 당분간은 염두에 둘 필요가 없다. 이 문서에서는 사본없이, 즉 slurpd 데몬없이, 단지 로컬 도메인에 대해 디렉토리 서비스를 제공하는 slapd 데몬만을 작동한다.

이 문서는 간단한 서버 설정을 다루는데 처음 시작을 위해 유익하며 추후 필요시 다른 설정으로 갱신하는 것은 쉽다. 이 문서의 정보는 LDAP 프로토콜 사용에 대한 정확한 초기화를 설명한다. 아마도 이 문서를 읽은 후에는 리눅스 서버 능력의 확장뿐만 아니라 기존의 사용가능한 C, C++ 과 자바 개발 도구(JDKs)를 사용하여 자신의 클라이언트를 작성할 수 있을 것이다.

1.1 LDAP란 무엇인가?

LDAP는 디렉토리 서비스 엑세스를 위한 클라이언트-서버 프로토콜로 초기에는 X.500의 전위(front-end)로 사용되었으나 스탠드 얼론(stand-alone) 및 다른 종류의 디렉토리 서버들과 함께 사용될 수 있다.

1.2 디렉토리 서비스란 무엇인가?

디렉토리는 데이타베이스와 유사하지만 더욱 설명적이고 속성에 기초한 정보를 갖고 있다. 디렉토리내의 정보는 일반적으로 쓰기보다는 읽기 작업에 더욱 빈번히 이용된다. 따라서, 디렉토리는 통상적으로 정규 데이타베이스들이 다량의 복잡한(high-volume complex) 갱신을 위해 사용하는 복잡한 처리(transaction) 또는 롤백 계획(프로그램에 따라 바로 전의 체크포인트로 돌아가기, roll-back)을 수행하지 않는다. 디렉토리는 일반적으로, 적어도 허용된다면, 전부 갱신되거나 아무 것도 변경되지 않는다.

디렉토리는 다량의 순람(lookup) 또는 검색 연산에 대해 빠르게 응답하기 위해 조정된다. 디렉토리는 응답 시간을 감소시키는 반면 가용성과 신뢰성을 증대시키기 위해 정보를 널리 복제할 수 있다. 디렉토리 정보가 복제될 때 복제된 정보들 사이의 일시적인 불일치는 결국 일치된다면 무방할 것이다.

디렉토리 서비스를 제공하는 많은 다른 방법이 있다. 각각의 방법들은 다양한 종류의 정보가 디렉토리에 저장되는 것을 허용하며, 그러한 정보가 어떻게 참조, 질의 및 갱신될 수 있는지 또는 허가받지 않은 엑세스로부터 어떻게 보호되는지 등에 대한 여러가지 요건을 둔다. 어떤 디렉토리 서비스는 제한된 상황(예를 들면 단독 머신에서 finger 서비스)에 대해서 서비스를 제공하는 지역적인 반면 다른 서비스는 더욱 넓은 상황에 대해서 서비스를 제공하는 전체적이다.

1.3 LDAP는 어떻게 작동하는가?

LDAP 디렉토리 서비스는 클라이언트-서버 모델에 기초하는데, 하나 또는 그 이상의 LDAP 서버들이 LDAP 디렉토리 트리 또는 백엔드(backend) 데이타베이스를 구성하는 자료를 갖고 있다. LDAP 클라이언트는 LDAP 서버에 연결해 질의하며, 서버는 답 또는 클라이언트가 더 많은 정보를 얻을 수 있는 포인터(일반적으로 다른 LDAP서버)를 갖고 응답한다. 클라이언트는 어떤 LDAP 서버에 연결하던지 간에 동일한 디렉토리 구조를 본다; 한 LDAP 서버에 보내지는 이름은 다른 LDAP에 있을 수 있는 동일한 엔트리를 참조하며 이것이 LDAP와 같은 전체적인 디렉토리 서비스의 중요한 특징이다.

1.4 LDAP 백엔드, 객체와 속성

Slapd는 세개의 다른 백엔드 데이타베이스 중에서 하나를 선택할 수 있다; 고성능 디스크에 기초한 데이타베이스 LDBM, 임의의 유닉스 명령어 또는 쉘 스크립트에 대한 데이타베이스 인터페이스 SHELL, 간단한 패스워드 파일 데이타베이스인 PASSWD.

이 문서에서는 LDBM 데이타베이스가 선택된다고 가정한다.

LDBM 데이타베이스는 데이타베이스내의 각 엔트리에 콤팩트한 4 바이트의 고유한 식별자를 할당함으로써 작동한다. 데이타베이스는 엔트리 고유 식별자(entry's unique identifier, EID)를 엔트리 자체를 표현하는 텍스트로 사상해주는 id2entry라는 하나의 주 인덱스 파일로 구성되는데 다른 인덱스 파일들도 마찬가지로 유지된다.

LDAP에 기초한 디렉토리 서버들간의 디렉토리 정보를 import 및 export 하거나 디렉토리에 적용되어지려고 하는 일련의 변경들을 기술하기 위해 LDIF(LDAP Data Interchange Format) 파일 포맷이 일반적으로 사용된다. LDIF 파일은 엔트리의 객체지향 계층 구조내에 정보를 저장하는데 LDAP 소프트웨어 패키지에는 LDIF 파일을 LDBM 포맷으로 변화해주는 유틸리티가 있다.

일반적인 LDIF 파일은 다음처럼 보인다:

dn: o=TUDelft, c=NL
o: TUDelft
objectclass: organization
dn: cn=Luiz Malere, o=TUDelft, c=NL
cn: Luiz Malere
sn: Malere
mail: malere@yahoo.com
objectclass: person

위에서 보듯이 각 엔트리는 구별되는 이름(DN, distinguished name)에 의해 고유하게 식별되며 DN은 엔트리의 이름과 엔트리를 통해 디렉토리 계층 구조의 최상위를 찾는 이름들의 경로로 구성된다.

LDAP에서 객체 클래스는 엔트리를 정의하는데 사용될 수 있는 속성 집합을 정의한다. LDAP 표준은 다음과 같은 기본 형태의 객체 클래스를 제공한다:

엔트리는 하나 이상의 객체 클래스에 속할 수 있는데, 예를 들면 사람에 대한 엔트리는 person 객체 클래스에 의해 정의되지만 inetOrgPerson, groupOfNames와 Organization 객체 클래스내의 속성에 의해서도 정의될 수 있다. 서버의 객체 클래스 구조(즉 스키마, schema)는 특별한 엔트리에 대해 필수 및 허용 속성들의 총 리스트를 결정한다.

디렉토리 자료는 속성-값 쌍으로 표현되는데 정보의 어떤 특정 부분은 설명적 속성과 연결된다.

예를 들면, commonName 또는 cn 속성은 사람의 이름을 저장하는데 사용된다. Jonas Salk라는 이름을 갖는 사람은 디렉토리내에서 다음과 같이 표현될 수 있다.

cn: Jonas Salk

디렉토리내에 들어가는 각 사람은 person 객체 클래스내의 속성 집합에 의해 정의되는데 이 엔트리를 정의하기 위해 사용하는 다른 속성들은 다음을 포함할 수 있다.

givenname: Jonas 
surname: Salk
mail: jonass@airius.com

필수 속성들은 객체 클래스를 사용하는 엔트리에 존재해야 하는 속성들을 포함하는데 모든 엔트리들은 엔트리가 속하는 객체 클래스가 리스트되어 있는 objectClass 속성을 필요로 한다.

허용 속성들은 객체 클래스를 사용하는 엔트리에 존재할 수 있는 속성들을 포함하는데 예를 들면 person 객체 클래스에서 cn 과 sn 속성은 필수지만 description, telephoneNumber, seeAlso와 userpassword 속성들은 필수가 아닌 허용된 것들이다.

각 속성은 속성에 의해 제공되는 정보 유형을 기술하는 해당 구문(syntax) 정의를 갖는다:

Objectclass와 속성 정의들이 시스템의 어디에 있는지를 알기 위해서는 3절 의 첫 문단으로 가라.

1.5 문서의 새로운 버전

이 문서는 독자들에 의해 제공되는 피드백에 기초해 수정과 갱신될 수 있다. 이 문서의 새로운 버전에 대해서는 다음을 참조해야 한다:

http://www.mobilesoft.com.br/HOWTO/LDAP-HOWTO.html

1.6 의견과 제안

이 문서에서 사용할 수 있는 어떤 정보에 대해 어떤 의구심이 있다면 다음 전자우편 주소로 메일을 보내주길 바란다.

malere@yahoo.com

주석과/또는 제안이 있다면 또한 저자에게 알려주길 바란다.

1.7 문서 발표 기록

이 절은 시기별로 분류된 본 발표 문서를 열거한다. 각 발표 문서는 초기 버전에 도입된 변경, 새로운 추가 사항 및 수정을 포함한다.

v1.0: 20 June 1999, Initial version.

v1.01: 15 February 2000, added the following sections:

v1.02: 13 September 2000, correction of typos and addition of the following section: v1.03: 28 September 2000, presenting OpenLDAP 2.0, which comprises Ldap v3, defined on the RFC2251. v1.04: 28 Februrary 2001, correction of more typos and update on the following sections:

1.8 Acknowledgments

이 문서는 Netherlands의 TUDelft 대학에서 수행한 인턴십의 결과이다. 저자는 이 문서를 쓰도록 용기를 준 많은 분들에게 고마움을 표현하고 싶다: Rene van Leuken과 Wim Tiwon에 매우 고맙게 생각한다. 그들은 또한 저자와 같은 리눅스 팬들이다. 저자는 이 문서에 기여한 독일어판 LDAP HOWTO 문서의 저자인 Thomas Bendler와 LDP 프로젝트의 위대한 지원자인 Joshua에게 고마움을 표현하고 싶다.

1.9 Copyright and Disclaimer

The LDAP Linux HOWTO is Copyrighted 1999 by Luiz Ernesto Pinheiro Malere. It can be distributed freely. It cannot be modified. If you have any kind of sugestion, please send me an email (I will update the document if the sugestion proceeds).

If you want a translation, for example to Portuguese, you can send me an email about it too.

No liability for the contents of this document can be accepted. I have no responsability about the consequences of following the steps provided in this document.

If you have questions, please contact, the Linux HOWTO coordinator, at

linux-howto@metalab.unc.edu


다음 이전 차례