이 장에서는 디렉토리의 데이터 항목을 관리하는 방법에 대해 설명합니다. 또한 참조를 설정하고 속성 값을 암호화하는 방법에 대해 설명합니다.
디렉토리 배포를 계획할 때 디렉토리에 저장할 데이터 유형을 결정해야 합니다. 항목을 만들고 기본 스키마를 수정하기 전에 Sun Java System Directory Server Enterprise Edition 6.3 Deployment Planning Guide의 관련 장을 읽어 보십시오.
디렉토리를 수정하려면 적절한 액세스 제어 지침(ACI)이 정의되어 있어야 합니다. 자세한 내용은 7 장, 디렉토리 서버 액세스 제어를 참조하십시오.
이 장은 다음 내용으로 구성되어 있습니다.
항목을 관리하는 가장 좋은 방법은 상황에 따라 다릅니다.
관리 작업에서 DSCC를 주로 사용하고, 일부 항목만 검색하거나 수정하려는 경우에는 DSCC를 사용합니다. DSCC에 대한 자세한 내용은 디렉토리 서비스 제어 센터 인터페이스를 참조하십시오.
디렉토리 서버에서 관리 작업을 수행하지 않고 일부 항목만 검색하거나 수정하려는 경우에는 디렉토리 편집기를 사용합니다. 디렉토리 편집기에 대한 자세한 내용은 Sun Java System Directory Editor 1 2005Q1 Installation and Configuration Guide를 참조하십시오.
많은 항목을 검색하거나 수정하려면 ldapmodify 및 ldapdelete 명령줄 유틸리티를 사용합니다.
DSCC을 사용하면 읽기 가능한 모든 암호화되지 않은 항목 속성을 보고, 쓰기 가능한 해당 속성을 편집할 수 있습니다. 또한, 속성을 추가하거나 제거하고 여러 값을 갖는 속성을 설정하며 항목의 객체 클래스를 관리할 수 있습니다. DSCC를 사용하여 항목을 관리하는 방법에 대한 자세한 내용은 DSCC 온라인 도움말을 참조하십시오. 일반적으로 DSCC에 대한 자세한 내용은 디렉토리 서비스 제어 센터 인터페이스를 참조하십시오.
디렉토리 편집기는 관리자와 최종 사용자가 데이터를 검색, 작성 및 편집하는 데 사용할 수 있는 간편한 디렉토리 편집 도구입니다. 이 데이터는 사용자, 그룹 및 컨테이너 형식입니다.
ldapmodify 및 ldapdelete 명령줄 유틸리티는 디렉토리 내용을 추가, 편집 및 삭제하는 모든 기능을 제공합니다. 두 유틸리티를 사용하여 서버의 구성 항목과 사용자 항목의 데이터를 모두 관리할 수 있으며, 두 개 이상의 디렉토리를 대량으로 관리하는 스크립트를 작성할 수도 있습니다.
ldapmodify 및 ldapdelete 명령은 본 설명서의 절차에서 주로 사용하는 명령입니다. 다음 절에서는 절차를 수행하는 데 필요한 기본 작업에 대해 설명합니다. ldapmodify 및 ldapdelete 명령에 대한 자세한 내용은 Sun Java System Directory Server Enterprise Edition 6.3 Reference를 참조하십시오.
명령줄 유틸리티에 대한 입력은 반드시 명령줄 또는 입력 파일을 통해 직접 제공할 수 있는 LDIF 형식이어야 합니다. 다음 절에서는 LDIF 입력에 대해 설명하고 이후 절에서는 각 수정 유형에 대한 LDIF 입력에 대해 설명합니다.
올바른 LDIF 입력 서식 지정에 대한 자세한 내용은 Sun Java System Directory Server Enterprise Edition 6.3 Reference의 Guidelines for Providing LDIF Input을 참조하십시오.
다음 절에서는 이러한 기본 작업에 대해 설명합니다.
DSCC를 사용하여 이 작업을 수행할 수 있습니다. 자세한 내용은 디렉토리 서비스 제어 센터 인터페이스 및 DSCC 온라인 도움말을 참조하십시오.
ldapmodify의 -a 옵션을 사용하여 디렉토리에 하나 이상의 항목을 추가할 수 있습니다. 다음 예에서는 사용자가 포함될 구조적 항목을 작성한 후에 사용자 항목을 작성합니다.
$ ldapmodify -a -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w - Enter bind password: dn: ou=People,dc=example,dc=com objectclass: top objectclass: organizationalUnit ou: People description: Container for user entries dn: uid=bjensen,ou=People,dc=example,dc=com objectclass: top objectclass: person objectclass: organizationalPerson objectclass: inetorgPerson uid: bjensen givenName: Barbara sn: Jensen cn: Babs Jensen telephoneNumber: (408) 555-3922 facsimileTelephoneNumber: (408) 555-4000 mail: bjensen@example.com userPassword: secret |
-D 옵션과 -w 옵션은 각각 이 항목을 작성할 수 있는 권한이 있는 사용자의 바인드 DN과 비밀번호를 제공합니다. -a 옵션은 LDIF의 모든 항목이 추가된다는 것을 나타냅니다. 그런 다음 각 항목이 해당 DN과 속성 값으로 나열되고 항목 사이에는 빈 줄이 들어갑니다. ldapmodify 유틸리티는 입력된 항목을 작성하고 오류가 발생하면 이를 보고합니다.
관례상, 항목의 LDIF는 다음과 같은 속성을 열거합니다.
항목의 DN
객체 클래스 목록
이름 지정 속성(하나 이상)이 속성은 DN에 사용되며, 반드시 필수 속성일 필요는 없습니다.
모든 객체 클래스의 필수 속성 목록
허용되는 속성 중에서 추가할 모든 속성
userPassword 속성 값을 입력할 때는 비밀번호를 일반 텍스트로 입력하십시오. 서버에서 이 값을 암호화하여 암호화된 값만 저장합니다. LDIF 파일에 표시되는 일반 텍스트 비밀번호를 보호하려면 읽기 권한을 제한해야 합니다.
명령줄에서 -a 옵션을 지정할 필요가 없는 다른 형식의 LDIF를 사용할 수도 있습니다. 이 형식은 아래 예와 같이 항목 추가 명령문과 항목 수정 명령문을 결합할 수 있다는 이점이 있습니다.
$ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w - Enter bind password: dn: ou=People,dc=example,dc=com changetype: add objectclass: top objectclass: organizationalUnit ou: People description: Container for user entries dn: uid=bjensen,ou=People,dc=example,dc=com changetype: add objectclass: top objectclass: person objectclass: organizationalPerson objectclass: inetorgPerson uid: bjensen givenName: Barbara sn: Jensen cn: Barbara Jensen telephoneNumber: (408) 555-3922 facsimileTelephoneNumber: (408) 555-4000 mail: bjensen@example.com userPassword: secret |
changetype: add 키워드는 지정된 DN의 항목이 이후의 모든 속성을 사용하여 작성되어야 함을 나타냅니다. 모든 다른 옵션과 LDIF 규약은 이 절의 앞 부분에서 설명한 내용과 동일합니다.
두 예에서 모두 -f filename 옵션을 사용하여 단말기 입력이 아닌 파일에서 LDIF를 읽을 수도 있습니다. -a 옵션의 사용에 따라 LDIF 파일에는 단말기 입력과 동일한 형식이 포함되어야 합니다.
DSCC를 사용하여 이 작업을 수행할 수 있습니다. 자세한 내용은 디렉토리 서비스 제어 센터 인터페이스 및 DSCC 온라인 도움말을 참조하십시오.
속성 및 해당 값을 기존 항목에 추가하거나 대체 또는 제거하려면 changetype: modify 키워드를 사용합니다. changetype: modify를 지정하는 경우 항목의 수정 방법을 나타내는 하나 이상의 변경 작업도 함께 제공해야 합니다. 아래 예에서는 가능한 LDIF 변경 작업 중 세 개를 보여줍니다.
dn: entryDN changetype: modify add: attribute attribute: value... - replace: attribute attribute: newValue... - delete: attribute [attribute: value] ... |
같은 항목에 대한 작업을 구분하려면 하이픈(-)을 사용하고 다른 항목에 대한 작업 그룹을 구분하려면 빈 줄을 사용합니다. 각 작업에 여러 개의 attribute: value 쌍을 지정할 수도 있습니다.
DSCC를 사용하여 이 작업을 수행할 수 없습니다. 이 절차에 설명된 것처럼 명령줄을 사용하십시오.
다음 예에서는 동일한 add LDIF 구문을 사용하여 여러 값을 갖는 기존 속성과 존재하지 않는 속성에 값을 추가할 수 있는 방법을 보여줍니다.
$ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w - Enter bind password: dn: uid=bjensen,ou=People,dc=example,dc=com changetype: modify add: cn cn: Babs Jensen - add: mobile mobile: (408) 555-7844 |
다음 중 부합되는 조건이 있으면 이 작업은 실패할 수 있으며 서버에서 오류를 반환합니다.
지정된 값이 해당 속성에 이미 있는 경우
값이 속성에 정의된 구문과 일치하지 않는 경우
항목의 객체 클래스에서 속성 유형을 필요로 하지 않거나 허용하지 않는 경우
속성 유형이 여러 값을 갖지 않으며 이미 값이 있는 경우
DSCC를 사용하여 이 작업을 수행할 수 있습니다. 자세한 내용은 디렉토리 서비스 제어 센터 인터페이스 및 DSCC 온라인 도움말을 참조하십시오.
속성 ;binary 하위 유형은 실제 구문에 관계없이 속성 값이 이진 데이터로서 LDAP를 통해 전송됨을 나타냅니다. 이 하위 유형은 userCertificate와 같이 LDAP 문자열 표현이 없는 복잡한 구문에 사용되며, 이외의 용도로 사용해서는 안 됩니다.
ldapmodify 명령과 함께 사용된 경우에는 적절한 하위 유형을 모든 LDIF 명령문의 속성 이름에 추가할 수 있습니다.
이진 값을 입력하려면 LDIF 텍스트에 직접 입력하거나 다른 파일에서 읽을 수 있습니다. 아래 예에서는 파일의 값을 읽어오는 LDIF 구문을 보여줍니다.
$ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w - Enter bind password: version: 1 dn: uid=bjensen,ou=People,dc=example,dc=com changetype: modify add: userCertificate;binary userCertificate;binary:< file:///local/cert-file |
:< 구문을 사용하여 파일 이름을 지정하려면 LDIF 명령문을 version: 1 행으로 시작해야 합니다. ldapmodify는 이 명령문을 처리할 때 속성을 지정된 파일의 전체 내용에서 읽은 값으로 설정합니다.
DSCC를 사용하여 이 작업을 수행할 수 있습니다. 자세한 내용은 디렉토리 서비스 제어 센터 인터페이스 및 DSCC 온라인 도움말을 참조하십시오.
속성의 언어 및 발음 하위 유형은 현지화된 값을 지정합니다. 속성에 언어 하위 유형을 지정하면 다음과 같이 속성 이름에 하위 유형이 추가됩니다.
attribute;lang-CC |
여기서 attribute는 기존 속성 유형이고 cc는 언어를 지정하는 두 글자 국가 코드입니다. 선택 사항으로 언어 하위 유형에 발음 하위 유형을 추가하여 현지화된 값의 발음을 지정할 수도 있습니다. 이 경우 속성 이름은 다음과 같습니다.
attribute;lang-CC;phonetic |
하위 유형이 지정된 속성에 작업을 수행하려면 해당 하위 유형을 명시적으로 일치시켜야 합니다. 예를 들어 lang-fr 언어 하위 유형이 지정된 속성 값을 수정하려면 다음과 같이 수정 작업에 lang-fr을 추가해야 합니다.
$ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w - Enter bind password: dn: uid=bjensen,ou=People,dc=example,dc=com changetype: modify add: homePostalAddress;lang-fr homePostalAddress;lang-fr: 34, rue de la Paix |
속성 값에 비ASCII 문자가 있는 경우 UTF-8로 인코딩해야 합니다.
DSCC를 사용하여 이 작업을 수행할 수 있습니다. 자세한 내용은 디렉토리 서비스 제어 센터 인터페이스 및 DSCC 온라인 도움말을 참조하십시오.
다음 예에서는 LDIF의 replace 구문을 사용하여 속성 값을 변경하는 방법을 보여줍니다.
$ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w - Enter bind password: dn: uid=bjensen,ou=People,dc=example,dc=com changetype: modify replace: sn sn: Morris - replace: cn cn: Barbara Morris cn: Babs Morris |
지정된 속성의 현재 값이 모두 제거되고 지정된 값이 모두 추가됩니다.
속성 값을 변경한 후에는 ldapsearch 명령을 사용하여 변경 사항을 확인할 수 있습니다.
속성 값을 수정할 때 값의 끝에 실수로 후행 공백을 추가하지 마십시오. 후행 공백으로 인해 값이 base-64로 인코딩(예: 34xy57eg)으로 표시될 수도 있습니다.
속성 값이 후행 공백으로 끝나면 후행 공백이 속성 값의 일부로 인코딩됩니다. DSCC 또는 ldapsearch 명령을 사용하여 변경 사항을 확인할 때는 보이는 값이 일반 텍스트일 수도 있으나 base-64로 인코딩된 텍스트로 표시될 수도 있습니다. 이는 사용하는 디렉토리 서버 클라이언트에 따라 다릅니다.
DSCC를 사용하여 이 작업을 수행할 수 있습니다. 자세한 내용은 디렉토리 서비스 제어 센터 인터페이스 및 DSCC 온라인 도움말을 참조하십시오.
다음 예에서는 속성을 완전히 삭제하는 방법과 여러 값을 갖는 속성의 값 하나만 삭제하는 방법을 보여줍니다.
$ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w - Enter bind password: dn: uid=bjensen,ou=People,dc=example,dc=com changetype: modify delete: facsimileTelephoneNumber - delete: cn cn: Babs Morris |
attribute: value 쌍을 지정하지 않고 delete 구문을 사용하면 이 속성의 모든 값이 제거됩니다. attribute: value 쌍을 지정하면 해당 값만 제거됩니다.
DSCC를 사용하여 이 작업을 수행할 수 있습니다. 자세한 내용은 디렉토리 서비스 제어 센터 인터페이스 및 DSCC 온라인 도움말을 참조하십시오.
ldapmodify 명령을 사용하여 여러 값을 갖는 속성의 값 하나만 수정하려면 아래 예와 같이 두 가지 작업을 수행해야 합니다.
$ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w - Enter bind password: dn: uid=bjensen,ou=People,dc=example,dc=com changetype: modify delete: mobile mobile: (408) 555-7845 - add: mobile mobile: (408) 555-5487 |
DSCC를 사용하여 이 작업을 수행할 수 있습니다. 자세한 내용은 디렉토리 서비스 제어 센터 인터페이스 및 DSCC 온라인 도움말을 참조하십시오.
ldapdelete 명령줄 유틸리티를 사용하여 디렉토리에서 항목을 삭제합니다. 이 유틸리티는 디렉토리 서버에 바인드하여 해당 DN을 기반으로 하나 이상의 항목을 삭제합니다. 지정된 항목을 삭제할 수 있는 권한이 있는 바인드 DN을 제공해야 합니다.
자식이 있는 항목은 삭제할 수 없습니다. LDAP 프로토콜은 자식 항목의 부모가 없는 상황을 허용하지 않습니다. 예를 들어 조직 구성 단위 항목을 삭제하려면 먼저 조직 구성 단위에 속해 있는 모든 항목을 삭제해야 합니다.
다음 예에서는 항목이 하나만 있는 조직 구성 단위를 보여줍니다. 이 항목을 먼저 삭제한 다음 부모 항목을 삭제할 수 있습니다.
$ ldapdelete -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w - Enter bind password: uid=bjensen,ou=People,dc=example,dc=com ou=People,dc=example,dc=com |
DSCC를 사용하여 이 작업을 수행할 수 있습니다. 자세한 내용은 디렉토리 서비스 제어 센터 인터페이스 및 DSCC 온라인 도움말을 참조하십시오.
ldapmodify 유틸리티를 사용하는 경우 changetype: delete 키워드를 함께 사용하여 항목을 삭제할 수도 있습니다. 이전 절에 설명된 것처럼 ldapdelete를 사용할 때와 동일한 제한이 모두 적용됩니다. LDIF 구문을 사용하여 항목을 삭제하면 한 개의 LDIF 파일로 혼합된 작업을 수행할 수 있다는 이점이 있습니다.
다음 예에서는 이전 예와 동일한 삭제 작업을 수행합니다.
$ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w - dn: uid=bjensen,ou=People,dc=example,dc=com changetype: delete dn: ou=People,dc=example,dc=com changetype: delete |
DSCC를 사용하여 이 작업을 수행할 수 있습니다. 자세한 내용은 디렉토리 서비스 제어 센터 인터페이스 및 DSCC 온라인 도움말을 참조하십시오.
ldapsearch 명령줄 유틸리티를 사용하여 디렉토리 항목을 찾고 검색할 수 있습니다. ldapsearch 유틸리티는 Solaris 플랫폼과 함께 제공되는 유틸리티가 아닌, Directory Server Resource Kit의 일부입니다.
ldapsearch, 일반 ldapsearch 옵션, 허용되는 형식 및 예에 대한 자세한 내용은 Sun Java System Directory Server Enterprise Edition 6.3 Reference를 참조하십시오.
이 절차에서는 DN 수정 작업을 사용합니다. 이 작업을 시작하기 전에 DN 수정 작업 사용에 대한 지침과 제한 사항 절에 대해 잘 알고 있어야 합니다.
이 절차의 일부로, DSCC를 사용하여 이 작업을 수행할 수 있습니다. 자세한 내용은 디렉토리 서비스 제어 센터 인터페이스 및 DSCC 온라인 도움말을 참조하십시오. 해당 절차의 다른 부분은 명령줄에서만 수행할 수 있습니다.
그룹의 uniquemember인 항목의 DN을 수정할 경우 참조 무결성 플러그인이 활성화되어야 합니다. 참조 무결성은 항목이 이동될 때 그룹 구성원이 조정되도록 합니다. 참조 무결성 플러그인을 사용 가능하게 하고 구성하는 방법에 대해서는 참조 무결성 플러그인을 구성하는 방법을 참조하십시오.
부모에서 다른 부모로 항목을 이동하는 경우 부모 항목에 대한 ACI 권한을 확장합니다.
항목의 현재 부모 항목을 제거할 경우 ACI에서 allow (export ...) 구문을 사용하여 export 작업을 수행할 수 있어야 합니다.
항목의 이후 부모 항목을 제거할 경우 ACI에서 allow (import ...) 구문을 사용하여 import 작업을 수행할 수 있어야 합니다.
ACI 사용에 대한 자세한 내용은 7 장, 디렉토리 서버 액세스 제어을 참조하십시오.
DN 수정 작업을 전역적으로 사용 가능하게 하거나, 적어도 이동 작업의 영향을 받는 접미어에 대해 사용 가능하게 합니다.
디렉토리 서버의 이전 릴리스와의 호환성을 위해 DN 수정 작업은 기본적으로 사용되지 않습니다.
이전에 DN 수정 작업을 이미 사용한 경우 다음 단계로 이동합니다.
서버에 대해 DN 수정 작업을 전역적으로 사용 가능하게 하려면 다음 명령을 사용합니다.
$ dsconf set-server-prop -h host -p port moddn-enabled:on |
ldapmodify 명령을 실행합니다.
이 단계에서는 DN 수정 작업을 사용합니다. 다음 중 하나를 수행합니다.
항목을 이동합니다.
예를 들어 다음 명령은 uid=bjensen 항목을 ou=Contractors,dc=example,dc=com 계약 직원의 하위 트리에서 ou=People,dc=example,dc=com 직원의 하위 트리로 이동합니다.
$ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w - Enter bind password: dn: uid=bjensen,ou=Contractors,dc=example,dc=com changetype: modrdn newrdn: uid=bjensen deleteoldrdn: 0 newsuperior: ou=People,dc=example,dc=com |
항목의 이름을 바꿉니다.
예를 들어 다음 명령은 uid=bbjensen 항목의 이름을 uid=bjensen으로 바꿉니다.
$ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w - Enter bind password: dn: uid=bbjensen,ou=People,dc=example,dc=com changetype: modrdn newrdn: uid=bjensen deleteoldrdn: 1 |
LDIF 명령문을 작성하는 경우 다음 속성에 주의하십시오.
dn - 이름을 바꾸거나 이동하려는 항목을 지정합니다.
changetype: modrdn - DN 수정 작업이 사용되도록 지정합니다.
newrdn - 새로운 이름 지정 속성을 제공합니다.
deleteoldrdn - 이전의 이름 지정 속성을 항목에서 제거할지 여부를 나타냅니다(1은 예, 0은 아니요).
이름 지정 속성이 항목 정의에서 의무적으로 사용되어야 할 속성일 경우 항목에서 이 속성을 제거할 수 없습니다.
newsuperior - 항목의 새로운 상위 속성을 지정합니다.
ldapmodify 명령과 옵션에 대한 자세한 내용은 ldapmodify(1) 설명서 페이지를 참조하십시오.
많은 항목을 포함하는 하위 트리를 이동하거나 이름을 바꿀 때 자원 제한 오류가 발생하면 데이터베이스에서 사용할 수 있는 잠금 수를 늘립니다.
$ dsconf set-server-prop -h host -p port db-lock-count:value |
이 등록 정보를 수정할 경우 변경 사항을 적용하려면 서버를 다시 시작해야 합니다.
이전 절에 설명된 것처럼 DN 수정 작업을 사용할 경우 다음 절의 지침을 수행합니다.
항목을 한 접미어에서 다른 접미어로 이동하거나 루트 접미어의 이름을 바꾸거나 이동하려면 DN 수정 작업을 사용하지 마십시오.
Directory Server 5.2 2005Q1 버전 이상이 실행 중이어야 합니다. Directory Server 5.2 2005Q1보다 이전 버전의 디렉토리 서버에서는 DN 수정 작업을 사용할 수 없습니다.
응용 프로그램에서 entryid 작동 가능 속성을 사용하지 마십시오. 이 속성은 내부 사용을 위해서만 예약되어 있습니다. 항목의 entryid 속성은 항목을 이동할 때 변경할 수 있습니다.
DN 수정 작업은 서버에 있는 모든 접미어에 대해 전역적으로 사용 가능하게 하거나 작업을 수행할 각 접미어에 대해 개별적으로 사용 가능하게 합니다. 기본적으로 DN 수정 작업은 사용되지 않습니다.
DN 수정 작업을 실행할 각 접미어에 대해 ACI 권한을 확장합니다. Import 액세스 권한을 사용하면 항목을 지정된 DN으로 가져올 수 있습니다. Export 액세스 권한을 사용하면 항목을 지정된 DN에서 내보낼 수 있습니다.
DN 수정 작업을 수행하기 전에 이 작업으로 인해 클라이언트 인증이 손상되지 않는지 확인합니다. 클라이언트 인증서를 참조하는 항목을 이동하면 클라이언트 인증이 손상됩니다. 항목을 이동한 다음에는 인증서를 검증하십시오.
DN 수정 작업을 수행하기 전에 이 작업으로 인해 응용 프로그램이 손상되지 않는지 확인합니다. 항목의 이름을 바꾸거나 이동하는 작업은 일부 접미어에 영향을 줄 수도 있고 항목의 다음 특성을 바꿀 수도 있습니다.
항목의 필터링된 역할 범위
항목의 중첩된 역할(중첩된 역할에 필터링된 역할이 포함됨)
항목의 동적 그룹 구성원
다음 요구 사항을 준수하지 않고 DN 수정 작업을 사용하면 복제가 손상되어 디렉토리 서비스가 종료될 수 있습니다.
복제 토폴로지의 모든 서버에서 Directory Server 5.2 버전 이상을 실행하고 있는지 확인합니다. Directory Server 5.2보다 이전 버전의 디렉토리 서버에서는 DN 수정 작업을 사용할 수 없습니다.
복제 토폴로지의 모든 서버에서 DN 수정 작업을 사용 가능하게 합니다. DN 수정 작업이 마스터 서버에서는 지원되지만 사용자 서버에서는 지원되지 않는 경우에는 제대로 복제되지 않습니다. 다음과 같은 메시지가 공급자 서버의 오류 로그에 작성됩니다.
Unable to start a replication session with MODDN enabled
복제를 다시 시작하려면 모든 서버에서 DN 수정 작업이 사용 가능하도록 복제 토폴로지를 다시 구성하고, 다음 방법 중 하나로 복제 세션을 시작합니다.
복제를 강제로 업데이트하는 방법의 지침을 수행합니다.
공급자 서버에서 항목을 변경합니다. 이 변경 사항이 사용자 서버에 복제됩니다.
토폴로지의 모든 마스터 복제본에서 참조 무결성 플러그인을 사용 가능하게 하여 구성합니다. 이 작업으로 서버는 그룹과 역할에 대한 참조 무결성을 유지할 수 있습니다. 참조 무결성 플러그인을 사용 가능하게 하고 구성하는 방법에 대해서는 참조 무결성 플러그인을 구성하는 방법을 참조하십시오.
DN 수정 작업을 수행한 후에 참조 무결성 플러그인이 이러한 변경 사항을 복제하는 데는 약간의 시간이 걸립니다.
참조를 사용하여 클라이언트 응용 프로그램에서 로컬에 없는 정보를 구하기 위해 연결할 서버를 알려줄 수 있습니다. 참조란 디렉토리 서버에서 작업 결과 대신 클라이언트로 반환하는 원격 접미어 또는 항목에 대한 포인터입니다. 이 경우 클라이언트는 참조에 지정된 원격 서버에 대해 다시 작업을 수행해야 합니다.
리디렉션은 다음 세 가지 경우에 발생합니다.
클라이언트 응용 프로그램에서 로컬 서버에 없는 항목을 요청하고, 서버가 기본 참조를 반환하도록 구성된 경우
유지관리 또는 보안상의 이유로 전체 접미어가 사용되지 않는 경우
서버는 해당 접미어에 정의된 참조를 반환합니다. 접미어 수준 참조에 대한 자세한 내용은 참조 설정 및 접미어 읽기 전용 만들기 를 참조하십시오. 또한 클라이언트에서 쓰기 작업을 요청하면 접미어의 읽기 전용 복제본은 마스터 서버에 대한 참조를 반환합니다.
클라이언트에서 명시적으로 스마트 참조에 액세스하는 경우
스마트 참조는 사용자가 만든 항목입니다. 서버는 스마트 참조에 정의된 참조를 반환합니다.
참조는 항상 다른 서버의 호스트 이름, 포트 번호 및 DN(선택 사항)이 포함된 LDAP URL 형식으로 지정됩니다. 예를 들면 다음과 같습니다. ldap://east.example.com:389 .
디렉토리 배포에서 참조를 사용하는 방법에 대한 개념 정보는 Sun Java System Directory Server Enterprise Edition 6.3 Deployment Planning Guide를 참조하십시오.
다음 절에서는 디렉토리의 기본 참조를 설정하고 스마트 참조를 작성 및 정의하는 절차에 대해 설명합니다.
기본 참조는 디렉토리 서버에서 유지관리하는 접미어에 포함되지 않은 DN에서 작업을 제출하는 클라이언트 응용 프로그램에 반환됩니다. 서버는 정의된 모든 참조를 반환하지만 반환 순서는 정의되어 있지 않습니다.
DSCC를 사용하여 이 작업을 수행할 수 있습니다. 자세한 내용은 디렉토리 서비스 제어 센터 인터페이스 및 DSCC 온라인 도움말을 참조하십시오.
dsconf 명령줄 유틸리티를 사용하여 하나 이상의 기본 참조를 설정합니다.
$ dsconf set-server-prop -h host -p port suffix-DN referral-url:referral-URL |
예를 들면 다음과 같습니다.
$ dsconf set-server-prop -h host1 -p 1389 dc=example,dc=com \ referral-url:ldap://east.example.com:1389 |
스마트 참조를 사용하여 디렉토리 항목이나 디렉토리 트리를 특정 LDAP URL에 매핑할 수 있습니다. 스마트 참조를 통해 클라이언트 응용 프로그램에서 특정 서버나 특정 서버의 특정 항목을 참조하도록 설정할 수 있습니다.
스마트 참조는 동일한 DN을 가진 다른 서버의 실제 항목을 가리키는 경우가 많습니다. 하지만 동일한 서버나 다른 서버의 모든 항목에 대해 스마트 참조를 정의할 수 있습니다. 예를 들어 다음과 같은 DN을 가진 항목을 스마트 참조로 정의할 수 있습니다.
uid=bjensen,ou=People,dc=example,dc=com |
스마트 참조는 east.example.com 서버에서 다른 항목을 가리킵니다.
cn=Babs Jensen,ou=Sales,o=east,dc=example,dc=com |
디렉토리에서 스마트 참조를 사용하는 방법은 RFC 4511의 섹션 4.1.10(http://www.ietf.org/rfc/rfc4511.txt)절에 지정된 표준을 따릅니다.
DSCC를 사용하여 이 작업을 수행할 수 있습니다. 자세한 내용은 디렉토리 서비스 제어 센터 인터페이스 및 DSCC 온라인 도움말을 참조하십시오.
스마트 참조를 만들려면 referral 및 extensibleObject 객체 클래스를 가진 항목을 만듭니다.
referral 객체 클래스는 LDAP URL이 포함될 것으로 예상되는 ref 속성을 허용합니다. extensibleObject 객체 클래스를 사용하면 이름 지정 속성과 같은 스키마 속성을 사용하여 대상 항목과 일치시킬 수 있습니다.
예를 들어 uid=bjensen 항목 대신 스마트 참조를 반환하도록 아래 항목을 정의하려면 다음 명령을 사용합니다.
$ ldapmodify -a -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w - Enter bind password: dn: uid=bjensen,ou=People,dc=example,dc=com objectclass: top objectclass: extensibleObject objectclass: referral uid: bjensen ref: ldap://east.example.com/cn=Babs%20Jensen,ou=Sales,o=east,dc=example,dc=com |
LDAP URL에서 공백 뒤의 정보는 서버에서 무시되므로참조로 사용할 LDAP URL에는 공백 대신 %20을 사용해야 합니다. 다른 특수 문자는 이스케이프해야 합니다.
스마트 참조를 정의한 후에 uid=bjensen 항목을 수정하면 이 변경 사항이 실제로 다른 서버의 cn=Babs Jensen 항목에 적용됩니다. ldapmodify 명령은 다음과 같이 자동으로 참조를 수행합니다.
$ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w - Enter bind password: dn: uid=bjensen,ou=People,dc=example,dc=com changetype: replace replace: telephoneNumber telephoneNumber: (408) 555-1234 |
(옵션) 스마트 참조 항목을 수정하려면 ldapmodify의 -M 옵션을 사용합니다.
$ ldapmodify -M -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w - Enter bind password: dn: uid=bjensen,ou=People,dc=example,dc=com changetype: replace replace: ref ref: ldap://east.example.com/cn=Babs%20Jensen,ou=Marketing,o=east,dc=example,dc=com |
디렉토리 서버에서는 다음 작업을 수행할 때마다 속성의 무결성을 검사할 수 있습니다.
dsadm import 또는 dsconf import를 사용한 데이터 가져오기
LDAP 또는 DSML을 사용하여 항목을 추가 및 수정하거나 항목의 DN을 수정합니다.
구문 검사를 통해 속성 값이 IETF 권장 사항을 준수하는지 확인합니다. 준수하지 않는 모든 속성은 거부되어 오류 로그에 기록됩니다. 로그 메시지에는 연결 및 작업 아이디가 포함되어 있습니다(해당하는 경우).
기본적으로 서버는 앞에서 설명한 작업의 구문을 자동으로 검사하지 않습니다. 구문 검사를 설정하려면 다음 절차를 수행합니다.
구문 검사는 스키마 검사와 다릅니다. 스키마 검사에 대한 자세한 내용은 스키마 검사 관리를 참조하십시오.
DSCC를 사용하여 이 작업을 수행할 수 없습니다. 이 절차에 설명된 것처럼 명령줄을 사용하십시오.
기본적으로 서버는 LDAP v3 사양에 지정된 것처럼 새로 생성되거나 수정된 항목에 대한 특수 속성을 유지관리합니다. 접미어의 항목에 저장되는 이러한 특수 속성은 다음과 같습니다.
creatorsName — 항목을 처음 만든 사용자의 DN
createTimestamp — 항목이 만들어진 시간에 대한 타임스탬프(GMT 형식)
modifiersName — 항목을 마지막으로 수정한 사용자의 DN
modifyTimestamp — 항목이 수정된 시간에 대한 타임스탬프(GMT 형식)
DSCC를 사용하여 이 작업을 수행할 수 있습니다. 자세한 내용은 디렉토리 서비스 제어 센터 인터페이스 및 DSCC 온라인 도움말을 참조하십시오.
항목 수정 추적 기능을 해제하면 호환되지 않는 데이터가 생성됩니다. 많은 응용 프로그램이 이러한 속성에 의존하고 있고, 이 기능을 사용 불가능하게 하면 성능 향상이 최소화되므로 항목 수정 추적 기능을 해제하지 않는 것이 좋습니다.
서버에 대한 항목 수정 추적 기능을 해제합니다.
$ dsconf set-server-prop -h host -p port suffix-DN mod-tracking-enabled:off |
속성 암호화는 디렉토리에 저장된 중요한 데이터를 보호합니다. 속성 암호화를 사용하여 항목의 특정 속성을 암호화 형식으로 저장하도록 지정하면 데이터베이스 파일, 백업 파일 및 내보낸 LDIF 파일에 저장된 데이터를 읽을 수 없습니다.
이 기능을 사용할 경우 속성 값은 디렉토리 서버 데이터베이스에 저장되기 전에 암호화되고 원래 값으로 암호가 해독된 후 클라이언트로 반환됩니다. 액세스 제어를 사용하여 클라이언트가 권한 없이 이러한 속성에 액세스하지 못하도록 제한하고 SSL을 사용하여 클라이언트와 디렉토리 서버 간에 전송되는 속성 값을 암호화해야 합니다. 일반적인 데이터 보안의 구조적 개요와 특별한 속성 암호화에 대해서는 Sun Java System Directory Server Enterprise Edition 6.3 Reference를 참조하십시오.
서버에 SSL이 구성 및 활성화되어 있는 경우에만 속성 암호화를 사용할 수 있으며기본적으로 속성은 암호화되지 않습니다. 속성 암호화는 접미어 수준에서 구성되므로 속성은 해당 속성이 포함된 각 접미어 항목에서 암호화됩니다. 전체 디렉토리에서 특정 속성을 암호화하려면 모든 접미어에서 해당 속성을 암호화해야 합니다.
속성 암호화는 접미어와 관련된 모든 데이터 및 색인 파일에 영향을 줍니다. 기존 접미어의 암호화 구성을 수정하는 경우 반드시 구성 내용을 먼저 내보내서 원하는 대로 수정한 후에 다시 가져와야 합니다. DSCC를 사용하면 이러한 단계를 쉽게 수행할 수 있습니다. DSCC 사용에 대한 자세한 내용은 디렉토리 서비스 제어 센터 인터페이스를 참조하십시오.
보안상 속성에 대한 암호화를 설정할 경우 암호화되지 않은 값이 들어 있을 수 있는 데이터베이스 캐시 파일과 데이터베이스 로그 파일을 수동으로 삭제해야 합니다. 이러한 파일을 삭제하는 절차는 속성 암호화를 구성하는 방법을 참조하십시오.
새로운 접미어에 데이터를 로드하거나 작성하기 전에 암호화된 모든 속성을 사용 가능하게 해야 합니다.
일부 항목에서 이름 지정 속성으로 사용하는 속성을 암호화하도록 선택한 경우 DN에 표시되는 값은 암호화되지 않고 항목에 저장된 값은 암호화됩니다.
userPassword 속성은 암호화하도록 선택하더라도 비밀번호를 일반 텍스트로 저장해야 하기 때문에 보안상의 이점이 없습니다. DIGEST-MD5 SASL 인증의 경우도 마찬가지입니다. 비밀번호 정책에 정의된 암호화 메커니즘이 이미 비밀번호에 적용되어 있으면 추가 암호화를 적용해도 보안은 강화되지 않고 모든 바인드 작업의 성능만 저하됩니다.
저장 시 암호화 속성 앞에 사용된 암호화 알고리즘을 나타내는 암호화 태그가 표시됩니다. DES 암호화 알고리즘으로 암호화된 속성은 다음과 같이 나타납니다.
{CKM_DES_CBC}3hakc&jla+=snda% |
온라인 상태에서 데이터를 가져와서 암호화할 때 키 데이터베이스 인증 비밀번호를 서버에 이미 제공했으므로 메시지는 다시 표시되지 않습니다. 데이터를 오프라인으로 가져오는 경우에는 디렉토리 서버에 비밀번호를 묻는 메시지가 표시됩니다. 가져올 데이터를 암호화하려면 비밀번호를 입력해야 합니다. 데이터 암호를 해독하면(보안상 중요한 작업) 내보내기 작업이 온라인 상태로 수행되는지, 아니면 오프라인 상태로 수행되는지에 관계없이 디렉토리 서버에서 키 데이터베이스 비밀번호를 묻는 메시지가 자동으로 표시됩니다. 따라서 추가 보안 계층이 제공됩니다.
인증서나 개인 키가 변경되지 않는 한 서버는 동일한 키를 계속 생성합니다. 따라서 동일한 인증서를 사용하는 두 서버 인스턴스 간에 데이터를 전송(내보낸 다음 가져오기)할 수 있습니다.
속성을 암호화하면 데이터 보안이 향상되지만 시스템 성능에 영향을 줄 수 있습니다. 따라서 암호화가 필요한 속성을 주의해서 결정하여 특히 중요하다고 생각되는 속성만 암호화하십시오.
색인 파일을 통해 중요한 데이터를 액세스할 수 있으므로 속성을 완전히 보호하려면 암호화된 속성에 해당하는 색인 키를 암호화해야 합니다. 색인 키 암호화를 수행하지 않은 상태에서 색인화만으로 디렉토리 서버 성능이 이미 저하된 경우 데이터를 데이터베이스로 가져오거나 추가하기 전에 먼저 속성 암호화를 구성합니다. 이 절차를 수행하면 암호화된 속성이 처음부터 색인화됩니다.
속성 암호화 기능을 구현할 때에는 다음을 고려하십시오.
속성 암호화 구성을 수정할 경우 데이터를 내보내고 구성을 변경한 다음 새로 구성된 데이터를 가져오는 것이 가장 일반적인 방법입니다.
그러면 기능상의 손실 없이 모든 구성 변경이 전체적으로 적용됩니다. 이렇게 하지 않으면 일부 기능이 손실되어 데이터 보안이 손상될 수 있습니다.
기존 데이터베이스에서 속성 암호화 구성을 수정하면 시스템 성능에 중요한 영향을 미칠 수 있습니다.
예를 들어 기존 데이터가 있는 데이터베이스 인스턴스가 있다고 가정합니다. 이 데이터베이스에는 mySensitiveAttribute라는 속성을 가진 항목이 이미 저장되어 있습니다. 이 속성의 값은 데이터베이스와 색인 파일에 일반 텍스트로 저장됩니다. 나중에 mySensitiveAttribute 속성을 암호화할 경우 서버에서 데이터베이스와 색인 파일을 속성 암호화 구성으로 업데이트하려면 데이터베이스 인스턴스의 모든 데이터를 내보낸 다음 데이터베이스로 다시 가져와야 합니다. 따라서 속성이 처음부터 암호화되어 성능 저하가 방지됩니다.
데이터를 암호화되지 않은 형식으로 내보낼 경우 비밀번호가 틀리면 내보내기가 거부됩니다.
보안 조치의 일환으로, 사용자가 암호화되지 않은 형식으로 데이터를 내보내면 서버는 비밀번호를 묻는 메시지를 표시합니다. 사용자가 잘못된 비밀번호를 입력하면 서버는 암호화되지 않은 내보내기 작업을 거부합니다. 비밀번호를 직접 입력하거나 비밀번호가 들어 있는 파일 경로를 입력할 수 있습니다. 이 파일에는 SSL 비밀번호 파일과 동일한 구문이 있습니다. 인증서 데이터베이스 비밀번호 구성을 참조하십시오.
dsconf 명령을 -–decrypt-attr 옵션과 함께 사용하려면 set password prompt가 on으로 설정되고 인증서 데이터베이스 비밀번호 구성에 설명된 것처럼 인증서 데이터베이스 비밀번호를 선택한 상태여야 합니다.
알고리즘 변경이 지원되지만 잘못 변경할 경우 색인화 기능이 손실될 수 있습니다.
데이터를 암호화하는 데 사용되는 알고리즘을 변경하려면 데이터를 내보내고 속성 암호화 구성을 수정한 다음 해당 데이터를 가져옵니다. 이 절차를 수행하지 않으면 초기 암호화 알고리즘에 따라 작성된 색인이 더 이상 작동하지 않습니다.
암호화된 속성의 앞에는 사용된 암호화 알고리즘을 나타내는 암호 태그가 있으므로 내부 서버 작업에서 데이터를 가져옵니다. 따라서 디렉토리 서버를 사용하면 알고리즘을 변경하기 전에 데이터를 암호화된 형식으로 내보낼 수 있습니다.
서버의 SSL 인증서를 변경하면 암호화된 데이터를 해독할 수 없습니다.
서버의 SSL 인증서는 속성 암호화 기능에서 암호화 및 암호 해독 작업 수행에 사용되는 자체 키를 생성하는 데 사용됩니다. 따라서 암호화된 데이터를 해독하려면 SSL 인증서가 필요합니다. 데이터를 해독하지 않고 인증서를 변경한 경우 해당 데이터의 암호를 해독할 수 없습니다. 이러한 문제를 방지하려면 데이터를 암호가 해독된 형식으로 내보내고, 인증서를 변경한 다음 데이터를 다시 가져옵니다.
데이터를 암호화된 형식으로 전송하려면 즉, 서버 인스턴스에서 다른 서버 인스턴스로 데이터를 내보내거나 가져오려면 두 서버 인스턴스가 동일한 인증서를 사용해야 합니다.
자세한 내용은 Sun Java System Directory Server Enterprise Edition 6.3 관리 설명서의 "속성 값 암호화"를 참조하십시오.
DSCC를 사용하여 이 작업을 수행할 수 있습니다. 자세한 내용은 디렉토리 서비스 제어 센터 인터페이스 및 DSCC 온라인 도움말을 참조하십시오.
속성 암호화를 구성할 접미어에 항목이 있으면 먼저 이 접미어의 내용을 LDIF 파일로 내보내야 합니다.
접미어에 암호화된 속성이 있는 경우 내보낸 LDIF 파일을 사용하여 접미어를 다시 초기화하려면 내보낸 LDIF에서 속성을 암호화된 상태로 유지할 수 있습니다.
속성에 대한 암호화를 사용 가능하게 하려면 다음 명령을 사용합니다.
$ dsconf create-encrypted-attr -h host -p port suffix-DN attr-name cipher-name |
여기서 cipher-name은 다음 중 하나입니다.
des - DES 블록 암호
des3 - Triple-DES 블록 암호
rc2 - RC2 블록 암호
rc4 - RC4 스트림 암호
예를 들면 다음과 같습니다.
$ dsconf create-encrypted-attr -h host1 -p 1389 dc=example,dc=com uid rc4 |
암호화된 속성을 원본 상태로 되돌리려면 다음 명령을 사용합니다.
$ dsconf delete-encrypted-attr -h host -p port suffix-DN attr-name |
하나 이상의 속성을 암호화하도록 구성이 변경되었고 가져오기 작업을 수행하기 전에 해당 속성에 값이 있는 경우 데이터베이스 캐시를 지우고 로그를 제거합니다.
암호화되지 않은 값은 데이터베이스 캐시 및 데이터베이스 로그에 표시되지 않습니다.
이러한 파일을 삭제하면 일부 추적 정보가 손실됩니다. 또한 이러한 파일을 삭제한 후에 서버가 복구 모드로 전환되므로 다시 시작하는 데 많은 시간이 소요될 수 있습니다.
데이터베이스 캐시를 지우고 로그를 제거하려면 다음을 수행합니다.
디렉토리 서버 인스턴스 시작, 중지 및 다시 시작 에 설명된 것처럼 디렉토리 서버를 중지합니다.
루트 또는 관리자 권한이 있는 사용자로 파일 시스템에서 데이터베이스 캐시 파일을 삭제합니다.
# rm instance-path/db/__db.* |
파일 시스템에서 데이터베이스 로그 파일을 삭제합니다.
# rm instance-path/db/log.0000000001 |
디렉토리 서버를 다시 시작합니다.
서버에서 자동으로 새 데이터베이스 캐시 파일을 작성합니다. 캐시가 다시 채워질 때까지 해당 접미어의 작업 성능이 다소 느려질 수도 있습니다.
접미어 초기화에 설명된 것처럼 LDIF 파일이 있는 접미어를 초기화합니다.
파일을 로드하고 해당 색인이 작성되는 동안 지정된 속성 값이 모두 암호화됩니다.