다음 이전 차례

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
<global config directives>

# 백엔 definition
백엔 <typeA>
<백엔-specific directives>

# first database definition & config directives
database <typeA>
<database-specific directives>

# second database definition & config directives
database <typeB>
<database-specific directives>

# second database definition & config directives
database <typeA>
<database-specific directives>

# 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 <what> [ by <who> <accesslevel> <control> ]+

이 지시는 한명 또는 그 이상의 요청자(<who>에 의해 지정된)에 의한 일련의 엔트리와/또는 속성(<what>에 의해
지정된)에 대한 엑세스(<accesslevel>에 의해 지정된)를 허용한다. 세부사항을 알고 싶다면 엑세스 제어 예를
보길 바란다.
attributetype <RFC2252 Attribute Type Description>
이 지시는 속성 형태를 정의한다.
defaultaccess { none | compare | search | read | write }
이 지시는 엑세스 지시가 지정되지 않았을 때 요청자에게 허용된 default 엑세스를 지정한다. 임의의
주어진 엑세스 레벨은 모든 하위 엑세스 레벨을 내포한다 (예, 읽기 엑세스는 검색과 비교를 내포하지만
쓰기를 내포하지는 않는다).

Default:
defaultaccess read
idletimeout <integer>
유휴 클라이언트 연결을 강제로 종료하기 전에 기다리는 시간(초)을 지정한다. Default로 0의값의 ideltimeout은
이 특징을 작동시키지 않는다.
include <filename>
이 지시는 현재 파일의 다음 라인을 계속 진행하기 전에 slapd 데몬이 주어진 파일로부터 부가적인 설정 정보를
읽어야 함을 지정한다. Included된 파일은 일반적인 slapd config 파일 포맷을 따라야한다. 파일은 일반적으로
스키마 명세사항(specification)을 갖고있는 파일들을 포함하기위해 사용된다.
Note: 내포 include 지시의 수에 제한이 없으며 루프(loop) 탐지가 행해지지 않기 때문에 이 지시를 사용할 때는 주의해야 한다.

loglevel <integer>

본 지시는 디버깅 보고서(statement)와 operation 통계가 syslogged(현재는 syslogd(8) LOCAL4로 로그되어있다)
되어야 하는 레벨을 지정한다. 이것이 잘 작동되도록(늘 작동되고 있는 두 통계 레벨을 제외하고) OpenLDAP를
--enable-debug(default) 옵션을 갖고 설정했어야 한다. 로그 레벨은 부가적이다. 어떤 숫자가 어떤 종류의
디버깅에 해당되는 지를 출력하기위해 -? 을 옵션과 함께 slapd를 실행시키거나 아래의 테이블을 참고하길
바란다. <integer>에 가능한 값들은 다음과 같다:

-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 <RFC2252 Object Class Description>
이 지시는 객체 클래스를 정의한다.
referral <URI>
이 지시는 요청을 처리하는 로컬 데이타베이스를 찾을수 없을 때 돌려보내는 referral을 지정한다.

예:
referral ldap://root.openldap.org

이는 non-local 질의에 대해 OpenLDAP 프로젝트의 전역 루트 LDAP 서버를 참조하라는 것을 의미한다. Smart LDAP 
클라이언트는 그 서버에 질의를 재차 요청할 것이지만, 대부분의 클라이언트는 호스트 부분과 선택적으로
구별되는 이름 부분을 포함하는 간단한 LDAP URLs을 처리하는 방법을 알려고 한다는 것을 주목하길 바란다.
sizelimit <integer>
이 지시는 검색 연산시 리턴되는 최대 엔트리수를 지정한다.

Default:
sizelimit 500
timelimit <integer>
이 지시는 slapd가 검색 요청에 답변하기위해 쓸 수 있는 최대시간(실제시간, 초)을 지정한다. 요청이 이 시간
내에 종결되지 않는다면 초과된 timelimit을 지적하는 결과가 리턴될 것이다.

Default:
timelimit 3600

3.3 일반적인 백엔드 옵션

이 절의 지시들은 오로지 그들이 정의된 백엔드에만 적용되는데 모든 종류의 백엔드가 이 지시들을 지원한다. 백엔드 지시는 같은 유형의 모든 데이터베이스 인스턴스에 적용되지만 어떤 지시냐에 따라 데이터베이스 지시에 의해 무효화될 수 있다.

backend <type>

이 지시는 백엔드 정의의 시작을 나타낸다. <type>은 ldbm, shell, passwd 또는 다른 지원되는 백엔드 유형 중
하나여야 한다.

3.4 일반적인 데이타베이스 지시

이 절의 지시들은 오로지 그들이 정의된 데이타베이스에만 적용되는데 모든 종류의 데이타베이스가 이 지시들을 지원한다.

database <type>

이 지시는 새로운 데이터베이스 인스턴스 정의의 시작을 나타낸다. <type>은 ldbm, shell, passwd 또는 다른
지원되는 백엔드 형태중의 하나여야한다.

예:
database ldbm

이는 LDBM 백엔 데이터베이스 인스턴스 정의의 시작을 나타낸다.
readonly { on | off }
이 지시는 데이터베이스를 "read-only" 모드로 만든다. 데이터베이스를 수정하려는 모든 시도는
"unwilling to perform"" 에러를 출력할 것이다.

Default:
readonly off
replica host=<hostname>[:<port>] [bindmethod={ simple | kerberos | sasl }] ["binddn=<DN>"] [mech=<mech>] [authcid=<identity>] [authzid=<identity>] [credentials=<password>] [srvtab=<filename>]
이 지시는 데이터베이스의 복사본 사이트를 지정한다. host= 변수는 호스트와 옵션으로 slave slapd 인스턴스를 
찾을 수 있는 포트를 지정한다. <hostname>에는 도메인 네임 또는 IP 주소가 사용될 수 있다. <port>가 지정되지
않으면 표준 LDAP 포트 넘버(389)가 사용된다.
binddn= 변수는 slave slapd에 갱신을 위해 bind할 DN을 준다. 이는 일반적으로 slave의 config 파일에 rootdn으로
주어지는데 slave slapd 데이터베이스에 대한 읽기/쓰기 엑세스를 갖는 DN 이어야 한다. 또한 slave slapd config
파일내의 updatedn 지시와 일치해야 한다. DN은 중간에 space를 포함할 수 있기때문에 전체 "binddn=<DN>" 문자열은
이중 인용부호로 에워싸야 한다.
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 <filename>
이 지시는 slapd가 변경사항들을 기록할 복사본 로그 파일의 이름을 지정한다. replication 로그파일은
일반적으로 slapd에 의해 작성되며 slurpd에 의해 읽혀진다. 보통 이 지시는 slurpd가 데이터베이스를 복사하기
위해 사용되는 경우만 사용된다. 그러나 slurpd가 작동되지 않더라도 트랜잭션(transaction) 로그를 생성하기
위해 이를 사용할 수 있다. 이 경우 파일이 무한정 커질 수 있기 때문에 주기적으로 파일을 truncate할
필요가 있다.
rootdn <dn>
이 지시는 데이터베이스에서 작업을 하기 위한 엑세스 제어 또는 관리상의 한계 제한을 필요로 하지않는 DN을
지정한다. DN은 디렉토리의 엔트리를 참조할 필요가 없다. DN은 SASL identity를 참조할 수 있다.

Entry-based Example:
rootdn "cn=Manager, dc=example, dc=com"

SASL-based Example:
rootdn "uid=root@EXAMPLE.COM"
rootpw <password>
이 지시는 주어진 DN을 가진 엔트리가 존재하는지 또는 패스워드를 갖는지에 상관없이 위에서 주어진 DN에 대해
항상 작용할 패스워드를 지정한다. 이 지시는 SASL에 기초한 인증에 비해 그다지 지지받지 못하고 있다.

예:
rootpw secret
suffix <dn suffix>
이 지시는 백엔드 데이터베이스에 보내질 질의의 DN 접미사를 지정한다. 다중 접미사 라인이 주어질 수 있으며
각 데이터베이스 정의를 위해 적어도 하나가 필요하다.

예:
suffix "dc=example, dc=com"

"dc=example, dc=com"로 끝나는 질의가 이 백엔로 보내질 것이다.

Note: 질의를 넘겨줄 백엔드가 선택될 때 각 데이터베이스 정의에서 주어진 순서대로 suffix 라인을 찾는다.
따라서 한 데이터베이스 suffix가 다른 것의 prefix라면 config 파일에서 나중에 나타나야 한다.
updatedn <dn>
이 지시는 단지 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 <URL>

이 지시는 단지 slave slapd 에만 해당된다. 이는 replica에 대한 갱신 요청을 제출하는 클라이언트에 답변하는
URL을 지정한다. 여러번 지정하려면 각각의 URL을 놓는다.

예: update  ldap://master.example.net

3.5 LDBM 백엔드 특정적 지시

이 항목의 지시는 단지 LDBM 백엔 데이터베이스에 적용되며 "database ldbm" 라인 뒤 및 어떤 다른 "database" 라인 앞에 놓여야 한다.

cachesize <integer>

이 지시는 LDBM 백엔드 데이터베이스 인스턴스에 의해 유지되는 in-memory cache 엔트리의 크기를 지정한다.

Default:
cachesize 1000
dbcachesize <integer>
이 지시는 각 오픈 인덱스 파일과 관련된 in-memory cache의 바이트 크기를 지정한다. 기본적인 데이터베이스
방법이 지원하지 않는다면 주석처리없이 무시된다. 이 숫자의 증가는 더많은 메모리 사용을 의미하지만 특히
인덱스 변경중 또는 구축할 때 효과적인 성능향상을 가져올 것이다.

Default:
dbcachesize 100000
dbnolocking
이 옵션은 존재한다면 데이터베이스 locking 기능을 억제한다. 이 옵션을 작동시키면 데이터 보안을 낮추면서
성능을 향상시킬 것이다.
dbnosync
이 옵션은 디스크상의 데이터베이스 내용이 메모리내에서 바뀌는 변경에 즉각적으로 동기화되지 않도록 한다.
이 옵션의 활성화는 데이터 보안을 낮추지만 성능을 향상시킬 것이다.
directory <directory>
이 지시는 데이터베이스와 관련 인덱스를 포함하는 LDBM 파일이 놓이는 디렉토리를 지정한다.

Default:
directory /usr/local/var/openldap-ldbm
index {<attrlist> | default} [pres,eq,approx,sub,none]
이 지시는 주어진 속성에 대해 유지할 인덱스를 지정한다. 단지 <attrlist>가 주어진다면 디폴트 인덱스가
유지된다.

예:
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 <integer>
이 지시는 새로이 생성된 데이터베이스 인덱스 파일이 가져야 하는 파일 보호 모드를 지정한다.

Default:
mode 0600

3.6 다른 백엔드 데이타베이스

slapd는 디폴트 LDBM 이외에도 많은 백엔드 데이터베이스 형태를 지원한다:

세부사항을 알기 위해서는 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)의 순서의 중요성을 보여주는데 특정 속성과 다양한 <who> 선택자에 대한 엑세스를 허용하는 속성 선택자 사용의 예를 보여준다.

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 <who> 선택자는 엑세스가 member 속성에 리스트된 엔트리에 적용됨을 말해준다. selfwrite 엑세스 선택자는 그 member들이 다른 값을 제외한 그들의 DN 값만을 속성에 추가 및 삭제할 수 있음을 말해준다. 어떤 엔트리 속성의 엑세스를 위해서는 엔트리 엑세스가 필요하기 때문에 엔트리 속성의 추가가 필요하다.

<what>절에서 attr=member 는 "dn=* attr=member" 절(즉 이것은 모든 엔트리에 member 속성과 부합된다)의 속기임을 주목하기 바란다.

Note:Ldap의 엑세스 제어에 대해 더 많은 것을 배우기 위해 http://openldap.org/의 OpenLDAP 관리자 지침을 보라.

3.8 설정 파일 예

다음은 설명 텍스트가 들어있는 설정 파일 예제이다. 이는 X.500 트리의 여러 부분들을 다루기 위해 LDBM 데이타베이스 인스턴스인 두 개의 데이터베이스를 정의한다. 라인 숫자는 참조를 위한 것으로 실제 파일에는 없다. 우선 전역적 설정 부분:

라인 1은 주석이다. 라인 2는 핵심 스키마 정의를 갖는 다른 config 파일을 포함한다. 라인 3의 referral 지시는 밑에 정의된 데이터베이스 중 하나에 지역적이 아닌 질의는 root.openldap.org 호스트의 표준 포트(389)에서 작동되는 LDAP 서버를 참조할 것임을 의미한다.

라인 4는 전역적 엑세스 제어로 부합되는 데이터베이스 엑세스 제어가 없거나 또는 타겟 객체가 Root DSE와 같은 임의의 데이터베이스의 제어하에 없을때만 사용된다.

설정 파일의 다음 부분은 트리의 "dc=example,dc=com" 부분에 있는 내용에 대한 질의를 다룰 LDBM 백엔드를 정의한다. 데이터베이스는 각각 truelies와 judgementday 두 개의 slapd 에 복사될 것이다. 인덱스는 여러 속성을 위해 유지되며 userPassword 속성은 인가받지 못한 엑세스에 대해 보호된다.

라인 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에 있는 전역적 엑세스 규칙 때문에 읽기 엑세스가 허용될 수 있음을 주목하기 바란다.


다음 이전 차례