LDAP Linux HOWTO Luiz Ernesto Pinheiro Malere, malere@yahoo.com v1.04, 2001년 2월 28일 서정룡, s_ryong@hotmail.com 2001년 3월 7일 이 문서는 LDAP(Lightweight Directory Access Protocol) 서버 설치, 설정, 구동 및 유지 보수에 대한 정보를 설명한다. LDAP 데이타베이스 생성, 데이타베이스내의 정보 갱신과 삭제, 로우밍 엑세스 수행 및 넷스케이프 주소록 사용 방법에 대한 세부사항도 설명한다. 이 문서는 대부분이 미시간 대학의 정보 페이지와 OpenLDAP 관리자 지침에 근거한다. ______________________________________________________________________ 목차 1. 소개 1.1 LDAP란 무엇인가? 1.2 디렉토리 서비스란 무엇인가? 1.3 LDAP는 어떻게 작동하는가? 1.4 LDAP 백엔드, 객체와 속성 1.5 문서의 새로운 버전 1.6 의견과 제안 1.7 문서 발표 기록 1.8 Acknowledgments 1.9 Copyright and Disclaimer 2. LDAP 서버 설치하기 2.1 선행 필수, Pre-Requirements 2.2 패키지 다운로드 받기 2.3 패키지 압축해제 하기 2.4 소프트웨어 설정하기 2.5 서버 구축하기 3. LDAP 서버 설정하기 AID CDATA 3절(LABEL)LABEL 3.1 설정 파일 포맷 3.2 전역적 지시 AID CDATA 3.2절(LABEL)LABEL 3.3 일반적인 백엔드 옵션 3.4 일반적인 데이타베이스 지시 3.5 LDBM 백엔드 특정적 지시 3.6 다른 백엔드 데이타베이스 3.7 엑세스 제어 예 3.8 설정 파일 예 4. LDAP 서버 구동하기 AID CDATA 4절(LABEL)LABEL 4.1 Command Line Options 4.2 LDAP 서버 시작하기 AID CDATA 4.2절(LABEL)LABEL 4.3 LDAP 서버 중지하기 5. 데이타베이스 생성과 유지 보수 5.1 온라인상에서 데이타베이스 생성하기 5.2 오프라인상에서 데이타베이스 생성하기 5.3 More on the LDIF format 5.4 The ldapsearch, ldapdelete and ldapmodify utilities AID CDATA 5.4절(LABEL)LABEL 6. 부가적 정보와 특징 6.1 로우밍 엑세스(Roaming Access) 6.2 넷스케이프 주소록 6.3 LDAP Migration Tools 6.4 LDAP를 사용한 인증 6.5 그래픽 LDAP 도구 6.6 로그 7. 참고 문헌 7.1 URLs 7.2 서적 7.3 RFCs ______________________________________________________________________ 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 표준은 다음과 같은 기본 형태의 객체 클래스를 제공한다: o 개별 객체 또는 객체 그룹의 정렬되지 않은 리스트를 포함하고 있는 디렉토리내 그룹 o 국가명과 설명(description)과 같은 장소 o 디렉토리내 조직 o 디렉토리내 사람 엔트리는 하나 이상의 객체 클래스에 속할 수 있는데, 예를 들면 사람에 대한 엔트리는 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) 정의를 갖는다: o bin binary (바이너리) o ces case exact string (case는 비교시 일치해야 한다) o cis case ignore string (case는 비교시 무시된다) o tel telephone number string (cis와 같지만 비교시 공백과 대시기호 `-' 는 무시된다) o dn distinguished name (구별되는 이름) Objectclass와 속성 정의들이 시스템의 어디에 있는지를 알기 위해서는 ``''의 첫 문단으로 가라. 1.5. 문서의 새로운 버전 이 문서는 독자들에 의해 제공되는 피드백에 기초해 수정과 갱신될 수 있다. 이 문서의 새로운 버전에 대해서는 다음을 참조해야 한다: 1.6. 의견과 제안 이 문서에서 사용할 수 있는 어떤 정보에 대해 어떤 의구심이 있다면 다음 전자우편 주소로 메일을 보내주길 바란다. malere@yahoo.com 주석과/또는 제안이 있다면 또한 저자에게 알려주길 바란다. 1.7. 문서 발표 기록 이 절은 시기별로 분류된 본 발표 문서를 열거한다. 각 발표 문서는 초기 버전에 도입된 변경, 새로운 추가 사항 및 수정을 포함한다. v1.0: 20 June 1999, Initial version. v1.01: 15 February 2000, added the following sections: o LDAP Migration Tools o Authentication using LDAP o Graphical LDAP tools o RFCs v1.02: 13 September 2000, correction of typos and addition of the following section: o History of Releases 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: o Roaming Access o Authentication using LDAP 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 2. LDAP 서버 설치하기 LDAP 서버 설치는 선행 필수 패키지 설치(설치되어 있지 않을 경우), 서버 다운로드, 소프트웨어 압축해체, Makefile 설정과 서버 구축의 다섯 단계를 통해 이루어진다. 2.1. 선행 필수, Pre-Requirements LDAP 버전 3을 완전히 따르기 위해 OpenLDAP 클라이언트와 서버는 약간의 부가적인 패키지의 설치를 필요로한다: OpenSSL TLS libraries 어떤 운영체제가 이 라이브러리를 기본 시스템의 부분 또는 선택적인 소프트웨어 컴포넌트로 제공할 수 있지만, OpenSSL은 종종 별도의 설치를 필요로 한다. OpenSSL은 다음 사이트에서 구할 수 있다. Kerberos Authentication Services OpenLDAP 클라이언트와 서버는 Kerberos에 기초한 인증 서비스를 지원하는데 특히 Heimdal 또는 MIT Kerberos V 패키지를 이용한 SASL/GSAPI 인증 기구를 지원한다. Kerberos에 기초한 SASL/GSSAPI 인증을 사용하고 싶다면 Heimdal 또는 MIT Kerberos V를 설치해야 한다. Heimdal Kerbero는 로부터 구할 수 있다. MIT Kerberos는 로부터 구할 수 있다. Kerberos가 제공하는 것과 같은 강력한 인증 서비스의 사용을 강력히 추천한다. Cyrus's Simple Authentication and Security Layer Libraries 어떤 운영체제가 이 라이브러리를 기본 시스템의 부분 또는 선택적인 소프트웨어 컴포넌트로 제공할 수 있지만, Cyrus SASL은 종종 별도의 설치를 필요로 한다. Cyrus SASL은 로부터 구할 수 있다. Cyrus SASL은 OpenSSL과 Kerberos/GSSAPI 라이브러리가 미리 설치되어 있다면 이들을 사용할 것이다. Database Software OpenLDAP의 slapd 기본 데이터베이스 백엔드인 LDBM은 엔트리 저장을 위해 호환성 데이타베이스 패키지를 필요로 한다. LDBM은 Sleepycat 소프트웨어의 BerkeleyDB(추천) 또는 자유 소프트웨어 재단(FSF, Free Software Foundation)의 GNU 데이타베이스 매니저(GDBM)와 호환된다. 이러한 패키지들을 설정시 이용할 수 없다면 기본 데이타베이스 백엔드 지원을 하는 slapd 데몬을 구축할 수 없을 것이다. 운영체제가 기본 시스템내에서 또는 선택적인 소프트웨어 컴포넌트로써 두 패키지 중 하나를 제공할 수 있는데 이러한 소프트웨어를 구해서 설치할 필요가 있다. BerkekeyDB 는 Sleepycat 소프트웨어의 다운로드 페이지 로부터 구할 수 있다. 여러 버전을 이용할 수 있는데 이 문서를 작성하는 시점에는 최신 배포본 버전 3.1 이 추천된다. GDBM은 FSF의 다운로드 사이트 로부터 구할 수 있는데 이 문서를 작성하는 시점에는 버전 1.8 이 최신 배포본이다. Threads OpenLDAP는 쓰레드를 이용할 수 있도록 설계되어 있는데 POSIX pthreads, Mach CThreads와 많은 다른 변형들을 지원한다. configure 스크립트가 적합한 쓰레드 하위 시스템을 찾을 수 없다면 에러 메세지를 출력하는데 이런 경우 OpenLDAP FAQ의 소프트웨어 - 설치 - 플랫폼 힌트 절을 참조하길 바란다. TCP Wrappers slapd는 TCP wrappers(IP 레벨 엑세스 제어 필터)가 이미 설치되어 있다면 이를 지원하는데 개인적인 비공개 정보를 포함하는 서버 보안을 위해 TCP wrappers 또는 다른 IP 레벨 엑세스 필터(IP 레벨 방화벽이 제공하는 것과 같은) 사용을 추천한다. 2.2. 패키지 다운로드 받기 LDAP 서버로는 Michigan 대학 LDAP 서버와 OpenLDAP 서버 두 종류의 자유로이 배포되는 LDAP 서버가 있으며 또한 넷스케이프 디렉토리 서버도 어떤 조건하에서는 자유로이 사용할 수 있다(예를 들면 교육기관은 자유로이 얻을 수 있다). OpenLDAP 서버는 Michigan 대학 LDAP 서버의 최신 버전에 기초하는데 그 버전에 대해 이용할 수 있는 메일링 리스트와 부가적 문서가 있다. 이 문서는 OpenLDAP 서버의 사용을 가정한다. 최신 tar gzipped 버전은 다음 주소에서 구할 수 있다: Michigan 대학 LDAP 서버의 최신 버전은 다음 주소에서 구할 수 있다: 이 문서를 작성하기 위해 저자는 최신 안정 버전 1.2.11과 새로이 배포된 2.0.4 버전 두가지 OpenLDAP 패키지를 사용했다. 운영체제는 커널 2.2.13인 슬랙웨어 리눅스이다. OpenLDAP 사이트에서 늘 OpenLDAP 서버의 최신 개발 및 안정 버전을 찾을 수 있다. 이 문서가 갱신되었던 시점까지 최신 안정 버전과 최신 개발 버전은 각각 openldap-stable-20000704.tgz과 openldap-2.0.4.tgz 였다. 2.3. 패키지 압축해제 하기 tar gzipped 패키지를 구한 후 압축해제한다. 우선 패키지를 원하는 디렉토리, 예를 들면 /usr/local, 로 복사하길 바란다. 그리고 다음의 명령을 사용하길 바란다: tar xvzf openldap-stable.tgz 마찬가지로 다음 명령을 사용할 수도 있다: gunzip openldap-stable.tgz | tar xvf - 2.4. 소프트웨어 설정하기 웹사이트에 최적의 소프트웨어를 설치할 수 있도록 개별화(customization)할 수 있는 여러 옵션들이 있다. 소프트웨어는 단지 두 단계에 의해 설정된다: o 소프트웨어를 압축해제한 디렉토리 밑의 하위 디렉토리 include에 위치한 ldapconfig.h.edit 파일을 편집한다 o configure 스크립트를 실행시킨다 (호기심이 많다면 configure 스크립트를 실행시키는 대신 Make-common 파일을 편집할 수 있다) include/ldapconfig.h.edit 파일안에서 slapd와 slurpd 데몬의 위치와 같은 옵션을 설정할 수 있다. 파일자체가 잘 주석처리 되어 있고 default 설정은 대부분의 일반적인 관리자 선택을 반영하고 있는데 급하다면 이 단계를 지나칠 수 있다: vi include/ldapconfig.h.edit OpenLDAP 서버 소스는 설치 디렉토리, 컴파일러와 링커 플래그와 같은 옵션 설정을 위한 설정 스크립트와 함께 배포되는데 소프트웨어를 압축해제한 디렉토리에서 다음 명령을 실행시킨다: ./configure --help 이 명령은 소프트웨어를 설치하기 전에 configure 스크립트를 갖고 개별화할 수 있는 모든 선택사항을 출력할 것이다. 설치 디렉토리 설정에 관한 유용한 옵션은 --prefix=pref, --exe-prefix=eprefix 와 --bindir=dir 가 있다. 일반적으로 옵션없이 configure를 실행시킨다면 스크립트가 적절한 설정을 자동적으로 인지해서 default로 공통 위치에 설치하기 위해 준비할 것이다. 단지 다음과 같이 실행시킨다: ./configure 모든 것이 잘 진행되는지 보기 위해 화면에 출력되는 내용을 보길 바란다. 2.5. 서버 구축하기 소프트웨어를 설정한 후 구축을 시작하는데 우선 다음 명령을 이용하여 의존성을 구축한다: make depend 다음 명령을 이용하여 서버를 구축한다: make 모든 것이 잘 진행된다면 서버는 설정된대로 구축될 것이다. 그렇지 않다면 설정 사항을 검토하기 위해 이전 단계로 돌아가길 바란다. 플랫폼에 관계되는 특수한 지시를 검사해야 하는데 소프트웨어를 압축해제한 디렉토리밑의 doc/install/hints 에 있다. 바이너리와 man 페이지를 설치한다. 어디에 설치하느냐에 따라 슈퍼유저일 필요가 있다. su make install 설치가 완료되었으며 서버 바이너리와 여러 다른 유틸리티들이 생성되었을 것이다. LDAP 서버 작동 설정 방법을 보기 위해서는 ``다음''으로 가길 바란다. OpenLDAP 2.0 서버의 바이너리는 slapd이다. OpenLDAP 2.0은 공식적으로 8월 30일 발표되었는데 RFC 2251에 정의된 바와 같이 Ldap 프로토콜 v2을 포함하고 있다. OpenLDAP 2.0 의 주된 특징은 다음과 같다: o LDAPv2 and LDAPv3 Support (RFC2251-2256,2829-2831) o Maintenance of interoperability with existing clients o IPv4 and IPv6 support o Strong Authentication (SASL) (RFC2829) o Start TLS (RFC2830) o Language Tags (RFC2596) o DNS-based service location (RFC2247+"locate" I-D) o Enhanced Standalone Server o Named References/ManageDsaIT ("nameref" I-D) o Enhanced Access Control subsystem o Thread pooling o Preemptive threading support o Multiple listener support o LDIFv1 (RFC2849) o Improved platform/subsystem detection Note: LDP(Linux Document Projext)에 LDAP Implementation HOWTO 문서가 있을 것이다. 이 문서는 OpenLDAP 2.0 의 새로운 특징을 이용하길 원하는 사람들에게 많은 자료를 제공할 것이다. 배포 날짜는 2000년 12월 즈음이다. OpenLDAP 패키지 최신 버전에서는 구축된 바이너리를 시험하는 것 또한 가능 한데 다음 명령을 이용하여 시험 스크립트를 실행시킬 수 있다: make test 어떤 것이 잘 되지 않는다면 Ctrl-C를 눌러 중간에 정지시킬 수 있다. 저자의 경우 스크립트가 완전히 끝나기 전에 중간에 멈추었는데 어쨌든 OpenLDAP 설정에 대한 성공적인 메시지를 볼 수 있었다. 3. LDAP 서버 설정하기 소프트웨어의 설치 및 구축 완료후 사이트에 적합하게 설정할 수 있는데 모든 slapd 런타임 설정은 설정 스크립트에서 지정한 prefix 디렉토리 또는 default로 /usr/local/etc/openldap 디렉토리에 설치된 slapd.conf 파일을 통해 이루어진다. 이 절은 slapd.conf 파일내의 일반적으로 사용되는 설정 지시(configuration directive)들을 세부적으로 설명한다. 완전한 리스트를 위해서는 slap.conf(5) 매뉴얼 페이지를 보기 바란다. 설정 파일 지시들은 전역적, 백엔드 특정적 및 데이타 특정적인 부문으로 분류된다. 이 절에서 지시의 설명과 그들의 default 값들(존재한다면) 및 그들 사용의 예를 볼 수 있다. 3.1. 설정 파일 포맷 Slapd.conf 파일은 전역적, 백엔드 특정적 및 데이타베이스 특정적인 세가지 유형의 설정 정보로 구성되는데 전역적정보, 개개의 백엔드 형태와 관련된 정보와 개별적 데이타베이스 인스턴스와 관련된 정보순으로 세부적으로 설명된다. 전역적 지시는 백엔드와/또는 데이터베이스 지시에서 무효화될 수 있으며, 백엔드 지시는 데이터베이스 지시에 의해 무효화될 수있다. 공라인과 '#'로 시작하는 주석라인은 무시되며 white space로 시작하는 라인은 이전 라인의 연속으로 고려된다. Slapd.conf 파일의 일반적 포맷은 다음과같다: # global configuration directives # 백엔 definition 백엔 <백엔-specific directives> # first database definition & config directives database # second database definition & config directives database # second database definition & config directives database # subsequent backend & database definitions & config directives ... 설정 지시는 인수를 취할 수 있는데 white space에 의해 구분한다. 인수가 white space를 포함한다면 "like this"와 같이 이중 인용부호로 에워싸야 한다. 인수가 이중 인용부호 또는 역슬래쉬문자 `\'를 포함하면 역슬래쉬 문자가 이들 문자 앞에 있어야 한다. 배포판은 /usr/local/etc/openldap 디렉토리에 설치될 수 있는 설정 파일의 예를 포함한다. 스키마 정의(속성 형태와 객체 클래스)를 포함한 다수의 파일들은 /usr/local/etc/openldap/schema 디렉토리에 설치된다. 3.2. 전역적 지시 이 절에 기술된 지시들은 백엔드 또는 데이타베이스 정의에서 특별히 무효화되지 않는다면 모든 백엔드에 적용된다. 실제 텍스트에 의해 대체되는 인수들은 <> 괄호내에 있다. access to [ by ]+ 이 지시는 한명 또는 그 이상의 요청자(에 의해 지정된)에 의한 일련의 엔트리와/또는 속성(에 의해 지정된)에 대한 엑세스(에 의해 지정된)를 허용한다. 세부사항을 알고 싶다면 엑세스 제어 예를 보길 바란다. attributetype 이 지시는 속성 형태를 정의한다. defaultaccess { none | compare | search | read | write } 이 지시는 엑세스 지시가 지정되지 않았을 때 요청자에게 허용된 default 엑세스를 지정한다. 임의의 주어진 엑세스 레벨은 모든 하위 엑세스 레벨을 내포한다 (예, 읽기 엑세스는 검색과 비교를 내포하지만 쓰기를 내포하지는 않는다). Default: defaultaccess read idletimeout 유휴 클라이언트 연결을 강제로 종료하기 전에 기다리는 시간(초)을 지정한다. Default로 0의값의 ideltimeout은 이 특징을 작동시키지 않는다. include 이 지시는 현재 파일의 다음 라인을 계속 진행하기 전에 slapd 데몬이 주어진 파일로부터 부가적인 설정 정보를 읽어야 함을 지정한다. Included된 파일은 일반적인 slapd config 파일 포맷을 따라야한다. 파일은 일반적으로 스키마 명세사항(specification)을 갖고있는 파일들을 포함하기위해 사용된다. Note: 내포 include 지시의 수에 제한이 없으며 루프(loop) 탐지가 행해지지 않기 때문에 이 지시를 사용할 때는 주의해야 한다. loglevel 본 지시는 디버깅 보고서(statement)와 operation 통계가 syslogged(현재는 syslogd(8) LOCAL4로 로그되어있다) 되어야 하는 레벨을 지정한다. 이것이 잘 작동되도록(늘 작동되고 있는 두 통계 레벨을 제외하고) OpenLDAP를 --enable-debug(default) 옵션을 갖고 설정했어야 한다. 로그 레벨은 부가적이다. 어떤 숫자가 어떤 종류의 디버깅에 해당되는 지를 출력하기위해 -? 을 옵션과 함께 slapd를 실행시키거나 아래의 테이블을 참고하길 바란다. 에 가능한 값들은 다음과 같다: -1 enable all debugging 0 no debugging 1 trace function calls 2 debug packet handling 4 heavy trace debugging 8 connection management 16 print out packets sent and received 32 search filter processing 64 configuration file processing 128 access control list processing 256 stats log connections/operations/results 512 stats log entries sent 1024 print communication with shell backends 2048 print entry parsing debugging 예: loglevel 255 or loglevel -1 이는 매우 많은 디버깅 정보가 syslogged되게 할 것이다. Default: loglevel 256 objectclass 이 지시는 객체 클래스를 정의한다. referral 이 지시는 요청을 처리하는 로컬 데이타베이스를 찾을수 없을 때 돌려보내는 referral을 지정한다. 예: referral ldap://root.openldap.org 이는 non-local 질의에 대해 OpenLDAP 프로젝트의 전역 루트 LDAP 서버를 참조하라는 것을 의미한다. Smart LDAP 클라이언트는 그 서버에 질의를 재차 요청할 것이지만, 대부분의 클라이언트는 호스트 부분과 선택적으로 구별되는 이름 부분을 포함하는 간단한 LDAP URLs을 처리하는 방법을 알려고 한다는 것을 주목하길 바란다. sizelimit 이 지시는 검색 연산시 리턴되는 최대 엔트리수를 지정한다. Default: sizelimit 500 timelimit 이 지시는 slapd가 검색 요청에 답변하기위해 쓸 수 있는 최대시간(실제시간, 초)을 지정한다. 요청이 이 시간 내에 종결되지 않는다면 초과된 timelimit을 지적하는 결과가 리턴될 것이다. Default: timelimit 3600 3.3. 일반적인 백엔드 옵션 이 절의 지시들은 오로지 그들이 정의된 백엔드에만 적용되는데 모든 종류의 백엔드가 이 지시들을 지원한다. 백엔드 지시는 같은 유형의 모든 데이터베이스 인스턴스에 적용되지만 어떤 지시냐에 따라 데이터베이스 지시에 의해 무효화될 수 있다. backend 이 지시는 백엔드 정의의 시작을 나타낸다. 은 ldbm, shell, passwd 또는 다른 지원되는 백엔드 유형 중 하나여야 한다. 3.4. 일반적인 데이타베이스 지시 이 절의 지시들은 오로지 그들이 정의된 데이타베이스에만 적용되는데 모든 종류의 데이타베이스가 이 지시들을 지원한다. database 이 지시는 새로운 데이터베이스 인스턴스 정의의 시작을 나타낸다. 은 ldbm, shell, passwd 또는 다른 지원되는 백엔드 형태중의 하나여야한다. 예: database ldbm 이는 LDBM 백엔 데이터베이스 인스턴스 정의의 시작을 나타낸다. readonly { on | off } 이 지시는 데이터베이스를 "read-only" 모드로 만든다. 데이터베이스를 수정하려는 모든 시도는 "unwilling to perform"" 에러를 출력할 것이다. Default: readonly off replica host=[:] [bindmethod={ simple | kerberos | sasl }] ["binddn="] [mech=] [authcid=] [authzid=] [credentials=] [srvtab=] 이 지시는 데이터베이스의 복사본 사이트를 지정한다. host= 변수는 호스트와 옵션으로 slave slapd 인스턴스를 찾을 수 있는 포트를 지정한다. 에는 도메인 네임 또는 IP 주소가 사용될 수 있다. 가 지정되지 않으면 표준 LDAP 포트 넘버(389)가 사용된다. binddn= 변수는 slave slapd에 갱신을 위해 bind할 DN을 준다. 이는 일반적으로 slave의 config 파일에 rootdn으로 주어지는데 slave slapd 데이터베이스에 대한 읽기/쓰기 엑세스를 갖는 DN 이어야 한다. 또한 slave slapd config 파일내의 updatedn 지시와 일치해야 한다. DN은 중간에 space를 포함할 수 있기때문에 전체 "binddn=" 문자열은 이중 인용부호로 에워싸야 한다. bindmethod는 slave slapd에 연결할 때 간단한 패스워드에 기초한 인증, Kerberos 인증 또는 SASL 인증이 사용되는지에 따라 simple, kerveros 또는 sasl 이다. Simple 인증은 적절한 무결성과 프라이버시 보호가 적당(예, TLS 또는 IPSEC)하지 않다면 사용하지 않아야 한다. Simple 인증은 binddn과 credential 변수의 명세 사항을 필요로 한다. Kerberos 인증은 SASL 인증 기구, 특히 KERBEROUS_V4와 GSSAPI 기구에 비해 그다지 지지받지 못하고 있다. Kerberos 인증은 binddn과 srvtab 변수를 필요로 한다. SASL 인증이 일반적으로 추천되는데 mech 변수를 사용하는 기구의 명세 사항을 필요로 한다. 메카니즘에 따라 인증 identity 와/또는 credentials는 각각 authcid와 credentials을 사용하여 지정할 수 있다. authzid 변수가 인가(authorization) identity를 지정하기 위해 사용될 수도 있다. replogfile 이 지시는 slapd가 변경사항들을 기록할 복사본 로그 파일의 이름을 지정한다. replication 로그파일은 일반적으로 slapd에 의해 작성되며 slurpd에 의해 읽혀진다. 보통 이 지시는 slurpd가 데이터베이스를 복사하기 위해 사용되는 경우만 사용된다. 그러나 slurpd가 작동되지 않더라도 트랜잭션(transaction) 로그를 생성하기 위해 이를 사용할 수 있다. 이 경우 파일이 무한정 커질 수 있기 때문에 주기적으로 파일을 truncate할 필요가 있다. rootdn 이 지시는 데이터베이스에서 작업을 하기 위한 엑세스 제어 또는 관리상의 한계 제한을 필요로 하지않는 DN을 지정한다. DN은 디렉토리의 엔트리를 참조할 필요가 없다. DN은 SASL identity를 참조할 수 있다. Entry-based Example: rootdn "cn=Manager, dc=example, dc=com" SASL-based Example: rootdn "uid=root@EXAMPLE.COM" rootpw 이 지시는 주어진 DN을 가진 엔트리가 존재하는지 또는 패스워드를 갖는지에 상관없이 위에서 주어진 DN에 대해 항상 작용할 패스워드를 지정한다. 이 지시는 SASL에 기초한 인증에 비해 그다지 지지받지 못하고 있다. 예: rootpw secret suffix 이 지시는 백엔드 데이터베이스에 보내질 질의의 DN 접미사를 지정한다. 다중 접미사 라인이 주어질 수 있으며 각 데이터베이스 정의를 위해 적어도 하나가 필요하다. 예: suffix "dc=example, dc=com" "dc=example, dc=com"로 끝나는 질의가 이 백엔로 보내질 것이다. Note: 질의를 넘겨줄 백엔드가 선택될 때 각 데이터베이스 정의에서 주어진 순서대로 suffix 라인을 찾는다. 따라서 한 데이터베이스 suffix가 다른 것의 prefix라면 config 파일에서 나중에 나타나야 한다. updatedn 이 지시는 단지 slave slapd에만 해당된다. 이는 replica 변경이 허용된 DN을 지정한다. 이는 replica를 변경할 때 slurpd(8)가 bind할 DN 또는 SASL identity와 관련된 DN 일 수 있다. Entry-based Example: updatedn "cn=Update Daemon, dc=example, dc=com" SASL-based Example: updatedn "uid=slurpd@EXAMPLE.COM" updateref 이 지시는 단지 slave slapd 에만 해당된다. 이는 replica에 대한 갱신 요청을 제출하는 클라이언트에 답변하는 URL을 지정한다. 여러번 지정하려면 각각의 URL을 놓는다. 예: update ldap://master.example.net 3.5. LDBM 백엔드 특정적 지시 이 항목의 지시는 단지 LDBM 백엔 데이터베이스에 적용되며 "database ldbm" 라인 뒤 및 어떤 다른 "database" 라인 앞에 놓여야 한다. cachesize 이 지시는 LDBM 백엔드 데이터베이스 인스턴스에 의해 유지되는 in-memory cache 엔트리의 크기를 지정한다. Default: cachesize 1000 dbcachesize 이 지시는 각 오픈 인덱스 파일과 관련된 in-memory cache의 바이트 크기를 지정한다. 기본적인 데이터베이스 방법이 지원하지 않는다면 주석처리없이 무시된다. 이 숫자의 증가는 더많은 메모리 사용을 의미하지만 특히 인덱스 변경중 또는 구축할 때 효과적인 성능향상을 가져올 것이다. Default: dbcachesize 100000 dbnolocking 이 옵션은 존재한다면 데이터베이스 locking 기능을 억제한다. 이 옵션을 작동시키면 데이터 보안을 낮추면서 성능을 향상시킬 것이다. dbnosync 이 옵션은 디스크상의 데이터베이스 내용이 메모리내에서 바뀌는 변경에 즉각적으로 동기화되지 않도록 한다. 이 옵션의 활성화는 데이터 보안을 낮추지만 성능을 향상시킬 것이다. directory 이 지시는 데이터베이스와 관련 인덱스를 포함하는 LDBM 파일이 놓이는 디렉토리를 지정한다. Default: directory /usr/local/var/openldap-ldbm index { | default} [pres,eq,approx,sub,none] 이 지시는 주어진 속성에 대해 유지할 인덱스를 지정한다. 단지 가 주어진다면 디폴트 인덱스가 유지된다. 예: index default pres,eq index objectClass,uid index cn,sn eq,sub,approx 첫 번째 라인은 present와 equality에 유지할 디폴트 인덱스 집합을 설정한다. 두 번째 라인은 디폴트(pret,eq) 인덱스 집합이 objectClass와 uid 속성 형태를 위해 유지되도록 한다. 세 번째 라인은 equality, substring와 approximate 인덱스들이 cn과 sn 속성 형태를 위해 유지되도록 한다. mode 이 지시는 새로이 생성된 데이터베이스 인덱스 파일이 가져야 하는 파일 보호 모드를 지정한다. Default: mode 0600 3.6. 다른 백엔드 데이타베이스 slapd는 디폴트 LDBM 이외에도 많은 백엔드 데이터베이스 형태를 지원한다: o ldbm: Berkeley or GNU DBM compatible backend o passwd: Provides read-only access to /etc/passwd o shell: Shell (extern program) backend o sql: SQL Programmable backend 세부사항을 알기 위해서는 slapd.conf(5) 매뉴얼 페이지를 보길 바란다. 3.7. 엑세스 제어 예 ``3.2절''에 설명한 엑세스 제어 지시는 매우 강력한데 이 절은 엑세스 제어 사용의 몇 예를 보여준다. 우선, 약간의 간단한 예들: access to * by * read 이 엑세스 지시는 모든 사람에게 읽기 엑세스를 허용한다. 이 지시가 단독으로 나타나면 다음의 defaultaccess 라인과 같다. defaultaccess read 다음 예는 순서가 중요한 두 엑세스 지시에서 DN에 의해 엔트리를 선택하는 정규 표현 사용의 예를 보여준다. access to dn=".*, o=U of M, c=US" by * search access to dn=".*, c=US" by * read 검색 엑세스가 허용된 "o=University of Michigan, c=US" 하위 트리하의 엔트리를 제외한 c=Us 하위 트리하의 엔트리에 읽기 엑세스가 허용된다. 이러한 엑세스 지시의 순서가 반전되면, 모든 U-M 엔트리와 c=US 엔트리가 동일하기 때문에 U-M 특정적 지시는 절대로 부합될 수 없다. 다음 예 또한 엑세스 지시와 "by" 절(clause)의 순서의 중요성을 보여주는데 특정 속성과 다양한 선택자에 대한 엑세스를 허용하는 속성 선택자 사용의 예를 보여준다. access to dn=".*, o=U of M, c=US" attr=homePhone by self write by dn=".*, o=U of M, c=US" search by domain=.*\.umich\.edu read by * compare access to dn=".*, o=U of M, c=US" by self write by dn=".*, o=U of M, c=US" search by * none 이 예는 "o=U of M, c=US" 하부 트리내의 엔트리에 적용된다. homePhone를 제외한 모든 속성들에 대해 엔트리가 속성들을 쓸 수 있고, 다른 U-M 엔트리는 속성들에 의해 검색되며 어느 누구도 엑세스를 하지 못한다. homePhone 속성은 엔트리에 의해 쓸 수 있고, 다른 U-M 엔트리에 의해 검색할 수 있고, umich.edu 도메인 상에서 연결하는 클라이언트에 의해 읽을 수 있고, 다른 모든 사람에 의해 비교할 수 있다. 때때로 특정 DN에 자신의 속성을 추가 또는 삭제할 수 있는 권한을 주는 것이 유용하다. 예를 들어 그룹을 생성해서 사람들로 하여금 member 속성에서 그들 소유의 DN을 추가 및 삭제할 수 있게 허용하고 싶다면 다음의 엑세스 지시를 이용해 수행할 수 있다: access to attr=member,entry by dnattr=member selfwrite dnattr 선택자는 엑세스가 member 속성에 리스트된 엔트리에 적용됨을 말해준다. selfwrite 엑세스 선택자는 그 member들이 다른 값을 제외한 그들의 DN 값만을 속성에 추가 및 삭제할 수 있음을 말해준다. 어떤 엔트리 속성의 엑세스를 위해서는 엔트리 엑세스가 필요하기 때문에 엔트리 속성의 추가가 필요하다. 절에서 attr=member 는 "dn=* attr=member" 절(즉 이것은 모든 엔트리에 member 속성과 부합된다)의 속기임을 주목하기 바란다. Note:Ldap의 엑세스 제어에 대해 더 많은 것을 배우기 위해 의 OpenLDAP 관리자 지침을 보라. 3.8. 설정 파일 예 다음은 설명 텍스트가 들어있는 설정 파일 예제이다. 이는 X.500 트리의 여러 부분들을 다루기 위해 LDBM 데이타베이스 인스턴스인 두 개의 데이터베이스를 정의한다. 라인 숫자는 참조를 위한 것으로 실제 파일에는 없다. 우선 전역적 설정 부분: o 1. # example config file - global configuration section o 2. include /usr/local/etc/schema/core.schema o 3. referral ldap://root.openldap.org o 4. access to * by * read 라인 1은 주석이다. 라인 2는 핵심 스키마 정의를 갖는 다른 config 파일을 포함한다. 라인 3의 referral 지시는 밑에 정의된 데이터베이스 중 하나에 지역적이 아닌 질의는 root.openldap.org 호스트의 표준 포트(389)에서 작동되는 LDAP 서버를 참조할 것임을 의미한다. 라인 4는 전역적 엑세스 제어로 부합되는 데이터베이스 엑세스 제어가 없거나 또는 타겟 객체가 Root DSE와 같은 임의의 데이터베이스의 제어하에 없을때만 사용된다. 설정 파일의 다음 부분은 트리의 "dc=example,dc=com" 부분에 있는 내용에 대한 질의를 다룰 LDBM 백엔드를 정의한다. 데이터베이스는 각각 truelies와 judgementday 두 개의 slapd 에 복사될 것이다. 인덱스는 여러 속성을 위해 유지되며 userPassword 속성은 인가받지 못한 엑세스에 대해 보호된다. o 5. # ldbm definition for the example.com o 6. database ldbm o 7. suffix "dc=example, dc=com" o 8. directory /usr/local/var/openldap o 9. rootdn "cn=Manager, dc=example, dc=com" o 10. rootpw secret o 11. # replication directives o 12. replogfile /usr/local/var/openldap/slapd.replog o 13. replica host=slave1.example.com:389 o 14. binddn="cn=Replicator, dc=example, dc=com" o 15. bindmethod=simple credentials=secret o 16. replica host=slave2.example.com o 17. binddn="cn=Replicator, dc=example, dc=com" o 18. bindmethod=simple credentials=secret o 19. # indexed attribute definitions o 20. index uid pres,eq o 21. index cn,sn,uid pres,eq,approx,sub o 22. index objectClass eq o 23. # ldbm access control definitions o 24. access to attr=userPassword o 25. by self write o 26. by anonymous auth o 27. by dn="cn=Admin,dc=example,dc=com" write o 28. by * none o 29. access to * o 30. by self write o 31. by dn="cn=Admin,dc=example,dc=com" write o 32. by * read 라인 5는 주석이다. 라인 6의 데이터베이스 키워드에 의해 데이터베이스 정의가 시작된다. 라인 7은 이 데이터베이스에 보내질 질의에 대한 DN suffix를 지정한다. 라인 8은 데이터베이스 파일이 놓일 디렉토리를 지정한다. 라인 9와 10은 데이터베이스 "super user" 엔트리와 관련 패스워드를 지정한다. 이 엔트리는 엑세스 제어 또는 크기 또는 시간 한계 제한을 필요로 하지 않는다. 라인 11-18은 복사본에 대한 것으로 라인 11은 복사본 로그 파일을 지정한다 (데이터베이스에 대한 변경 사항이 기록되는데 slapd 에 의해 쓰여지고 slurpd 에 의해 읽혀진다). 라인 12-14는 복사된 호스트에 대한 호스트 네임과 포트, 갱신할때의 bind할 DN, binddn에 대해 bind 방법(간략)및 credentials(패스워드)를 지정한다. 라인 15-18은 두 번째 복사본 사이트를 지정한다. 라인20-22는 다양한 속성에 대해 유지되는 인덱스를 가리킨다. 라인 24-32는 데이터베이스내의 엔트리에 대한 엑세스 제어를 지정한다. 모든 엔트리에 대해 userPassword는 엔트리 자체 및 "admin" 엔트리에 의해 쓸 수 있다. 이는 인증/인가 목적에 사용될 수 있지만 그렇지 않은 경우 읽을 수 없다. 모든 다른 속성은 엔트리와 "admin" 엔트리에 의해 쓸 수 있지만 인증받은 사용자에 의해 읽힐 수 있다. 설정 파일 예의 다음 부분은 다른 LDBM 데이터베이스를 정의하는데 이 데이터베이스는 dc=example,dc=net 하위 트리를 포함한 질의를 처리한다. 라인 38이 없다면 라인 4에 있는 전역적 엑세스 규칙 때문에 읽기 엑세스가 허용될 수 있음을 주목하기 바란다. o 33. # ldbm definition for example.net o 34. database ldbm o 35. suffix "dc=example, dc=net" o 36. directory /usr/local/var/ldbm-example-net o 37. rootdn "cn=Manager, dc=example, dc=com" o 38. access to * by users read 4. LDAP 서버 구동하기 slapd는 스탠드 얼론 서버로서 작동되도록 설계되어 있어 서버가 캐싱 이용, 기본 데이터베이스와의 동시 작용 문제 처리 및 시스템 자원 보호를 할 수 있다. inetd(8)로부터의 작동은 옵션이 아니다. 4.1. Command Line Options slapd는 메뉴얼 페이지에 상세히 설명된 바와 같이 많은 command-line 옵션을 지원한다. 이 절은 일반적으로 자주 사용되는 약간의 옵션을 상세히 설명한다: -f 이 옵션은 slapd에 대한 대체 구성 파일을 지원한다. 디폴트는 보통 /usr/local/etc/openldap/slapd.conf 파일이다. -h 이 옵션은 대체 listener 구성을 지정한다. 디폴트는 ldap:/// 로 디폴트 LDAP포트 389의 TCP 인터페이스를 갖는 LDAP를 의미한다. 호스트-포트 쌍 및 ldaps:// 또는 ldapi:// 와 같은 다른 프로토콜 계획을 지정할 수 있다. 예를들어, -h "ldaps:// ldap:/127.0.0.1:667"은 두 개의 listener를 생성할 것이다: 하나는 디폴트 LDAP/SSL 포트 636의 모든 인터페이스에서 SSL을 이용하는 LDAP이고 다른 하나는 포트 667의 로컬 호스트(루프백,loopback)에서 TCP를 이용한 LDAP. 호스트는 IPv4 dotted-decimal 형태 또는 호스트 네임을 사용하여 지정될 수 있다. 포트값은 수치여야 한다. -n 이 옵션은 로깅과 다른 목적을 위해 사용되는 서비스 이름을 지정한다. 디폴트 서비스 이름은 slapd이다. -l 이 옵션은 syslog(8) 에 대한 로컬 사용자를 지정한다. LOCAL0, LOCAL1, LOCAL2,..., 와 LOCAL7이 값이 있다. 디폴트는 LOCAL4이다. 이 옵션은 모든 시스템에서 지원되지 않을 수 있다. -u user -g group 이 옵션들은 각각 서버를 작동하는 사용자와 그룹을 지정한다. 사용자와 그룹은 각각 사용자 및 그룹 이름과 uid 및 gid 일 수 있다. -r directory 이 옵션은 런타임 디렉토리를 지정한다. slapd는 listener을 오픈한 후 그렇지만 어떤 구성파일을 읽기 전 또는 어떤 백엔드를 초기화하기 전에 이 디렉토리로 chroot(2) 할 것이다. -d | ? 이 옵션은 slapd 디버그 레벨을 로 설정한다. 레벨이 `?' 문자일 때는 선택한 옵션에 상관없이 다양한 디버깅 레벨이 출력되며 slapd 는 종료된다. 현재 디버깅 레빌은 다음과 같다: -1 enable all debugging 0 no debugging 1 trace function calls 2 debug packet handling 4 heavy trace debugging 8 connection management 16 print out packets sent and received 32 search filter processing 64 configuration file processing 128 access control list processing 256 stats log connections/operations/results 512 stats log entries sent 1024 print communication with shell 백엔s 2048 print entry parsing debugging 각각의 원하는 레벨에 대해 디버그 옵션을 지정함으로써 다중 레벨을 작동시킬 수 있다. 또한 디버깅 레벨은 부가적이기 때문에 스스로 레벨을 계산할 수 있다. 즉, function call을 tracing 해서 config 파일이 프로세싱되는 것을 보려고 한다면 이러한 두 레벨의 합(이 경우 -d 65)으로 레벨을 설정할 수 있을 것이다. 또는 slapd 가 계산을 하도록 할 수 있다(예, -d 1 -d 64). 더 많은 세부사항을 알기 위해서는 파일을 참고하길 바란다. Note: slapd가 두 stats 레벨 이상의 임의의 디버깅 정보를 이용할 수 있도록 정의된 -DLDAP_DEBUG 옵션을 갖고 컴파일되어있어야 한다. 4.2. LDAP 서버 시작하기 일반적으로 slapd 는 다음과 같이 구동시킨다: /usr/local/etc/libexec/slapd [