이 장에서는 디렉토리 서버 구성 방법에 대해 설명합니다. dsconf 명령을 사용할 수 있습니다(dsconf(1M) 설명서 페이지 참조).
기본 방법인 디렉토리 서비스 제어 센터(Directory Service Control Center, DSCC)를 사용할 수도 있습니다. DSCC는 구성 프로세스 중에 추가 검사 작업을 수행하여 오류를 최소화할 수 있습니다. 또한 DSCC를 사용하면 서버 인스턴스의 구성을 다른 서버 인스턴스로 복사할 수 있습니다. DSCC 사용에 대한 자세한 내용은 DSCC 온라인 도움말을 참조하십시오.
디렉토리 서버 인스턴스의 구성을 표시하려면 dsconf info를 실행합니다.
$ dsconf info -h host -p port Instance path : instance path Global State : read-write Host Name : host Port : port Secure port : secure port Total entries : 20844 Suffixes : suffix-DN Dest. Servers : host:port On-Going Tasks : import Finished Tasks : backup |
위의 출력은 사용자가 대상 서버에서 접미어와 복제 계약을 만들었다고 가정합니다. 또한 진행 중인 가져오기 작업과 완료된 백업 작업이 표시됩니다.
구성을 수정하려면 DSCC를 사용하는 것이 좋습니다. 이 브라우저 인터페이스는 구성을 신속하고 효율적으로 설정할 수 있도록 도와주는 작업 기반의 컨트롤을 제공합니다. DSCC를 사용하면 한 서버에서 구성 설정을 수정한 다음 해당 구성 설정을 다른 서버로 복사할 수 있습니다. 또한 DSCC 인터페이스는 사용자를 대신하여 복잡하고 상호 종속된 구성을 관리합니다. DSCC를 사용하여 구성을 수정하는 자세한 절차는 DSCC 온라인 도움말을 참조하십시오.
명령줄 도구를 사용하는 스크립트를 작성하여 구성 작업을 자동화할 수 있습니다.
dsconf 명령을 사용하여 명령줄에서 구성을 수정합니다. 이 명령은 LDAP를 사용하여 cn=config 하위 트리를 수정합니다. dsconf에 대한 자세한 내용은 디렉토리 서버 명령줄 도구를 참조하십시오.
dsconf를 사용하여 수행할 수 없는 작업에서는 ldapmodify 명령을 사용합니다.
dsconf set-server-prop 명령을 사용하여 서버 구성 등록 정보를 수정하려면 수정 가능한 등록 정보와 해당 기본값에 대해 알고 있어야 합니다. 모든 등록 정보에 대한 도움말을 표시하려면 다음 명령을 사용합니다.
$ dsconf help-properties -v |
등록 정보 도움말에서 원하는 항목을 검색합니다. 예를 들어 UNIX 플랫폼에서 다음을 입력하여 메모리 캐시 등록 정보를 검색합니다.
$ dsconf help-properties -v | grep cache |
cn=config의 구성 항목과 허용되는 값 범위를 포함한 모든 구성 항목 및 속성에 대한 자세한 내용은 Sun Java System Directory Server Enterprise Edition 6.2 Reference를 참조하십시오.
디렉토리 서버는 모든 구성 정보를 아래 파일에 저장합니다.
instance-path/config/dse.ldif
dse.ldif 파일의 내용을 직접 편집하여 구성을 수정할 경우 오류 발생 가능성이 커지므로 바람직하지 않습니다. 이 파일을 수동으로 편집하려면 파일을 편집하기 전에 서버를 중지하고 편집을 마친 후에 다시 시작합니다.
dse.ldif 파일은 LDIF(LDAP Data Interchange Format) 형식입니다. LDIF는 항목, 속성 및 해당 값을 텍스트로 표현하며 RFC 2849(http://www.ietf.org/rfc/rfc2849)에 설명된 표준 형식입니다.
dse.ldif 파일의 디렉토리 서버 구성은 다음과 같습니다.
cn=config 항목의 속성과 값
cn=config 아래의 하위 트리에 있는 모든 항목 및 해당 속성과 값
루트 항목("") 및 cn=monitor 항목의 객체 클래스와 액세스 제어 지침. 이러한 항목의 다른 속성은 서버에서 생성됩니다.
디렉토리 서버 인스턴스를 소유한 시스템 사용자만 파일을 읽고 쓰는 권한이 있습니다.
디렉토리 서버에서는 LDAP를 통해 모든 구성 설정을 읽고 쓸 수 있습니다. 기본적으로 디렉토리의 cn=config 분기는 인증된 모든 사용자가 읽을 수 있지만, 쓰기는 디렉토리 관리자(cn=Directory Manager)와 cn=Administrators,cn=config 아래의 관리 권한이 있는 사용자에게만 허용됩니다. 관리 사용자는 구성 항목을 다른 디렉토리 항목처럼 보고 수정할 수 있습니다.
cn=config 항목 아래에 비구성 항목을 작성할 경우 일반 항목보다 확장성이 낮은 데이터베이스인 dse.ldif 파일에 항목이 저장되므로 바람직하지 않습니다. 따라서 많은 항목, 특히 자주 업데이트되는 항목을 cn=config에 저장하면 성능이 저하될 수 있습니다. 하지만 구성 정보를 중앙 집중화하기 위해 복제 관리자(공급자 바인드 DN) 항목과 같은 특수 사용자 항목을 cn=config 아래에 저장하는 것은 도움이 될 수 있습니다.
디렉토리 서버에는 기본 관리 사용자, 디렉토리 관리자 및 cn=admin,cn=Administrators,cn=config 사용자가 있습니다. 이러한 모든 사용자는 동일한 액세스 권한을 갖지만 cn=admin,cn=Administrators,cn=config는 ACI를 따릅니다.
이 절에서는 루트 액세스 권한이 있는 관리 사용자를 만드는 방법과 디렉토리 관리자를 구성하는 방법에 대해 설명합니다.
cn=admin,cn=Administrators,cn=config와 동일한 권한을 가진 새 관리 사용자를 만들려면 cn=Administrators,cn=config 그룹에서 새 사용자를 만듭니다. 이 그룹의 모든 사용자는 디렉토리 관리자와 동일한 액세스 권한이 허용되는 전역 ACI를 따릅니다.
DSCC를 사용하여 이 작업을 수행할 수 없습니다. 이 절차에 설명된 것처럼 명령줄을 사용하십시오.
새 관리 사용자를 만듭니다.
예를 들어 cn=Admin24,cn=Administrators,cn=config 새 사용자를 만들려면 다음을 입력합니다.
$ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w - dn: cn=admin24,cn=Administrators,cn=config changetype: add objectclass: top objectclass: person userPassword: password description: Administration user with the same access rights as Directory Manager. |
-D 옵션과 -w 옵션은 각각 이 항목을 작성할 수 있는 권한이 있는 사용자의 바인드 DN과 비밀번호를 제공합니다.
디렉토리 관리자는 UNIX 시스템의 root 사용자와 비슷한 권한이 있는 서버 관리자입니다. 액세스 제어는 디렉토리 관리자에게 적용되지 않습니다.
대부분의 관리 작업에서는 디렉토리 관리자를 사용할 필요가 없습니다. 대신 cn=admin,cn=Administrators,cn=config 사용자나 cn=Administrators,cn=config 아래에 만든 다른 사용자를 사용할 수 있습니다. 복제 복구, tombstone 검색 등과 같은 복제 문제 해결 작업과 루트 ACI 변경 작업에서만 디렉토리 관리자가 필요합니다.
디렉토리 관리자 DN과 비밀번호를 변경하고 비밀번호를 자동으로 읽어올 수 있는 파일을 만들 수도 있습니다.
DSCC를 사용하여 이 작업을 수행할 수 없습니다. 이 절차에 설명된 것처럼 명령줄을 사용하십시오.
기존 디렉토리 관리자 DN을 찾습니다.
$ dsconf get-server-prop -h host -p port root-dn root-dn:cn=Directory Manager |
필요한 경우 디렉토리 관리자 설정을 수정합니다.
디렉토리 관리자 DN을 수정하려면 다음을 입력합니다.
$ dsconf set-server-prop -h host -p port root-pwd-file:new-root-dn-password-file |
디렉토리 관리자 DN에 공백이 있는 경우 따옴표를 사용합니다. 예를 들면 다음과 같습니다.
$ dsconf set-server-prop -h host1 -p 1389 root-dn:"cn=New Directory Manager" |
디렉토리 관리자 비밀번호를 변경하려면 다음을 입력합니다.
$ dsconf set-server-prop -h host -p port root-pwd:new-root-dn-password |
보안상 일반 텍스트 비밀번호를 명령줄 인수로 전달하지 않으려면 비밀번호 설정을 위한 임시 파일을 만듭니다.
$ echo password > /tmp/pwd.txt |
이 파일을 읽고 나중에 사용하기 위해 비밀번호를 저장합니다. 서버 루트 비밀번호 파일 등록 정보를 설정합니다.
$ dsconf set-server-prop -h host -p port root-pwd-file:/tmp/pwd.txt |
이 명령은 서버에 비밀번호 파일을 읽으라는 메시지를 표시합니다. 비밀번호 파일 등록 정보를 설정한 후 임시 비밀번호 파일을 제거합니다.
$ rm /tmp/pwd.txt |
루트 디렉토리 서버 항목(길이가 0인 DN ""을 사용한 기본 객체 검색에서 반환되는 항목)과 cn=config, cn=monitor 및 cn=schema 아래의 하위 트리에는 디렉토리 서버에서 자동으로 생성되는 액세스 제어 지침(ACI)이 포함되어 있습니다. 이러한 ACI는 디렉토리 항목에 대한 사용자 비밀번호를 결정하는 데 사용됩니다. 이 ACI는 평가용으로 충분합니다. 그러나 작업 환경 배포를 위해서는 액세스 제어 요구 사항을 평가하여 자체 액세스 제어를 설계해야 합니다.
보안상 하나 이상의 추가 하위 트리를 숨겨서 구성 정보를 보호하려면 DIT에 추가 ACI를 저장해야 합니다.
숨기려는 하위 트리의 맨 밑에 있는 항목에 ACI 속성을 저장합니다.
namingContexts 속성의 루트 DSE 항목에 ACI를 저장합니다. namingContexts라는 루트 DSE 항목 속성에는 각 디렉토리 서버 데이터베이스에 대한 기본 DN 목록이 포함되어 있습니다.
cn=config 및 cn=monitor 하위 트리에 ACI를 저장합니다. 하위 트리 DN은 cn=config 및 cn=monitor 아래의 매핑 트리 항목에도 저장됩니다.
ACI 만들기에 대한 자세한 내용은 6 장, 디렉토리 서버 액세스 제어을 참조하십시오.
이 절에서는 DSCC 구성에 관한 다음 정보에 대해 설명합니다.
일반 에이전트 컨테이너 포트 번호 기본값은 11162입니다. 일반 에이전트 컨테이너는 DSCC 에이전트 포트를 jmxmp-connector-port로 정의합니다. 관리상 DSCC 에이전트 및 일반 에이전트 컨테이너에 다른 포트 번호를 사용해야 하는 경우 다음 절차를 수행합니다.
DSCC를 사용하여 이 작업을 수행할 수 없습니다. 이 절차에 설명된 것처럼 명령줄을 사용하십시오.
루트로 jmxmp-connector-port에 대한 기존 포트 번호를 확인합니다.
$ su Password: # cacaoadm list-params ... jmxmp-connector-port=11162 ... |
DSCC 에이전트 포트 번호를 변경합니다.
DSCC 에이전트 포트 번호를 변경할 때 일반 에이전트 컨테이너를 중지해야 합니다.
# cacaoadm stop # cacaoadm set-param jmxmp-connector-port=new-port # cacaoadm start |
이 명령의 위치는 명령 위치를 참조하십시오.
DSCC에서 서버를 등록 취소한 다음 새 DSCC 에이전트 포트 번호를 사용하여 다시 등록합니다.
또한 새 서버를 만들 경우 기본값이 아닌 DSCC 에이전트 포트 번호를 지정해야 합니다.
디렉토리 서비스 관리자 비밀번호를 재설정하려면 이 절차에 설명된 것처럼 DSCC를 사용합니다.
DSCC에 액세스하는 방법에 설명된 것처럼 DSCC에 액세스합니다.
설정 탭을 클릭한 다음 디렉토리 서비스 관리자를 선택합니다.
비밀번호를 변경할 디렉토리 서비스 관리자의 이름을 클릭합니다.
등록 정보 화면에 새 비밀번호를 입력합니다.
비밀번호 확인 필드에 새 비밀번호를 다시 입력하여 확인합니다. 확인을 눌러 변경 사항을 저장합니다.
일정 시간 후에 DSCC 세션 시간이 초과되고 DSCC에서 로그아웃됩니다. 시간 초과 지연을 확장하려면 다음 절차를 수행합니다. 이 절차에서는 DSCC와 Sun Java Web Console의 모든 다른 응용 프로그램에 대한 시간 초과를 확장합니다.
DSCC를 사용하여 이 작업을 수행할 수 없습니다. 이 절차에 설명된 것처럼 명령줄을 사용하십시오.
# wcadmin add -p -a ROOT session.timeout.value=mm |
여기서 mm은 시간이 초과되기 전의 시간(분)입니다.
예를 들어 시간 초과를 2시간으로 설정하려면 다음을 입력합니다.
$ su Password: # wcadmin add -p -a ROOT session.timeout.value=120 Set 1 properties for the ROOT application. # wcadmin list -p Shared service properties (name, value): session.timeout.value 120 ... |
Sun Java Web Console을 다시 시작합니다.
# smcwebserver restart Shutting down Sun Java(TM) Web Console Version 3.0.2 ... Starting Sun Java(TM) Web Console Version 3.0.2 ... The console is running. |
이 명령의 위치는 명령 위치를 참조하십시오.
DSCC는 DSCC에 등록된 서버를 표시합니다.
DSCC를 설치한 시스템이 실패할 경우 DSCC를 다른 시스템에 설치한 다음 서버를 다시 등록할 수 있습니다. 그러나 이 방법은 시간이 오래 걸릴 수 있습니다. DSCC를 통해 서버에 즉시 액세스하려면 DSCC 페일오버를 구성할 수 있습니다.
DSCC 페일오버를 구성하려면 다음을 고려하십시오.
등록된 서버에 대한 모든 정보가 DSCC 레지스트리에 저장됩니다. 이 레지스트리는 디렉토리 서버 인스턴스입니다. dsadm 및 dsconf 관리 명령을 사용하여 레지스트리를 관리할 수 있습니다.
DSCC 레지스트리의 기본 특징은 다음과 같습니다.
Solaris — /var/opt/SUNWdsee/dscc6/dcc/ads
Linux 및 HP-UX — /var/opt/sun/dscc6/dcc/ads
Windows — C:\Program Files\Sun\DSEE\var\dscc6\dcc\ads
cn=dscc
LDAP 3998, LDAPS 3999
DSCC를 두 대 이상의 컴퓨터에 설치한 후 DSCC 레지스트리 접미어 간의 복제를 설정할 수 있습니다. 10 장, 디렉토리 서버 복제에 설명된 복제 명령줄 절차를 사용합니다. 간단한 복제 구성 설정에 대한 예는 dsconf(1M) 설명서 페이지를 참조하십시오.
복제를 설정한 이후에는 DSCC에 등록된 서버를 다른 컴퓨터에서 액세스할 수 있습니다. 예를 들어 host1과 host2 사이에 DSCC 레지스트리 접미어 복제를 설정한 경우 https://host1:6789 또는 https://host2:6789에서 DSCC를 사용하여 동일한 서버를 관리할 수 있습니다. 호스트가 실패할 경우 다른 호스트에서 DSCC에 액세스합니다.
DSCC 문제 해결에 대한 자세한 내용은 Sun Java System Directory Server Enterprise Edition 6.2 Installation Guide의 To Troubleshoot Directory Service Control Center Access를 참조하십시오.
DSCC 또는 dsconf set-server-prop 명령을 사용하여 사용자 디렉토리 서버의 LDAP 포트 또는 LDAPS 보안 포트 번호를 수정할 수 있습니다.
포트 번호를 변경하는 경우 다음에 주의해야 합니다.
권한이 없는 포트 번호를 설정하고, 디렉토리 서버를 다른 사용자가 액세스 권한을 갖고 있는 시스템에 설치한 경우 다른 응용 프로그램에서 해당 포트를 임의로 사용할 수 있는 위험이 있습니다. 즉 다른 응용 프로그램에서 동일한 주소/포트 쌍을 바인드할 수 있습니다. 그러면 이 응용 프로그램에서 디렉토리 서버에 대한 요청을 처리할 수 있게 됩니다. 즉, 이 응용 프로그램을 사용하여 인증 프로세스에 사용된 비밀번호를 수집하거나, 서버 응답에 대한 클라이언트 요청을 변경하거나, 서비스 거부 공격을 생성할 수 있습니다. 이러한 보안 위험을 방지하려면 listen-address 또는 secure-listen-address 속성을 사용하여 디렉토리 서버가 수신하는 인터페이스(주소)를 지정합니다.
명령줄을 사용하여 포트 번호를 변경할 경우 다음에 주의해야 합니다.
디렉토리 서버가 다른 서버에 정의되어 있는 복제 계약에 언급되어 있는 경우 해당 복제 계약을 업데이트하여 새 포트 번호를 사용하도록 해야 합니다.
이전에 DSCC를 사용하여 서버를 관리한 경우 포트 번호를 변경하고 나면 서버를 일시적으로 볼 수 없습니다. 서버를 다시 보려면 서버를 등록 해제한 다음 새 포트 번호를 사용하여 DSCC에서 다시 등록해야 합니다.
DSCC를 사용하여 이 작업을 수행할 수 있습니다. 자세한 내용은 디렉토리 서비스 제어 센터 인터페이스 및 DSCC 온라인 도움말을 참조하십시오.
수정한 후에는 서버를 다시 시작하여 변경 사항을 적용해야 합니다.
포트에 대한 기존 설정을 확인합니다.
$ dsconf get-server-prop -h host -p port port-type |
여기서 port-type은 다음 중 하나입니다.
LDAP 기본 포트
LDAPS 보안 포트
DSML 기본 포트
DSML 보안 포트
예를 들어 LDAPS 보안 포트를 표시하려면 다음을 입력합니다.
$ dsconf get-server-prop -h host1 -p 2501 ldap-secure-port Enter "cn=Directory Manager" password: ldap-secure-port : 2511 |
반환된 결과가 정수이면 포트가 사용 가능하게 됩니다. 반환된 결과가 disabled이면 포트가 사용 불가능하게 됩니다.
dsadm을 사용하여 LDAP 기본 포트와 LDAPS 보안 포트를 나열할 수도 있습니다.
필요한 경우 포트 번호를 수정하거나 포트를 사용 가능하게 합니다.
$ dsconf set-server-prop -h host -p port port-type:new-port |
예를 들어 LDAP 포트 번호를 1389에서 1390으로 변경하려면 다음 명령을 사용합니다.
$ dsconf set-server-prop -h host1 -p 1389 ldap-port:1390 |
DSML 보안 포트를 포트 번호 2250에서 사용 가능하게 하려면 다음 명령을 사용합니다.
$ dsconf set-server-prop -h host1 -p 1389 dsml-secure-port:2250 |
필요한 경우 포트를 사용 불가능하게 합니다.
$ dsconf set-server-prop -h host -p port port-type:disabled |
예를 들어 DSML 보안 포트를 사용 불가능하게 하려면 다음 명령을 사용합니다.
$ dsconf set-server-prop -h host1 -p 1389 dsml-secure-port:disabled |
디렉토리 서버는 LDAP(Lightweight Directory Access Protocol) 요청을 처리하는 동시에 Directory Service Markup Language 버전 2(DSMLv2)로 받은 요청에도 응답합니다. DSML은 클라이언트에서 디렉토리 작업을 인코딩하는 또 다른 방법입니다. 서버는 다른 요청과 마찬가지로 모든 액세스 제어 및 보안 기능을 사용하여 DSML을 처리합니다. DSML 처리는 많은 유형의 클라이언트가 디렉토리 내용에 액세스할 수 있도록 도와줍니다.
디렉토리 서버는 HTTP(Hypertext Transfer Protocol/1.1)를 통해 DSMLv2를 지원하며 SOAP(Simple Object Access Protocol) 버전 1.1을 DSML 내용 전송을 위한 프로그래밍 프로토콜로 사용합니다. 이러한 프로토콜에 대한 자세한 내용과 DSML 요청에 대한 예는 Sun Java System Directory Server Enterprise Edition 6.2 Reference의 10 장, Directory Server DSMLv2를 참조하십시오.
이 절은 다음 내용으로 구성되어 있습니다.
DSCC를 사용하여 이 작업을 수행할 수 있습니다. 자세한 내용은 디렉토리 서비스 제어 센터 인터페이스 및 DSCC 온라인 도움말을 참조하십시오.
DSML 모드를 on으로 설정합니다.
$ dsconf set-server-prop -h host -p port dsml-enabled:on |
보안 DSML 포트를 설정합니다.
$ dsconf set-server-prop -h host -p port dsml-secure-port:port |
비보안 DSML 포트를 설정합니다.
$ dsconf set-server-prop -h host -p port dsml-port:port |
기본적으로 이 포트는 disabled로 설정됩니다.
서버를 다시 시작합니다.
$ dsadm restart instance-path |
정의한 매개 변수와 속성 값에 따라 DSML 클라이언트는 아래 URL을 사용하여 이 서버로 요청을 보낼 수 있습니다.
http://host:DSML-port/ relative-URL
https://host:secure-DSML-port /relative-URL
relative-URL은 dsml-relative-root-url 등록 정보를 사용하여 읽고 설정할 수 있습니다.
DSCC를 사용하여 이 작업을 수행할 수 있습니다. 자세한 내용은 디렉토리 서비스 제어 센터 인터페이스 및 DSCC 온라인 도움말을 참조하십시오.
DSML 모드를 off로 설정합니다.
$ dsconf set-server-prop -h host -p port dsml-enabled:off |
보안 DSML 포트를 disabled로 설정합니다.
$ dsconf set-server-prop -h host -p port dsml-secure-port:disabled |
서버를 다시 시작합니다.
$ dsasm restart instance-path |
DSML 요청을 승인하는 데 필요한 보안 수준을 구성할 수 있습니다. 이 작업을 수행하려면 DSML 클라이언트 인증을 구성해야 합니다.
DSML 클라이언트 인증 모드를 설정합니다.
$ dsconf set-server-prop -h host -p port dsml-client-auth-mode:dsml-mode |
기본적으로 dsml-client-auth-mode 등록 정보는 client-cert-first로 설정됩니다.
dsml-mode는 다음 중 하나입니다.
http-basic-only - 기본값입니다. 서버에서 HTTP 인증 헤더의 내용을 사용하여 디렉토리 항목에 매핑할 수 있는 사용자 이름을 찾습니다. 이 프로세스와 해당 구성은 SSL을 통해 암호화되지만 클라이언트 인증은 사용되지 않습니다. 자세한 내용은 DSML 아이디 매핑을 참조하십시오.
client-cert-only - 서버에서 클라이언트 인증서의 자격 증명을 사용하여 클라이언트를 확인합니다. 이렇게 설정하면 모든 DSML 클라이언트가 보안 HTTPS 포트를 통해 DSML 요청을 보내고 인증서를 제공해야 합니다. 서버는 클라이언트 인증서가 디렉토리 항목과 일치하는지 확인합니다. 자세한 내용은 5 장, 디렉토리 서버 보안을 참조하십시오.
client-cert-first - 서버에서 먼저 제공된 클라이언트 인증서를 사용하여 클라이언트 인증을 시도합니다. 클라이언트 인증서가 제공되지 않은 경우 서버는 인증 헤더의 내용을 사용하여 클라이언트를 인증합니다.
HTTP 요청에 인증서와 인증 헤더가 모두 없으면 서버는 익명 바인드를 사용하여 DSML 요청을 처리합니다. 익명 바인드는 다음과 같은 경우에도 사용됩니다.
client-cert-only 값을 지정할 때 클라이언트에서 인증 헤더만 제공하고 인증서는 제공하지 않는 경우
http-basic-only 값을 지정할 때 클라이언트에서 인증서만 제공하고 인증 헤더는 제공하지 않는 경우
인증서가 제공되었지만 항목에 일치시킬 수 없는 경우나 HTTP 인증 헤더가 지정되었지만 사용자 항목으로 매핑할 수 없는 경우에는 클라이언트 인증 방법에 상관없이 오류 메시지 403: "금지됨"이 표시되며 DSML 요청이 거부됩니다.
인증서 없이 기본 인증을 수행하는 경우 디렉토리 서버는 아이디 매핑이라는 메커니즘을 사용하여 DSML 요청을 승인할 때 사용할 바인드 DN을 지정합니다. 이 기법은 HTTP 요청의 인증 헤더에서 필요한 정보를 추출하여 바인드에 사용할 아이디를 확인합니다.
DSML/HTTP에 대한 기본 아이디 매핑은 다음과 같은 서버 구성 항목을 통해 지정됩니다.
dn: cn=default,cn=HTTP-BASIC,cn=identity mapping,cn=config objectClass: top objectClass: nsContainer objectClass: dsIdentityMapping cn: default dsSearchBaseDN: ou=people dsSearchFilter: (uid=${Authorization})
이 구성에서 서버는 디렉토리 서버 접미어에 저장된 DN에 대한 uid 값으로 HTTP 사용자 아이디를 사용해야 합니다. 예를 들어 HTTP 사용자가 bjensen인 경우 서버는 uid=bjensen,ou=people DN을 사용하여 바인딩을 실행하려고 합니다.
매핑이 제대로 작동하려면 dsSearchBaseDN 값을 완료해야 합니다. 예를 들어 dsSearchBaseDN 값을 ou=people,dc=example,dc=com으로 변경할 수 있습니다. HTTP 사용자가 bjensen인 경우 서버는 uid=bjensen,ou=people,dc=example,dc=com DN을 사용하여 바인딩을 실행하려고 합니다.
dn: cn=default,cn=HTTP-BASIC,cn=identity mapping,cn=config objectClass: top objectClass: nsContainer objectClass: dsIdentityMapping cn: default dsSearchBaseDN: ou=people,dc=example,dc=com dsSearchFilter: (uid=${Authorization})
dsSearchFilter 매핑 항목 속성에 ${header} 형식의 자리 표시자를 사용할 수도 있습니다. 여기서 header는 HTTP 헤더의 이름입니다.
DSML 매핑에 사용되는 가장 일반적인 헤더는 다음과 같습니다.
이 문자열은 HTTP 인증 헤더에 포함된 사용자 이름으로 바뀝니다. 인증 헤더에는 사용자 이름과 비밀번호가 모두 포함되어 있지만 이 자리 표시자는 사용자 이름으로만 바뀝니다.
이 문자열은 HTTP From 헤더에 포함된 전자 메일 주소로 바뀝니다.
이 문자열은 DSML 요청의 URL에 포함된 서버의 호스트 이름 및 포트 번호로 바뀝니다.
DSML 요청에 다른 종류의 아이디 매핑을 사용하려면 다음과 같이 HTTP 헤더에 대한 새 아이디 매핑을 정의합니다.
기본 DSML-over-HTTP 아이디 매핑을 편집하거나 이 프로토콜에 대한 사용자 정의 매핑을 작성합니다.
매핑 항목은 cn=HTTP-BASIC,cn=identity mapping,cn=config 항목 아래에 있어야 합니다.
ldapmodify를 사용한 항목 추가에 설명된 것처럼 ldapmodify 명령을 사용하여 명령줄에서 이 항목을 추가합니다.
새 매핑을 적용하려면 디렉토리 서버를 다시 시작합니다.
사용자 정의 매핑이 먼저 평가됩니다. 사용자 정의 매핑이 실패한 경우 기본 매핑이 평가됩니다. 모든 매핑을 평가한 후에도 DSML 요청에 대한 바인드 DN을 확인하지 못하면 이 DSML 요청은 금지되어 거부됩니다(오류 403).
디렉토리의 각 접미어는 읽기 전용 모드로 설정할 수 있으며 정의된 특정 참조를 반환할 수 있습니다. 또한 디렉토리 서버는 모든 접미어에 적용되는 서버 읽기 전용 모드를 제공하며 정의된 전역 참조를 반환할 수도 있습니다.
서버 읽기 전용 모드를 사용할 경우 관리자는 접미어를 다시 색인화하는 등의 작업을 수행하는 동안 디렉토리 내용이 수정되는 것을 방지할 수 있습니다. 이 때문에 다음과 같은 구성 분기에는 서버 읽기 전용 모드가 적용되지 않습니다.
cn=config
cn=monitor
cn=schema
이러한 분기는 읽기 전용으로 설정되어 있지 않더라도 관리자 이외의 사용자가 수정할 수 없도록 항상 ACI(Access Control Intstruction)를 사용하여 보호해야 합니다(6 장, 디렉토리 서버 액세스 제어 참조). 전역 읽기 전용 모드는 디렉토리 관리자가 시작한 업데이트 작업을 포함하여 디렉토리의 다른 모든 접미사에 대한 업데이트 작업을 방지합니다.
읽기 전용 모드를 사용하면 접미어에 대한 복제도 중단됩니다. 읽기 전용 모드를 사용하기 전의 변경 사항은 계속 복제되지만 더 이상 마스터 복제본에 복제할 변경 사항이 추가되지 않습니다. 읽기 전용 모드를 사용 불가능하게 할 때까지 소비자 복제본도 업데이트를 받지 못합니다. 다중 마스터 복제 환경에서는 마스터에 복제할 변경 사항이 추가되지 않을 뿐만 아니라 다른 마스터의 업데이트를 받을 수도 없습니다.
DSCC를 사용하여 이 작업을 수행할 수 있습니다. 자세한 내용은 디렉토리 서비스 제어 센터 인터페이스 및 DSCC 온라인 도움말을 참조하십시오.
전역 읽기 전용 모드를 사용 가능하게 합니다.
$ dsconf set-server-prop -h host -p port read-write-mode:read-only |
준비가 되면 읽기 전용 모드를 사용 불가능하게 합니다.
$ dsconf set-server-prop -h host -p port read-write-mode:read-write |
이 절에서는 다양한 유형의 메모리를 관리하는 방법에 대해 설명합니다. 다양한 유형의 캐시와 캐시 조정에 대한 자세한 내용은 Sun Java System Directory Server Enterprise Edition 6.2 Reference의 5 장, Directory Server Data Caching을 참조하십시오.
캐시 초기화란 이후의 디렉토리 서버 동작이 램프 업(ramp up)이 아니라 정상적인 작동 성능을 반영하도록 캐시에 데이터를 채우는 것을 의미합니다. 캐시 초기화를 사용하면 벤치마킹에서 재생 가능한 결과에 도달하고 잠재적인 최적화를 측정 및 분석할 수 있습니다.
가능하면 캐시를 초기화하지 마십시오. 성능을 측정하기 전에 디렉토리 서버와의 일반적인 상호 작용을 통해 캐시가 초기화되도록 합니다.
데이터베이스 캐시 초기화 도구는 http://www.slamd.com에서 확인할 수 있습니다.
캐시를 수정하면 서버 성능에 심각한 영향을 줄 수 있습니다. 따라서 캐시를 수정할 경우 주의하십시오.
DSCC를 사용하여 이 작업을 수행할 수 있습니다. 자세한 내용은 디렉토리 서비스 제어 센터 인터페이스 및 DSCC 온라인 도움말을 참조하십시오.
현재 데이터베이스 캐시 수준을 확인합니다.
$ dsconf get-server-prop -h host -p port db-cache-size |
데이터베이스 캐시 수준을 변경합니다.
$ dsconf set-server-prop -h host -p port db-cache-size:size |
여기서 size는 GB(G), MB(M), KB(k) 또는 바이트(b)로 표시할 수 있습니다. 사용자가 지정한 크기는 시스템에서 지원해야 합니다.
설치 시 기본 캐시 수준은 작업 환경이 아니라 테스트 환경에 적합합니다. 조정을 위해 서버의 데이터베이스 캐시를 모니터할 수 있습니다.
DSCC를 사용하여 이 작업을 수행할 수 있습니다. 자세한 내용은 디렉토리 서비스 제어 센터 인터페이스 및 DSCC 온라인 도움말을 참조하십시오.
데이터베이스 캐시를 모니터합니다.
$ ldapsearch -h host -p port -D cn=admin,cn=Administrators,cn=config -w - \ -b "cn=monitor,cn=ldbm database,cn=plugins,cn=config" "(objectclass=*)" |
데이터베이스 캐시가 충분히 크고 캐시가 초기화되면 적중률(dbcachehitratio)이 높아야 합니다. 또한 읽은 페이지 수(dbcachepagein)와 기록되는 클린 페이지 수(dbcacheroevict)는 작아야 합니다. 여기서 "높음"과 "낮음"은 배포 제약 조건에 상대적인 의미입니다.
조정을 위해 항목 캐시에서 하나 이상의 접미어를 확인할 수 있습니다. 항목 캐시 수준을 보려면 다음 절차를 수행합니다.
DSCC를 사용하여 이 작업을 수행할 수 있습니다. 자세한 내용은 디렉토리 서비스 제어 센터 인터페이스 및 DSCC 온라인 도움말을 참조하십시오.
항목 캐시를 모니터합니다.
$ ldapsearch -h host -p port -D cn=admin,cn=Administrators,cn=config -w - \ -b "cn=monitor,cn=db-name,cn=ldbm database,cn=plugins,cn=config" "(objectclass=*)" |
접미어를 위한 항목 캐시가 접미어에 있는 대부분의 항목을 보관하는 데 충분한 크기이고 캐시가 초기화되면 적중률(entrycachehitratio )이 높아야 합니다.
캐시를 초기화한 경우 이전에 비어 있던 항목 캐시가 채워질수록 항목 캐시 크기(currententrycachesize)는 최대 항목 캐시 크기(maxentrycachesize)에 근접하게 됩니다. 이상적인 항목의 크기(currententrycachecount)는 접미어에 있는 총 항목 수(ldapentrycachecount)와 같거나 비슷해야 합니다.
캐시를 수정하면 서버 성능에 심각한 영향을 줄 수 있습니다. 따라서 캐시를 수정할 경우 주의하십시오.
DSCC를 사용하여 이 작업을 수행할 수 있습니다. 자세한 내용은 디렉토리 서비스 제어 센터 인터페이스 및 DSCC 온라인 도움말을 참조하십시오.
현재 항목 캐시 수준을 확인합니다.
$ dsconf get-suffix-prop -h host -p port suffix-DN entry-cache-count entry-cache-size |
항목 캐시 횟수를 변경합니다.
$ dsconf set-suffix-prop -h host -p port suffix-DN entry-cache-count:integer |
여기서 integer는 캐시에 저장할 항목 수입니다.
항목 캐시 크기를 변경합니다.
$ dsconf set-suffix-prop -h host -p port suffix-DN entry-cache-size:size |
여기서 size는 GB(G), MB(M), KB(k) 또는 바이트(b)로 표시되는 캐시 크기입니다. 사용자가 지정한 크기는 시스템에서 지원해야 합니다.
nsslapd 프로세스에서 사용되는 힙 메모리의 양을 제한하려면 동적 메모리 범위에 대한 임계값을 설정할 수 있습니다. 자원이 공유되거나 부족한 컴퓨터에서 디렉토리 서버를 실행하는 경우 이 임계값을 설정할 수 있습니다.
이 임계값은 Solaris 및 Linux 플랫폼에서만 설정할 수 있습니다.
메모리 크기 지정에 대한 자세한 내용은 Sun Java System Directory Server Enterprise Edition 6.2 Deployment Planning Guide의 Directory Server and Memory를 참조하십시오.
DSCC를 사용하여 이 작업을 수행할 수 없습니다. 이 절차에 설명된 것처럼 명령줄을 사용하십시오.
기본적으로 heap-high-threshold-size 및 heap-low-threshold-size 등록 정보는 undefined입니다.
최대 힙 메모리의 높은 임계값을 설정합니다.
$ dsconf set-server-prop -h host -p port heap-high-threshold-size:value |
여기서 value는 GB(G), MB(M), KB(k) 또는 바이트(b)로 표시되는 undefined 또는 메모리 크기입니다. 사용자가 지정한 크기는 시스템에서 지원해야 합니다.
heap-high-threshold-size에 대한 권장 사용 값은 server(5dsconf) 설명서 페이지를 참조하십시오.
선택 사항으로 최대 힙 메모리의 낮은 임계값을 설정합니다.
$ dsconf set-server-prop -h host -p port heap-low-threshold-size:value |
여기서 value는 GB(G), MB(M), KB(k) 또는 바이트(b)로 표시되는 undefined 또는 메모리 크기입니다. 사용자가 지정한 크기는 시스템에서 지원해야 합니다.
heap-low-threshold-size에 대한 권장 사용 값은 server(5dsconf) 설명서 페이지를 참조하십시오.
각 클라이언트 계정에 대한 서버의 검색 작업 자원 제한을 제어할 수 있습니다. 계정의 작업 속성에서 이러한 제한을 설정하면 디렉토리 서버는 클라이언트에서 디렉토리에 바인드하는 데 사용하는 계정을 기반으로 해당 제한을 적용합니다.
다음과 같은 제한을 설정할 수 있습니다.
조회 제한은 검색 작업 시 조사할 최대 항목 수를 지정합니다.
크기 제한은 검색 작업에 대해 반환되는 최대 항목 수를 지정합니다.
시간 제한은 서버에서 검색 작업 처리에 사용할 수 있는 최대 시간을 지정합니다.
유휴 시간 초과는 연결이 끊기기 전에 클라이언트 연결이 유휴 상태로 유지될 수 있는 최대 시간을 지정합니다.
기본적으로 디렉토리 관리자가 사용할 수 있는 자원에는 제한이 없습니다.
특정 사용자 계정에 대해 설정한 자원 제한은 서버측 구성에 설정된 자원 제한보다 우선적으로 적용됩니다. 이 절에서는 각 계정에 대한 자원 제한 설정에 대해 설명합니다.
이 절에 제공된 예에서는 항목 속성에서 자원 제한을 직접 설정합니다. 서비스 클래스(CoS) 메커니즘을 사용하여 계정에 대한 자원 제한을 설정할 수도 있습니다. CoS 메커니즘은 클라이언트 응용 프로그램에 대한 항목이 검색될 때 계산된 속성을 생성합니다. CoS 정의에 대한 자세한 내용은 서비스 클래스를 참조하십시오.
DSCC를 사용하여 이 작업을 수행할 수 있습니다. 자세한 내용은 디렉토리 서비스 제어 센터 인터페이스 및 DSCC 온라인 도움말을 참조하십시오.
dsconf get-server-prop 명령을 사용하여 자원 제한 서버 등록 정보를 읽습니다.
$ dsconf get-server-prop -h host -p port look-through-limit search-size-limit \ search-time-limit idle-timeout look-through-limit : 5000 search-size-limit : 2000 search-time-limit : 3600 idle-timeout : none |
출력은 검색에서 최대 5000개의 항목을 조회하여 최대 2000개의 항목을 반환하며, 서버에서 검색을 처리하는 데 최대 1시간(3600초)이 소요됨을 나타냅니다.
조회 제한을 변경합니다.
$ dsconf set-server-prop -h host -p port look-through-limit:integer |
여기서 integer는 검색 작업 시 조사할 최대 항목 수입니다.
검색 크기 제한을 변경합니다.
$ dsconf set-server-prop -h host -p port search-size-limit:integer |
여기서 integer는 검색 작업에서 반환되는 최대 항목 수입니다.
검색 시간 제한을 변경합니다.
$ dsconf set-server-prop -h host -p port serach-time-limit:integer |
여기서 integer는 검색 작업 처리에 사용할 수 있는 최대 시간입니다.
유휴 시간 초과를 변경합니다.
$ dsconf set-server-prop -h host -p port idle-timeout:integer |
여기서 integer는 연결이 끊기기 전에 클라이언트 연결이 유휴 상태로 유지될 수 있는 최대 시간입니다.