管理ガイド
Directory Server の基本および高度な管理
概要
多様性を受け入れるオープンソースの強化
第1章 一般的な Directory Server 管理タスク
1.1. システム要件
1.2. ファイルの場所
1.3. Directory Server を設定するサポート対象のメソッド
- Directory Server が提供するコマンドラインユーティリティー
- Web コンソール
1.4. Web コンソールを使用した Directory Server へのログイン
- ブラウザーを使用して、Directory Server ホストのポート 9090 で実行している Web コンソールに接続します。以下に例を示します。
https://server.example.com:9090
root
ユーザーまたはsudo
権限を持つユーザーとしてログインします。Red Hat Directory Server
エントリーを選択します。
1.5. Directory Server インスタンスの起動および停止
1.5.1. コマンドラインを使用した Directory Server インスタンスの起動および停止
- インスタンスを起動するには、以下を実行します。
# dsctl instance_name start
- インスタンスを停止するには、以下を実行します。
# dsctl instance_name stop
- インスタンスを再起動するには、以下を実行します。
# dsctl instance_name restart
- 単一のインスタンスの場合:
# systemctl enable dirsrv@instance_name
- サーバー上のすべてのインスタンスの場合:
# systemctl enable dirsrv.target
1.5.2. Web コンソールを使用した Directory Server インスタンスの起動および停止
- Web コンソールで Directory Server ユーザーインターフェイスを開きます。「Web コンソールを使用した Directory Server へのログイン」を参照してください。
- インスタンスを選択します。
- Actions ボタンをクリックして、実行するアクションを選択します。
- Start Instance
- Stop Instance
- Restart Instance
1.6. 新規 Directory Server インスタンスの作成
1.7. Directory Server インスタンスの削除
/var/lib/dirsrv/slapd-instance_name/
および /etc/dirsrv/slapd-instance_name/
ディレクトリーの内容が削除されます。
/var/lib/dirsrv/slapd-instance_name/
ディレクトリーには、データベース、バックアップおよびエクスポートディレクトリーが含まれています。/etc/dirsrv/slapd-instance_name/
ディレクトリーには、インスタンス設定とネットワークセキュリティーサービス (NSS) データベースが含まれています。インスタンスを削除する前に、このデータのバックアップを作成します。
1.7.1. コマンドラインを使用したインスタンスの削除
# dsctl instance_name remove --do-it Removing instance ... Completed instance removal
1.7.2. Web コンソールを使用したインスタンスの削除
- Web コンソールで Directory Server ユーザーインターフェイスを開きます。「Web コンソールを使用した Directory Server へのログイン」を参照してください。
- インスタンスを選択します。
- Actions ボタンをクリックし、Remove instance を選択します。
1.8. Directory Server の設定パラメーターの設定
1.8.1. 設定パラメーターの管理
dsconf
ユーティリティーの使用:注記Red Hat は、dsconf
ユーティリティーを使用して、Directory Server 設定を管理することを推奨しています。例1.1
dsconf
を使用した設定パラメーターの設定たとえば、エラーログレベルを 16384 に設定するには、dsconf
ユーティリティーを使用して、nsslapd-errorlog-level
パラメーターを更新します。# dsconf -D "cn=Directory Manager" ldap://server.example.com config replace nsslapd-errorlog-level=16384
dsconf
の使用の詳細については、dsconf(8) man ページを参照してください。- LDAP インターフェイスの使用:
例1.2 LDAP インターフェイスを使用した設定パラメーターの設定
たとえば、エラーログレベルを 16384 に設定するには、LDAP インターフェイスを使用して、nsslapd-errorlog-level
パラメーターを更新します。# ldapmodify -D "cn=Directory Manager" -W -x -H ldap://server.example.com:389 dn: cn=config replace: nsslapd-errorlog-level nsslapd-errorlog-level: 16384
/etc/dirsrv/slapd-instance_name/dse.ldif
ファイルを編集します。警告インスタンスが正常に起動している限り、このファイルは手動で編集しないでください。これは、Directory Server が想定どおりに機能しないか、インスタンスの起動に失敗する可能性があるためです。
1.8.2. Directory Server が設定を保存する場所
/etc/dirsrv/slapd-instance_name/dse.ldif
ファイルに保存します。サーバーは、このファイルで変更したパラメーターのみを保存します。リストにない属性には、デフォルト値を使用します。これにより、/etc/dirsrv/slapd-instance_name/dse.ldif
ファイルを表示して、このインスタンスに設定したすべての設定パラメーターを識別できます。
/etc/dirsrv/slapd-instance_name/dse.ldif
ファイルを手動で編集しないでください。
1.8.3. デフォルト値を使用する利点
passwordStorageScheme
属性を指定すると、Directory Server は、サポートされている利用可能な最も強力なパスワード保存スキームを自動的に使用します。今後の更新で、セキュリティーを向上させるデフォルト値を変更すると、パスワードを設定する際に、新しいストレージスキームを使用してパスワードが自動的に暗号化されます。
1.8.3.1. デフォルト値を使用するパラメーターの削除
# dsconf -D "cn=Directory Manager" ldap://server.example.com config delete parameter_name
nsslapd-secureport
など、特定のパラメーターは、削除して、デフォルトにリセットすることはできません。それらを削除しようとすると、サーバーは Server is unwilling to perform (53) エラーでリクエストを拒否します。
1.8.4. dsconf config backend
コマンドの制限事項
dsconf config backend
コマンドは、バックエンド設定を取得および設定します。このコマンドには次の引数があります。
- get
- set
dsconf config backend get
コマンドは、設定された値を持つすべてのサーバーバックエンド設定属性を取得します。次に例を示します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com:389 backend config get nsslapd-lookthroughlimit: 5000 nsslapd-mode: 600 nsslapd-idlistscanlimit: 2147483646 …
dsconf config backend get
コマンドを使用すると、指定された属性の値ではなく、属性値の完全なセットのみを取得できます。
dsconf config backend set
コマンドは、バックエンド設定属性を個別に設定します。値を設定するには、LDAP 属性名に一致するオプションを指定します。たとえば、次のように指定します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com:389 backend config set --lookthroughlimit 4000 --cache-autosize-split 24
dsconf backend config set
コマンドのオプションと LDAP 属性名のマッピングを示します。
表1.1 dsconf backend config set
コマンドのオプションと LDAP 属性名のマッピング
dsconf backend config set コマンドのオプション | LDAP 属性名 |
---|---|
--lookthroughlimit | nsslapd-lookthroughlimit |
--mode | nsslapd-mode |
--idlistscanlimit | nsslapd-idlistscanlimit |
--directory | nsslapd-directory |
--dbcachesize | nsslapd-dbcachesize |
--logdirectory | nsslapd-db-logdirectory |
--txn-wait | nsslapd-db-transaction-wait |
--checkpoint-interval | nsslapd-db-checkpoint-interval |
--compactdb-interval | nsslapd-db-compactdb-interval |
--compactdb-time | nsslapd-db-compactdb-time |
--txn-batch-val | nsslapd-db-transaction-batch-val |
--txn-batch-min | nsslapd-db-transaction-batch-min-wait |
--txn-batch-max | nsslapd-db-transaction-batch-max-wait |
--logbufsize | nsslapd-db-logbuf-size |
--locks | nsslapd-db-locks |
--locks-monitoring-enabled | nsslapd-db-locks-monitoring-enabled |
--locks-monitoring-threshold | nsslapd-db-locks-monitoring-threshold |
--locks-monitoring-pause | nsslapd-db-locks-monitoring-pause |
--import-cache-autosize | nsslapd-import-cache-autosize |
--import-cachesize | nsslapd-import-cachesize |
--cache-autosize | nsslapd-cache-autosize |
--cache-autosize-split | nsslapd-cache-autosize-split |
--exclude-from-export | nsslapd-exclude-from-export |
--pagedlookthroughlimit | nsslapd-pagedlookthroughlimit |
--pagedidlistscanlimit | nsslapd-pagedidlistscanlimit |
--rangelookthroughlimit | nsslapd-rangelookthroughlimit |
--backend-opt-level | nsslapd-backend-opt-level |
--deadlock-policy | nsslapd-db-deadlock-policy |
--db-home-directory | nsslapd-db-home-directory |
--db-lib | nsslapd-backend-implement |
1.9. LDAP および LDAPS ポート番号の変更
1.9.1. コマンドラインを使用したポート番号の変更
nsslapd-port
: インスタンスが LDAP プロトコルに使用するポート番号を保存します。nsslapd-secureport
: インスタンスが LDAPS プロトコルに使用するポート番号を保存します。
- 必要に応じて、インスタンスに現在設定されているポート番号を表示します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com config get nsslapd-port nsslapd-secureport nsslapd-port: 389 nsslapd-secureport: 636
- LDAP ポートを変更するには、以下を行います。
- LDAP プロトコルのポートを設定します。たとえば、
1389
に設定するには、以下を実行します。# dsconf -D "cn=Directory Manager" ldap://server.example.com config replace nsslapd-port=1389 Successfully replaced "nsslapd-port"
- 前の手順で割り当てた LDAP ポートの
ldap_port_t
タイプを設定します。# semanage port -a -t ldap_port_t -p tcp 1389
- LDAPS ポートを変更するには、以下を実行します。
- LDAPS プロトコルのポートを設定します。たとえば、
1636
に設定するには、以下を実行します。# dsconf -D "cn=Directory Manager" ldap://server.example.com config replace nsslapd-secureport=1636 Successfully replaced "nsslapd-secureport"
- 前の手順で割り当てた LDAPS ポートの
ldap_port_t
タイプを設定します。# semanage port -a -t ldap_port_t -p tcp 1636
- インスタンスを再起動します。
# dsctl instance_name restart
1.9.2. Web コンソールを使用したポート番号の変更
- Web コンソールで Directory Server ユーザーインターフェイスを開きます。「Web コンソールを使用した Directory Server へのログイン」を参照してください。
- インスタンスを選択します。
- LDAP ポートを変更するには、以下を行います。
- Server Settings メニューを開きます。
- Server Settings タブで、新しいポート番号を LDAP Port フィールドに入力します。
- Save をクリックします。
- LDAPS ポートを変更するには、以下を実行します。
- Server Settings メニューを開きます。
- General Settings タブで、新しいポート番号を LDAPS Port フィールドに入力します。
- Save をクリックします。
- インスタンスを再起動します。「Web コンソールを使用した Directory Server インスタンスの起動および停止」を参照してください。
1.10. Directory Server プラグインの使用
1.10.1. 利用可能なプラグインのリスト表示
1.10.1.1. コマンドラインを使用した利用可能なプラグインのリスト表示
# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin list 7-bit check Account Policy Plugin ...
1.10.1.2. Web コンソールを使用した利用可能なプラグインのリスト表示
- Web コンソールで Directory Server ユーザーインターフェイスを開きます。「Web コンソールを使用した Directory Server へのログイン」を参照してください。
- インスタンスを選択します。
- Plugins メニューを選択します。
1.10.2. プラグインの有効化および無効化
1.10.2.1. コマンドラインでプラグインの有効化および無効化
- プラグインを有効にします。
# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin automember enable
- インスタンスを再起動します。
# dsctl instance_name restart
1.10.2.2. Web コンソールを使用したプラグインの有効化および無効化
- Web コンソールで Directory Server ユーザーインターフェイスを開きます。「Web コンソールを使用した Directory Server へのログイン」を参照してください。
- インスタンスを選択します。
- Plugins メニューを選択します。
- All Plugins タブを選択します。
- 有効または無効にするプラグインの右側にある Edit Plugin ボタンをクリックします。
- ステータスを ON に変更してプラグインを有効にするか、OFF に変更して無効にします。
- インスタンスを再起動します。「Web コンソールを使用した Directory Server インスタンスの起動および停止」を参照してください。
1.10.3. プラグインの設定
1.10.3.1. コマンドラインでプラグインの設定
# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin \ plug-in-specific_subcommand ...
# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin --help
1.10.3.2. Web コンソールを使用したプラグインの設定
- Web コンソールで Directory Server ユーザーインターフェイスを開きます。「Web コンソールを使用した Directory Server へのログイン」を参照してください。
- インスタンスを選択します。
- Plugins メニューを選択します。
- All Plugins タブを選択します。
- プラグインを選択し、Show Advanced Settings をクリックします。
- プラグイン固有のタブを開きます。
- 適切な設定を行います。
- インスタンスを再起動します。「Web コンソールを使用した Directory Server インスタンスの起動および停止」を参照してください。
1.10.4. プラグインの優先順位の設定
1.10.4.1. コマンドラインを使用したプラグインの優先順位の設定
- プラグインの優先順位を設定します。たとえば、
example
プラグインの優先順位を 1 に設定するには、次のようにします。# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin edit example --precedence 1
- インスタンスを再起動します。
# dsctl instance_name restart
1.10.4.2. Web コンソールを使用したプラグインの優先順位の設定
- Web コンソールで Directory Server ユーザーインターフェイスを開きます。「Web コンソールを使用した Directory Server へのログイン」を参照してください。
- インスタンスを選択します。
- Plugins メニューを開きます。
- All Plugins を選択します。
- 優先順位の値を設定するプラグインの横にある Edit Plugin ボタンを押します。
- Plugin Precedence フィールドの値を更新します。
- Save をクリックします。
- インスタンスを再起動します。「Web コンソールを使用した Directory Server インスタンスの起動および停止」を参照してください。
1.11. .dsrc ファイルを作成して使用し、Directory Server コマンドラインユーティリティーのデフォルトオプションを設定する
~/.dsrc
ファイルは、Directory Server コマンドラインユーティリティーを使用するコマンドを簡素化します。デフォルトでは、これらのユーティリティーでは、LDAP URL やバインド識別名 (DN) などをコマンドに渡す必要があります。これらの設定を ~/dsrc
ファイルに保存すると、毎回これらの設定を指定しなくても、コマンドラインユーティリティーを使用できます。
1.11.1. .dsrc ファイルがコマンドを簡素化する方法
~/.dsrc
ファイルの例です。
[server1] uri = ldap://server1.example.com binddn = cn=Directory Manager basedn = dc=example,dc=com
# dsidm server1 user create
~/.dsrc
ファイルがない場合は、コマンドでバインド DN、LDAP URL、およびベース DN を指定する必要があります。
# dsidm -D cn=Directory Manager ldap://server1.example.com -b "dc=example,dc=com" user create
1.11.2. dsctl ユーティリティーを使用して .dsrc ファイルを作成する
~/.dsrc
ファイルを手動で作成する代わりに、dsctl
ユーティリティーを使用して作成できます。
# dsctl instance_name dsrc create ...
--uri
: protocol://host_name_or_IP_address_or_socket の形式で URL をインスタンスに設定します。例 :--uri ldap://server.example.com
--uri = ldaps://server.example.com
--uri = ldapi://%%2fvar%%2frun%%2fslapd-instance_name.socket
Directory Server ソケットへのパスを設定する場合は、パスにスラッシュ (/) ではなく %%02 を使用します。重要ldapi URL を使用すると、サーバーは、Directory Server コマンドラインユーティリティーを実行するユーザーのユーザー ID (UID) とグループ ID (GID) を識別します。root
ユーザーとしてコマンドを実行すると、UID と GID の両方が 0 になり、Directory Server は、対応するパスワードを入力しなくても、cn=Directory Manager
としてユーザーを自動的に認証します。
--starttls
: LDAP ポートに接続し、STARTTLS コマンドを送信して、暗号化された接続に切り替えるように、ユーティリティーを設定します。--basedn
: 基本識別名 (DN) を設定します。例:--basedn dc=example,dc=com
--binddn
: バインド DN を設定します。例:--binddn cn=Directory Manager
--pwdfile
: バインド DN のパスワードを含むファイルへのパスを設定します。例:--pwdfile /root/rhds.pwd
--tls-cacertdir
: LDAPS 接続を使用する場合、このパラメーターに設定されたパスは、サーバーの証明書を検証するために必要な認証局 (CA) 証明書を含むディレクトリーを定義します。例:--tls-cacertdir /etc/pki/CA/certs/
指定したディレクトリーに CA 証明書をコピーした後、c_rehash /etc/pki/CA/certs/ コマンドを使用する必要があることに注意してください。--tls-cert
: サーバーの証明書への絶対パスを設定します。例:--tls-cert /etc/dirsrv/slapd-instance_name/Server-Cert.crt
--tls-key
: サーバーの秘密鍵への絶対パスを設定します。例:--tls-key /etc/dirsrv/slapd-instance_name/Server-Cert.key
--tls-reqcert
: クライアントユーティリティーが TLS セッションでサーバー証明書に対して実行するチェックを設定します。例:--tls-reqcert hard
以下のパラメーターを利用することができます。- never: ユーティリティーはサーバー証明書を要求または確認しません。
- allow: ユーティリティーは証明書エラーを無視し、接続はとにかく確立されます。
- hard: ユーティリティーは証明書エラーで接続を終了します。
--saslmech
: 使用する SASL メカニズムを PLAIN または EXTERNAL に設定します。例:--saslmech PLAIN
1.11.3. Directory Server ユーティリティー使用時のリモートおよびローカル接続の解決
/etc/openldap/ldap.conf
設定ファイルをチェックします。
~/.dsrc
ファイルが存在するかどうかを確認し、次のロジックを適用して続行します。
~/.dsrc
ファイルが存在し、インスタンス名と LDAP URL の両方が含まれている場合、Directory Server は、それをリモート接続と見なし、/etc/openldap/ldap.conf
設定ファイルとシステム全体の設定をチェックします。~/.dsrc
ファイルが存在し、指定されたインスタンス名のみが含まれている場合、または~/.dsrc
ファイルが存在しない場合、Directory Server は、それをローカル接続と見なし、ローカルのdse.ldif
ファイルのnsslapd-certdir
設定を使用して、接続を保護します。nsslapd-certdir
が存在しない場合、サーバーは、デフォルトパス/etc/dirsrv/slapd-instance_name/
を使用して、インスタンスの Network Security Services (NSS) データベースを保存します。
nsslapd-certdir
パラメーターの詳細については、nsslapd-certdir (証明書と鍵のデータベースディレクトリー) セクションを参照してください。
第2章 ディレクトリーデータベースの設定
2.1. 接尾辞の作成および維持
図2.1 1 つのルート接尾辞があるディレクトリーツリー

ou=people
接尾辞とその下のすべてのエントリーとノードが 1 つのデータベースに保存され、ou=groups
接尾辞が別のデータベースに保存され、ou=contractors 接尾辞がさらに別のデータベースに保存される場合があります。
2.1.1. 接尾辞の作成
2.1.1.1. ルート接尾辞の作成
example.com
用と redhat.com
用の複数の Web サイトをホスティングするインターネットサービスプロバイダーなどです。このシナリオでは、2 つのルート接尾辞が必要です。次の図に示すように、1 つは dc=example,dc=com
命名コンテキストに対応し、もう 1 つは dc=redhat,dc=com
命名コンテキストに対応します。
図2.2 2 つのルート接尾辞があるディレクトリー

dc=example,dc=com
に対応し、もう 1 つのルート接尾辞はディレクトリーツリーのヨーロッパブランチ ou=europe,dc=example,dc=com
に対応します。クライアントアプリケーションの観点では、ディレクトリーツリーは以下の図のように示されます。
図2.3 検索操作への制限がオフのルート接尾辞があるディレクトリー

dc=example,dc=com
ブランチでクライアントアプリケーションによって実行される検索では、ディレクトリーの ou=europe,dc=example,dc=com
ブランチからのエントリーは返されません。これは、別のルート接尾辞であるためです。
2.1.1.1.1. コマンドラインでルート接尾辞の作成
- 必要に応じて、使用中の接尾辞およびバックエンドデータベースを指定します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com backend suffix list dc=example,dc=com (userroot)
括弧内の名前は、対応する接尾辞のデータを保存するバックエンドデータベースです。次の手順でルートの接尾辞を作成する場合は、既存のデータベース名を使用することはできません。 example
バックエンドデータベースに dc=example,dc=net ルート接尾辞を作成します。# dsconf -D "cn=Directory Manager" ldap://server.example.com backend create \ --suffix="dc=example,dc=net" --be-name="example"
2.1.1.1.2. Web コンソールを使用したルート接尾辞の作成
- Web コンソールで Directory Server ユーザーインターフェイスを開きます。「Web コンソールを使用した Directory Server へのログイン」を参照してください。
- インスタンスを選択します。
- Database メニューを開きます。
- Create Suffix をクリックします。
- 接尾辞 DN およびバックエンド名を入力します。以下に例を示します。
- Create The Top Suffix Entry を選択します。
- Create Suffix をクリックします。
2.1.1.2. 従属接尾辞の作成
図2.4 従属接尾辞が含まれるディレクトリーツリー

2.1.1.2.1. コマンドラインを使用した従属接尾辞の作成
- 必要に応じて、使用中の接尾辞およびバックエンドデータベースを指定します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com backend suffix list dc=example,dc=com (userroot)
括弧内の名前は、対応する接尾辞のデータを保存するバックエンドデータベースです。次の手順で従属接尾辞を作成する場合は、既存のデータベース名を使用することはできません。 - 従属接尾辞を作成します。たとえば、
example
バックエンドデータベースとともに ou=People,dc=example,dc=com サブ接尾辞を作成するには、次のように入力します。# dsconf -D "cn=Directory Manager" ldap://server.example.com backend create \ --suffix="ou=People,dc=example,dc=com" --be-name="example" \ --parent-suffix="dc=example,dc=com"
2.1.1.2.2. Web コンソールを使用した副接尾辞の作成
- Web コンソールで Directory Server ユーザーインターフェイスを開きます。「Web コンソールを使用した Directory Server へのログイン」を参照してください。
- インスタンスを選択します。
- Database メニューを開きます。
- サブ接尾辞を作成する接尾辞を選択し、Suffix Tasks をクリックして、Create Sub-Suffix を選択します。
- 従属接尾辞 DN およびバックエンド名を入力します。以下に例を示します。
- Create The Top Sub-Suffix Entry を選択します。
- Create Sub-Suffix をクリックします。
2.1.2. 接尾辞の維持
2.1.2.1. デフォルトの命名コンテキストの表示
nsslapd-defaultnamingcontext
属性に設定されます。この値はルート DSE (Directory Server Agent Service Entry) に伝播され、ルート DSE の defaultnamingcontext
属性を確認してクライアントが匿名でクエリーできます。
# ldapsearch -p 389 -h server.example.com -x -b "" -s base | egrep namingcontext
namingContexts: dc=example,dc=com
namingContexts: dc=example,dc=net
namingContexts: dc=redhat,dc=com
defaultnamingcontext: dc=example,dc=com
nsslapd-allowed-to-delete-attrs
一覧から nsslapd-defaultnamingcontext
属性を削除しないでください。
nsslapd-defaultnamingcontext
属性は、nsslapd-allowed-to-delete-attrs
属性に削除 できる 属性の一覧に含まれます。これにより、現在のデフォルトの接尾辞を削除してから、適切にサーバー設定を更新できます。
nsslapd-defaultnamingcontext
属性を削除すると、その属性への変更は保持されません。デフォルトの接尾辞を削除すると、その変更はサーバー設定に伝播できません。つまり、nsslapd-defaultnamingcontext
属性は、空白 (削除) ではなく古い情報を保持することを意味します。これは正しい現在の設定です。
2.1.2.2. 接尾辞の無効化
2.1.2.2.1. コマンドラインでの接尾辞の無効化
- 接尾辞とそれに対応するバックエンドを表示します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com backend suffix list dc=example,dc=com (userroot) o=test (test_database)
このコマンドにより、各接尾辞の横にバックエンドデータベースが表示されます。次の手順で、接尾辞のデータベース名が必要です。 - 接尾辞を無効にします。
# dsconf -D "cn=Directory Manager" ldap://server.example.com backend \ suffix set --disable "test_database"
2.1.2.3. 接尾辞の削除
2.1.2.3.1. コマンドラインを使用した接尾辞の削除
- 接尾辞とそれに対応するバックエンドを表示します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com backend suffix list dc=example,dc=com (userroot) o=test (test_database)
このコマンドにより、各接尾辞の横にバックエンドデータベースが表示されます。次の手順で、接尾辞のデータベース名が必要です。 - バックエンドデータベースと対応する接尾辞を削除します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com backend delete test_database Deleting Backend cn=test_database,cn=ldbm database,cn=plugins,cn=config : Type 'Yes I am sure' to continue: Yes I am sure The database, and any sub-suffixes, were successfully deleted
2.1.2.3.2. Web コンソールを使用した接尾辞の削除
- Web コンソールで Directory Server ユーザーインターフェイスを開きます。「Web コンソールを使用した Directory Server へのログイン」を参照してください。
- インスタンスを選択します。
- Database メニューを開きます。
- 接尾辞を選択し、Suffix Tasks をクリックして Delete Suffix. を選択します。
- Yes をクリックして確定します。
2.2. データベースの作成および維持
dsconf
ユーティリティーまたは Web コンソールを使用して接尾辞を作成すると、Directory Server はデータベースを自動的に作成していました。
2.2.1. データベースの作成
- 各接尾辞に 1 つのデータベース各接尾辞のデータは個別のデータベースに含まれます。
- 個別の接尾辞に含まれるデータを格納するために、3 つのデータベースが追加されます。このツリーユニットの分割は、たとえば次の 3 つのデータベースに対応しています。この例では、DB1 には ou=people のデータおよび dc=example,dc=com のデータが含まれ、クライアントが dc=example,dc=com に基づいて検索を実行できるようにします。ただし、DB2 には ou=groups のデータのみが含まれ、DB3 には ou=contractors のデータのみが含まれます。
- 1 つの接尾辞に複数のデータベースがあります。
- ディレクトリーツリーの ou=people ブランチ内のエントリー数が非常に大きくなると、2 つのデータベースを格納しなければならないとします。この場合、ou=people に含まれているデータは 2 つのデータベースに分散できます。DB1 には
A-K
からの名前の人が含まれ、DB2 にはL-Z
からの名前が含まれます。DB3 には ou=groups のデータが含まれ、DB4 には ou=contractors のデータが含まれます。カスタムプラグインは、複数のデータベースにまたがってデータを単一の接尾辞から分散します。Directory Server のディストリビューションロジックの作成方法は、Red Hat コンサルティングにお問い合わせください。
2.2.1.1. コマンドラインを使用した単一の接尾辞用の新規データベースの作成
ldapmodify
コマンドラインユーティリティーを使用して、ディレクトリー設定ファイルに新しいデータベースを追加します。データベース設定情報は cn=ldbm database,cn=plugins,cn=config エントリーに保存されます。新しいデータベースを追加するには、以下を実行します。
- ldapmodify を実行して、新規データベースのエントリーを作成します。
# ldapmodify
-a
-D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: cn=UserData,cn=ldbm database,cn=plugins,cn=config changetype: add objectclass: extensibleObject objectclass: nsBackendInstance nsslapd-suffix: ou=people,dc=example,dc=com追加されたエントリーは UserData という名前のデータベースに対応します。このデータベースには root 接尾辞または副接尾辞 ou=people,dc=example,dc=com のデータが含まれます。 - 「コマンドラインでルート接尾辞の作成」 および 「コマンドラインを使用した従属接尾辞の作成」 で説明されているように、ルートまたは従属接尾辞を作成します。DN 属性に指定されたデータベース名は、接尾辞エントリーの
nsslapd-backend
属性の値に対応している必要があります。
2.2.1.2. 単一の接尾辞に複数のデータベースの追加
- ディストリビューション機能は、エントリーディストリビューションのデプロイ後は変更できません。
- エントリーを異なるデータベースに分散させる可能性がある場合は、LDAP modrdn 操作を使用してエントリーの名前を変更することができません。
- 分散ローカルデータベースは複製できません。
- エントリーを異なるデータベースに分散させる可能性がある場合は、ldapmodify 操作を使用してエントリーを変更することができません。
- ldapmodify を実行します。
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x
- 以下の属性を接尾辞エントリー自体に追加し、カスタムディストリビューションロジックに関する情報を提供します。
dn: suffix changetype: modify add: nsslapd-backend nsslapd-backend: Database1 - add: nsslapd-backend nsslapd-backend: Database2 - add: nsslapd-backend nsslapd-backend: Database3 - add: nsslapd-distribution-plugin nsslapd-distribution-plugin: /full/name/of/a/shared/library - add: nsslapd-distribution-funct nsslapd-distribution-funct: distribution-function-name
nsslapd-backend
属性は、この接尾辞に関連付けられたすべてのデータベースを指定します。nsslapd-distribution-plugin
属性は、プラグインが使用するライブラリーの名前を指定します。nsslapd-distribution-funct
属性は、ディストリビューション機能自体の名前を提供します。
2.2.2. Directory データベースの維持
2.2.2.1. 読み取り専用モードでのデータベースの設定
2.2.2.1.1. コマンドラインを使用した読み取り専用モードでのデータベースの設定
o=test
接尾辞のデータベースを読み取り専用モードで設定するには、以下を実行します。
- 接尾辞とそれに対応するバックエンドを表示します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com backend suffix list dc=example,dc=com (userroot) o=test (test_database)
このコマンドにより、各接尾辞の横にバックエンドデータベースが表示されます。次の手順で、接尾辞のデータベース名が必要です。 - データベースを読み取り専用モードで設定します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com backend suffix set --enable-readonly "test_database"
2.2.2.1.2. Web コンソールを使用した読み取り専用モードでのデータベースの設定
- Web コンソールで Directory Server ユーザーインターフェイスを開きます。「Web コンソールを使用した Directory Server へのログイン」を参照してください。
- インスタンスを選択します。
- Database メニューを開きます。
- 接尾辞エントリーを選択します。
- Database Read-Only Mode を選択します。
- Save Configuration をクリックします。
2.2.2.2. 読み取り専用モードでの Directory Server の配置
2.2.2.2.1. コマンドラインを使用した読み取り専用モードでの Directory Server の配置
nsslapd-readonly
パラメーターを on に設定します。# dsconf -D "cn=Directory Manager" ldap://server.example.com config replace nsslapd-readonly=on
- インスタンスを再起動します。
# dsctl instance_name restart
2.2.2.2.2. Web コンソールを使用した読み取り専用モードでの Entire Directory Server の配置
- Web コンソールで Directory Server ユーザーインターフェイスを開きます。「Web コンソールを使用した Directory Server へのログイン」を参照してください。
- インスタンスを選択します。
- Server Settings メニューを開き、Server Settings エントリーを選択します。
- Advanced Settings タブで Server Read-Only を選択します。
- Save をクリックします。
2.2.2.3. データベースの削除
2.2.2.3.1. コマンドラインを使用したデータベースの削除
o=test
接尾辞のデータベースを削除するには、以下を実行します。
- 接尾辞とそれに対応するバックエンドを表示します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com backend suffix list dc=example,dc=com (userroot) o=test (test_database)
次の手順で、接尾辞の横に表示されるバックエンドデータベースの名前が必要です。 - データベースを削除します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com backend delete "test_database"
2.2.2.3.2. Web コンソールを使用したデータベースの削除
- Web コンソールで Directory Server ユーザーインターフェイスを開きます。「Web コンソールを使用した Directory Server へのログイン」を参照してください。
- インスタンスを選択します。
- Database メニューを開きます。
- 削除する接尾辞を選択し、Suffix Tasks をクリックして Delete Suffix を選択します。
- Yes をクリックして確定します。
2.2.2.4. トランザクションログディレクトリーの変更
- Directory Server インスタンスを停止します。
# dsctl instance_name stop
- トランザクションログ用に新しい場所を作成します。以下に例を示します。
# mkdir -p /srv/dirsrv/instance_name/db/
- Directory Server のみがディレクトリーにアクセスできるように、パーミッションを設定します。
# chown dirsrv:dirsrv /srv/dirsrv/instance_name/db/ # chmod 770 /srv/dirsrv/instance_name/db/
- 以前のトランザクションログディレクトリーからすべての
__db.*
ファイルを削除します。以下に例を示します。# rm /var/lib/dirsrv/slapd-instance_name/db/__db.*
- 以前のトランザクションログディレクトリーから新しいトランザクションログディレクトリーに、すべての
log.*
ファイルを移動します。以下に例を示します。# mv /var/lib/dirsrv/slapd-instance_name/db/log.* \ /srv/dirsrv/instance_name/db/
- SELinux が enforcing モードで実行している場合は、ディレクトリーに
dirsrv_var_lib_t
コンテキストを設定します。# semanage fcontext -a -t dirsrv_var_lib_t /srv/dirsrv/instance_name/db/ # restorecon -Rv /srv/dirsrv/instance_name/db/
/etc/dirsrv/slapd-instance_name/dse.ldif
ファイルを編集し、cn=config,cn=ldbm database,cn=plugins,cn=config エントリーのnsslapd-db-logdirectory
パラメーターを更新します。以下に例を示します。dn: cn=config,cn=ldbm database,cn=plugins,cn=config ... nsslapd-db-logdirectory: /srv/dirsrv/instance_name/db/
- インスタンスを起動します。
# dsctl instance_name start
2.3. データベースリンクの作成および維持
2.3.1. 新規データベースリンクの作成
- 接尾辞の情報。接尾辞は、通常のデータベースではなく、データベースリンクが管理するディレクトリーツリーに作成されます。この接尾辞は、データが含まれるリモートサーバーの接尾辞に対応します。
- バインド認証情報。データベースリンクがリモートサーバーにバインドされると、ユーザーのなりすましが行われ、リモートサーバーとバインドするために使用する各データベースリンクの DN および認証情報を指定します。
- LDAP URL。これは、データベースリンクが接続するリモートサーバーの LDAP URL を提供します。URL はプロトコル (ldap または ldaps)、サーバーのホスト名または IP アドレス (IPv4 または IPv6)、およびポートで設定されます。
- フェイルオーバーサーバーのリスト。これは、障害発生時にデータベースリンクが接続するための代替サーバーのリストを提供します。この設定項目は任意です。
2.3.1.1. コマンドラインを使用した新規データベースリンクの作成
# dsconf -D "cn=Directory Manager" ldap://server.example.com chaining link-create --suffix="ou=Customers,dc=example,dc=com" --server-url="ldap://remote_server.example.com:389" --bind-mech="" --bind-dn="cn=proxy_user,cn=config" --bind-pw="password" "example_chain_name"
ou=Customers,dc=example,dc=com
の example_chain_name
という名前のデータベースリンクが作成されます。リンクはサーバー ldap://remote_server.example.com:389
を参照し、指定のバインド DN とパスワードを使用して認証を行います。--bind-mech が空に設定されているため、リンクは簡易認証を使用します。
dc=example,dc=com
接尾辞にプロキシー ACI エントリーを作成する必要があります。その方法については、「データベースリンクの作成時に必要な設定に関する追加情報」 セクションを参照してください。
# dsconf -D "cn=Directory Manager" ldap://server.example.com chaining link-create --help
2.3.1.2. Web コンソールを使用した新規データベースリンクの作成
- Web コンソールで Directory Server ユーザーインターフェイスを開きます。「Web コンソールを使用した Directory Server へのログイン」を参照してください。
- インスタンスを選択します。
- Database メニューを開きます。
- 「接尾辞の作成」 で説明されているように、新しい接尾辞を作成します。
- 接尾辞を選択し、Suffix Tasks をクリックして Create Database Link を選択します。
- フィールドに、リモートサーバーへのコネクションの詳細を入力します。以下に例を示します。詳細は、「データベースリンクの作成時に必要な設定に関する追加情報」を参照してください。
- Create Database Link をクリックします。
2.3.1.3. 新規データベースリンクのデフォルト設定の管理
# dsconf -D "cn=Directory Manager" ldap://server.example.com chaining config-get-def
response-delay
パラメーターを 30
に設定するには、以下を実行します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com chaining config-set-def --response-delay 30
# dsconf -D "cn=Directory Manager" ldap://server.example.com chaining config-set-def --help
2.3.1.4. データベースリンクの作成時に必要な設定に関する追加情報
接尾辞情報
バインド認証情報


creatorsName
属性および modifiersName
属性にはエントリーの実際の作成者または修正者が反映されません。これらの属性には、リモートデータサーバーでプロキシー認証権限が付与されている管理ユーザーの名前が含まれています。
- データベースリンク用に、
cn=proxy_user,cn=config
などの管理ユーザーを作成します。エントリーの追加に関する詳細は、3章ディレクトリーエントリーの管理を参照してください。 - データベースリンクによってチェーンされたサブツリーの直前の手順で作成した管理ユーザーのプロキシーアクセス権限を提供します。ACI の設定に関する詳細は、18章アクセス制御の管理を参照してください。たとえば、以下の ACI は、ACI が設定されたサブツリー内のみにリモートサーバーに含まれるデータにアクセスするために、
cn=proxy_admin,cn=config
ユーザーへの読み取り専用アクセスを付与します。aci: (targetattr = "*")(version 3.0; acl "Proxied authorization for database links"; allow (proxy) userdn = "ldap:///cn=proxy_admin ,cn=config";)
LDAP URL
ldaps://africa.example.com:636/
バインドメカニズム
- 標準の LDAP ポートを使用する場合
- 専用の LDAPS ポートを使用する場合
- STARTTLS (標準ポートでのセキュアな接続) の使用
- empty: バインドメカニズムが設定されていない場合、サーバーは単純な認証を実行し、バインド DN とパスワードが必要になります。
- EXTERNAL: これは TLS 証明書を使用して、ファームサーバーをリモートサーバーに認証します。ファームサーバーをセキュアな URL (ldaps) に設定するか、
nsUseStartTLS
属性を on に設定する必要があります。さらに、『Red Hat Directory Server 設定、コマンド、およびファイルリファレンス』 の 『certmap.conf』 セクションで説明されているように、ファームサーバーの証明書をバインド ID にマッピングするようにリモートサーバーを設定する必要があります。 - DIGEST-MD5: DIGEST-MD5 暗号化での SASL 認証を使用します。簡易認証と同様、バインド情報を付与するには、
nsMultiplexorBindDN
およびnsMultiplexorCredentials
属性が必要です。 - GSSAPI: SASL 上で Kerberos ベースの認証を使用します。ファームサーバーは Kerberos キータブで設定する必要があるため、リモートサーバーには、そのファームサーバーのバインド ID に対して定義された SASL マッピングが必要です。Kerberos キータブおよび SASL マッピングの設定は、「SASL Identity マッピングの設定」に記載されています。
2.3.2. シャーシポリシーの設定
2.3.2.1. コンポーネントの動作の連鎖
- ACI プラグイン
- このプラグインはアクセス制御を実装します。ACI 属性の取得および更新に使用される操作は、ローカルおよびリモートの ACI 属性を混在することは安全ではないため、連鎖されません。ただし、ユーザーエントリーの取得に使用されるリクエストは、チェーンコンポーネント属性を設定することでチェーンすることができます。
nsActiveChainingComponents: cn=ACI Plugin,cn=plugins,cn=config
権限: 読み取り、検索、および比較 - リソース制限コンポーネント
- このコンポーネントは、ユーザーバインド DN に応じてサーバー制限を設定します。リソース制限コンポーネントを連鎖させることが可能であれば、リソース制限をリモートユーザーに適用できます。リソース制限コンポーネント操作を連鎖させるには、連鎖コンポーネント属性を追加します。
nsActiveChainingComponents: cn=resource limits,cn=components,cn=config
権限: 読み取り、検索、および比較 - 証明書ベースの認証チェックコンポーネント
- このコンポーネントは、外部バインドメソッドが使用される場合に使用します。リモートサーバーのデータベースからユーザー証明書を取得します。このコンポーネントの連鎖を許可すると、証明書ベースの認証がデータベースリンクと連携できることを意味します。このコンポーネントの動作を連鎖させるには、チェーンコンポーネント属性を追加します。
nsActiveChainingComponents: cn=certificate-based authentication,cn=components,cn=config
権限: 読み取り、検索、および比較 - パスワードポリシーコンポーネント
- このコンポーネントは、リモートサーバーへの SASL バインドを許可するために使用されます。SASL 認証の形式によっては、ユーザー名とパスワードを使用した認証が必要になります。パスワードポリシーを有効にすると、サーバーは要求された特定の認証方法を検証および実装し、適切なパスワードポリシーを適用できます。このコンポーネントの動作を連鎖させるには、チェーンコンポーネント属性を追加します。
nsActiveChainingComponents: cn=password policy,cn=components,cn=config
権限: 読み取り、検索、および比較 - SASL コンポーネント
- このコンポーネントは、リモートサーバーへの SASL バインドを許可するために使用されます。このコンポーネントの動作を連鎖させるには、チェーンコンポーネント属性を追加します。
nsActiveChainingComponents: cn=password policy,cn=components,cn=config
権限: 読み取り、検索、および比較 - 参照整合性プラグイン
- このプラグインは、DN を含む属性の更新が、属性へのポインターを含むすべてのエントリーに伝播されるようにします。たとえば、グループのメンバーであるエントリーが削除されると、そのエントリーはグループから自動的に削除されます。このプラグインをチェーンで使用すると、グループメンバーが静的グループ定義にリモートになる場合に静的グループの管理を簡素化できます。このコンポーネントの動作を連鎖させるには、チェーンコンポーネント属性を追加します。
nsActiveChainingComponents: cn=referential integrity postoperation,cn=plugins,cn=config
権限: 読み取り、検索、および比較 - Attribute Uniqueness プラグイン
- このプラグインは、指定された属性のすべての値が一意 (重複なし) のものであることを確認します 。このプラグインが連鎖されている場合は、データベースリンクで変更された属性でも属性値が一意であることを確認します。このコンポーネントの動作を連鎖させるには、チェーンコンポーネント属性を追加します。
nsActiveChainingComponents: cn=attribute uniqueness,cn=plugins,cn=config
権限: 読み取り、検索、および比較 - ロールのコンポーネント
- このコンポーネントは、データベースのエントリーのロールおよびロール割り当てを連鎖させます。このコンポーネントの連鎖は、連鎖されたデータベースであってもロールを維持します。このコンポーネントの動作を連鎖させるには、チェーンコンポーネント属性を追加します。
nsActiveChainingComponents: cn=roles,cn=components,cn=config
権限: 読み取り、検索、および比較
- Roles プラグイン
- パスワードポリシーコンポーネント
- レプリケーションプラグイン
- 参照整合性プラグイン
2.3.2.1.1. コマンドラインを使用したコンポーネント操作の連鎖
- チェーンに追加するコンポーネントを指定します。たとえば、整合性コンポーネントが連鎖操作を実行できるように設定するには、次のコマンドを実行します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com chaining config-set \ --add-comp="cn=referential integrity postoperation,cn=components,cn=config"
連鎖が可能なコンポーネントのリストは、「コンポーネントの動作の連鎖」を参照してください。 - インスタンスを再起動します。
# dsctl instance_name restart
- 操作を連鎖させるリモートサーバーの接尾辞に ACI を作成します。たとえば、Rerefer Integrity プラグインに ACI を作成するには、次のコマンドを実行します。
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h remoteserver.example.com -x dn: ou=People,dc=example,dc=com changetype: modify add: aci aci: (targetattr = "*")(target="ldap:///ou=customers,l=us,dc=example,dc=com") (version 3.0; acl "RefInt Access for chaining"; allow (read,write,search,compare) userdn = "ldap:///cn=referential integrity postoperation,cn=plugins,cn=config";)
2.3.2.1.2. Web コンソールを使用したコンポーネントの操作の連鎖
- Web コンソールで Directory Server ユーザーインターフェイスを開きます。「Web コンソールを使用した Directory Server へのログイン」を参照してください。
- インスタンスを選択します。
- Database タブを開きます。
- 左側のナビゲーションで、Chaining Configuration エントリーを選択します。
- Components to Chain フィールドの下にある Add ボタンをクリックします。
- コンポーネントを選択し、Add & Save New Components をクリックします。
- 操作を連鎖させるリモートサーバーの接尾辞に ACI を作成します。たとえば、Rerefer Integrity プラグインに ACI を作成するには、次のコマンドを実行します。
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h remoteserver.example.com -x dn: ou=People,dc=example,dc=com changetype: modify add: aci aci: (targetattr = "*")(target="ldap:///ou=customers,l=us,dc=example,dc=com") (version 3.0; acl "RefInt Access for chaining"; allow (read,write,search,compare) userdn = "ldap:///cn=referential integrity postoperation,cn=plugins,cn=config";)
2.3.2.2. LDAP 制御チェーン
- 仮想リストビュー (VLV)。この制御は、すべてのエントリー情報を返すのではなく、エントリーの一部のリストを提供します。
- サーバー側のソート。この制御では、通常は特定のマッチングルールを使用して、エントリーを属性値に従ってソートます。
- 逆参照。この制御は、検索内のエントリー属性の参照を上書きし、参照されるエントリーから指定された属性情報をプルし、残りの検索結果とともに返します。
- 管理 DSA。この制御は、参照に従うのではなく、スマート参照をエントリーとして返します。そのため、スマートの参照自体は変更または削除できます。
- ループ検出。この制御では、別のサーバーとのサーバー連鎖の回数を追跡します。数が設定された数に達すると、ループが検出され、クライアントアプリケーションに通知が送信されます。この制御の使用方法は、「ループの検出」を参照してください。
表2.1 LDAP コントロールとその OID
コントロール名 | OID |
---|---|
仮想リストビュー (VLV) | 2.16.840.1.113730.3.4.9 |
サーバー側のソート | 1.2.840.113556.1.4.473 |
管理 DSA | 2.16.840.1.113730.3.4.2 |
ループ検出 | 1.3.6.1.4.1.1466.29539.12 |
検索の逆参照 | 1.3.6.1.4.1.4203.666.5.16 |
2.3.2.2.1. コマンドラインを使用した LDAP コントロールの連鎖
# dsconf -D "cn=Directory Manager" ldap://server.example.com chaining \ config-set --add-control="2.16.840.1.113730.3.4.9"
2.3.2.2.2. Web コンソールを使用した LDAP 制御の連鎖
- Web コンソールで Directory Server ユーザーインターフェイスを開きます。「Web コンソールを使用した Directory Server へのログイン」を参照してください。
- インスタンスを選択します。
- Database メニューを開きます。
- Chaining Configuration エントリーを選択します。
- Forwarded LDAP Controls フィールドの下にある Add ボタンをクリックします。
- LDAP コントロールを選択し、Add & Save New Controls をクリックします。Directory Server のクライアントが独自の制御を作成し、その操作をリモートサーバーにチェーンする必要がある場合は、カスタムコントロールのオブジェクト識別子 (OID) を追加します。連鎖可能な LDAP コントロールとその OID のリストは、表2.1「LDAP コントロールとその OID」を参照してください。
- Save をクリックします。
2.3.3. データベースリンクおよびアクセス制御評価
- すべての種類のアクセス制御を使用できるわけではありません。たとえば、ロールベースまたはフィルターベースの ACI はユーザーエントリーへのアクセスを必要とします。データベースリンクを介してデータにアクセスするため、プロキシーコントロールのデータのみが検証できます。ユーザーエントリーがユーザーのデータと同じデータベースに配置されるように、ディレクトリーを設計することを検討してください。
- クライアントの IP アドレスまたは DNS ドメインに基づくすべてのアクセス制御は、チェーン中にクライアントの元のドメインが失われるためです。リモートサーバーは、クライアントアプリケーションをデータベースリンクと同じ IP アドレスと、同じ DNS ドメインにある表示します。注記Directory Server は、IPv4 と IPv6 の IP アドレスの両方に対応します。
- ACI は、使用する任意のグループと共に配置する必要があります。グループが動的である場合は、グループ内のすべてのユーザーが ACI およびグループで配置される必要があります。グループが静的である場合は、リモートユーザーにリンクされます。
- ACI は、使用するロール定義とそれらのロールを持つユーザーに対して配置する必要があります。
- ユーザーのエントリーの値 (例: userattr サブジェクトルール) にリンクする ACI は、ユーザーがリモートの場合に機能します。
- アクセス制御の評価時に、ユーザーエントリーの内容は必ずしも利用できるとは限りません (たとえば、データベースリンクを含むサーバーでアクセス制御が評価され、エントリーがリモートサーバーにある場合)。パフォーマンス上の理由から、クライアントはリモート問い合わせを実行してアクセス制御を評価することはできません。
- データベースリンクは、クライアントアプリケーションによって変更されるエントリーに必ずしもアクセスできるとは限りません。変更操作を実行する場合、データベースリンクはリモートサーバーに保存されている全エントリーにアクセスできません。削除操作を実行すると、データベースリンクはエントリーの DN のみを認識します。アクセス制御が特定の属性を指定する場合、データベースリンクを介して実行すると削除操作は失敗します。
nsCheckLocalACI
属性を使用します。ただし、データベースリンクを含むサーバーでアクセス制御を評価することは、カスケード連鎖を使用する場合を除いて推奨されません。
2.4. カスケード連鎖の設定
2.4.1. カスケード連鎖の概要



2.4.2. コマンドラインを使用したカスケード連鎖の設定

Server 1 の設定手順
- 接尾辞 c=africa,ou=people,dc=example,dc=com を作成します。
# dsconf -D "cn=Directory Manager" ldap://server1.example.com backend create --parent-suffix="ou=people,dc=example,dc=com" --suffix="c=africa,ou=people,dc=example,dc=com"
- DBLink1 データベースリンクを作成します。
# dsconf -D "cn=Directory Manager" ldap://server1.example.com chaining link-create --suffix="c=africa,ou=people,dc=example,dc=com" --server-url="ldap://africa.example.com:389/" --bind-mech="" --bind-dn="cn=server1 proxy admin,cn=config" --bind-pw="password" --check-aci="off" "DBLink1"
- ループ検出を有効にします。
# dsconf -D "cn=Directory Manager" ldap://server1.example.com chaining config-set --add-control="1.3.6.1.4.1.1466.29539.12"
Server 2 上の設定手順
- Server 1 をプロキシー承認に使用するプロキシー管理ユーザーを Server 2 に作成します。
# ldapadd -D "cn=Directory Manager" -W -p 389 -h server2.example.com -x dn: cn=server1 proxy admin,cn=config objectclass: person objectclass: organizationalPerson objectclass: inetOrgPerson cn: server1 proxy admin sn: server1 proxy admin userPassword: password description: Entry for use by database links
重要セキュリティー上の理由から、cn=Directory Manager
アカウントは使用しないでください。 - 接尾辞 ou=Zanzibar,c=africa,ou=people,dc=example,dc=com を作成します。
# dsconf -D "cn=Directory Manager" ldap://server2.example.com backend create --parent-suffix="c=africaou=people,dc=example,dc=com" --suffix="ou=Zanzibar,c=africa,ou=people,dc=example,dc=com"
- DBLink2 データベースリンクを作成します。
# dsconf -D "cn=Directory Manager" ldap://server2.example.com chaining link-create --suffix="ou=Zanzibar,c=africa,ou=people,dc=example,dc=com" --server-url="ldap://zanz.africa.example.com:389/" --bind-mech="" --bind-dn="server2 proxy admin,cn=config" --bind-pw="password" --check-aci="on "DBLink2"
DBLink2
リンクはカスケード連鎖設定の中間データベースリンクであるため、ACL チェックを有効にして、クライアントとプロキシーの管理ユーザーによるデータベースリンクへのアクセスを許可するかどうかをサーバーが確認できるようにします。 - ループ検出を有効にします。
# dsconf -D "cn=Directory Manager" ldap://server2.example.com chaining config-set --add-control="1.3.6.1.4.1.1466.29539.12"
- プロキシー認証制御を有効にします。
# dsconf -D "cn=Directory Manager" ldap://server2.example.com chaining config-set --add-control="2.16.840.1.113730.3.4.12"
- ローカルプロキシー認証 ACI を追加します。
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server2.example.com -x dn: c=africa,ou=people,dc=example,dc=com changetype: modify add: aci aci:(targetattr="*")(target="lou=Zanzibar,c=africa,ou=people,dc=example,dc=com") (version 3.0; acl "Proxied authorization for database links"; allow (proxy) userdn = "ldap:///cn=server1 proxy admin,cn=config";)
- Server 1 の c=us,ou=people,dc=example,dc=com にいる
uid
属性セットを持つユーザーが、Server 3 の ou=Zanzibar,c=africa,ou=people,dc=example,dc=com の接尾辞ツリーに対して、任意のタイプの操作を実行できるようにする ACI を追加します。# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server2.example.com -x dn: c=africa,ou=people,dc=example,dc=com changetype: modify add: aci aci:(targetattr="*")(target="ou=Zanzibar,c=africa,ou=people,dc=example,dc=com") (version 3.0; acl "Client authorization for database links"; allow (all) userdn = "ldap:///uid=*,c=us,ou=people,dc=example,dc=com";)
Server 3 に、Server 3 で追加の権限を必要とする別の接尾辞のユーザーが存在する場合は、Server 2 にさらにクライアント ACI を追加する必要があります。
Server 3 の設定手順
- Server 3 でプロキシー管理ユーザーを作成し、Server 2 をプロキシー承認に使用するプロキシー管理ユーザーを作成します。
# ldapadd -D "cn=Directory Manager" -W -p 389 -h server3.example.com -x dn: cn=server2 proxy admin,cn=config objectclass: person objectclass: organizationalPerson objectclass: inetOrgPerson cn: server2 proxy admin sn: server2 proxy admin userPassword: password description: Entry for use by database links
重要セキュリティー上の理由から、cn=Directory Manager
アカウントは使用しないでください。 - ローカルプロキシー認証 ACI を追加します。
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server3.example.com -x dn: ou=Zanzibar,ou=people,dc=example,dc=com changetype: modify add: aci aci: (targetattr = "*")(version 3.0; acl "Proxied authorization for database links"; allow (proxy) userdn = "ldap:///cn=server2 proxy admin,cn=config";)
- Server 1 の c=us,ou=people,dc=example,dc=com にいる
uid
属性セットを持つユーザーが、Server 3 の ou=Zanzibar,c=africa,ou=people,dc=example,dc=com の接尾辞ツリーに対して、任意のタイプの操作を実行できるようにする ACI を追加します。# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server3.example.com -x dn: ou=Zanzibar,ou=people,dc=example,dc=com changetype: modify add: aci aci: (targetattr ="*")(target="ou=Zanzibar,c=africa,ou=people,dc=example,dc=com") (version 3.0; acl "Client authentication for database link users"; allow (all) userdn = "ldap:///uid=*,c=us,ou=people,dc=example,dc=com";)
Server 3 に、Server 3 で追加の権限を必要とする別の接尾辞のユーザーが存在する場合は、Server 2 にさらにクライアント ACI を追加する必要があります。
2.4.3. ループの検出
nsHopLimit
パラメーターを使用して定義されます。デフォルトでは、パラメーターは 10 に設定されます。たとえば、example
チェーンのホップ制限を 5 に設定するには、以下のコマンドを実行します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com chaining link-set --hop-limit 5 example
2.5. 参照の使用
2.5.1. リファーラルモードでのサーバーの起動
# ns-slapd refer -D /etc/dirsrv/slapd-instance_name [-p port] -r referral_url
/etc/dirsrv/slapd-instance_name
/ は、Directory Server 設定ファイルがあるディレクトリーです。これは、Red Hat Enterprise Linux でのデフォルトの場所です。- port は、リファーラルモードで開始する Directory Server のオプションのポート番号です。
- referral_url は、クライアントに返される参照先です。LDAP URL の形式は、付録C LDAP URLを参照してください。
2.5.2. デフォルト参照の設定
2.5.2.1. コマンドラインを使用したデフォルトのリファーラルの設定
nsslapd-referral
パラメーターのデフォルトのリファーラルを設定します。たとえば、ldap://directory.example.com/
をデフォルトのリファーラルとして設定するには、以下のコマンドを実行します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com config replace nsslapd-referral="ldap://directory.example.com/"
2.5.3. スマートリファーラルの作成
2.5.3.1. コマンドラインを使用したスマートリファーラルの作成
ref
属性をリファーラル LDAP URL に設定します。
ldap://directory.europe.example.com/cn=user,ou=people,ou=europe,dc=example,dc=com
を参照する uid=user,ou=people,dc=example,dc=com という名前のスマートカードを作成するには、次のコマンドを実行します。
# ldapadd -D "cn=Directory Manager" -W -p 389 -h server2.example.com -x dn: uid=user,ou=people,dc=example,dc=com objectclass: top objectclass: person objectclass: organizationalPerson objectclass: inetOrgPerson objectclass: referral sn: user uid: user cn: user ref: ldap://directory.europe.example.com/cn=user,ou=people,ou=europe,dc=example,dc=com
-M
オプションを使用します。スマートリファーラルの詳細は、『Directory Server デプロイメントガイド』 を参照してください。
2.5.4. バグ修正参照の作成
2.5.4.1. コマンドラインを使用した接尾辞リファーラルの作成
- 必要に応じて、ルートまたは従属接尾辞が存在しない場合は作成します。詳細については、「接尾辞の作成」 を参照してください。
- 接尾辞にリファーラルを追加します。以下に例を示します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com backend suffix set --add-referral="ldap://directory.example.com/" database_name
2.5.4.2. Web コンソールを使用した接尾辞リファーラルの作成
- Web コンソールで Directory Server ユーザーインターフェイスを開きます。「Web コンソールを使用した Directory Server へのログイン」を参照してください。
- インスタンスを選択します。
- Database メニューを開きます。
- 必要に応じて、ルートまたは従属接尾辞が存在しない場合は作成します。詳細については、「接尾辞の作成」 を参照してください。
- 一覧で接尾辞を選択し、Referrals タブを開きます。
- Create Referral をクリックします。
- リファーラル URL を作成するために、フィールドに入力します。
- Create Referral をクリックします。
2.6. バックエンドデータベースの整合性の確認
userroot
データベースを確認するには、以下のコマンドを実行します。
- 必要に応じて、インスタンスのバックエンドデータベースをリスト表示します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com backend suffix list dc=example,dc=com (userroot)
後のステップでデータベースの名前が必要になります。 - Directory Server インスタンスを停止します。
# dsctl instance_name stop
- データベースを確認します。
# dsctl instance_name dbverify userroot [04/Feb/2020:13:11:02.453624171 +0100] - INFO - ldbm_instance_config_cachememsize_set - force a minimal value 512000 [04/Feb/2020:13:11:02.465339507 +0100] - WARN - ldbm_instance_add_instance_entry_callback - ldbm instance userroot already exists [04/Feb/2020:13:11:02.468060144 +0100] - ERR - ldbm_config_read_instance_entries - Failed to add instance entry cn=userroot,cn=ldbm database,cn=plugins,cn=config [04/Feb/2020:13:11:02.471079045 +0100] - ERR - bdb_config_load_dse_info - failed to read instance entries [04/Feb/2020:13:11:02.476173304 +0100] - ERR - libdb - BDB0522 Page 0: metadata page corrupted [04/Feb/2020:13:11:02.481684604 +0100] - ERR - libdb - BDB0523 Page 0: could not check metadata page [04/Feb/2020:13:11:02.484113053 +0100] - ERR - libdb - /var/lib/dirsrv/slapd-instance_name/db/userroot/entryrdn.db: BDB0090 DB_VERIFY_BAD: Database verification failed [04/Feb/2020:13:11:02.486449603 +0100] - ERR - dbverify_ext - verify failed(-30970): /var/lib/dirsrv/slapd-instance_name/db/userroot/entryrdn.db dbverify failed
- 検証プロセスで問題が報告された場合は、手動で修正するか、バックアップを復元します。
- Directory Server インスタンスを起動します。
# dsctl instance_name start
第3章 ディレクトリーエントリーの管理
3.1. コマンドラインを使用したディレクトリーエントリーの管理
- 新規エントリーの追加
- 既存のエントリーへの新規属性の追加
- 既存のエントリーおよび属性の更新
- エントリーからエントリーおよび属性を削除します
- 一括操作の実行
# yum install openldap-clients
3.1.1. ldapadd、ldapmodify、および ldapdelete ユーティリティーへの入力の指定
3.1.1.1. インタラクティブモードでの入力の提供
- ファイルを作成せずに LDIF ステートメントに入るには、次を実行します。
例3.1 ldapmodify インタラクティブモードを使用した LDIF ステートメントの開始
以下の例では、インタラクティブモードで ldapmodify を開始し、telephoneNumber
属性を削除し、cn=manager_name,ou=people,dc=example,dc=com 値を持つ manager 属性を uid=user,ou=people,dc=example,dc=com エントリーに追加します。最後のステートメントの後に Ctrl+D を押して、インタラクティブモードを終了します。# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: uid=user,ou=people,dc=example,dc=com changetype: modify delete: telephoneNumber - add: manager manager: cn=manager_name,ou=people,dc=example,dc=com ^D
- 別のコマンドで出力される LDIF ステートメントを Directory Server にリダイレクトするには、次を実行します。
例3.2 リダイレクトされたコンテンツでの ldapmodify インタラクティブモードの使用
以下の例では、command_that_outputs_LDIF コマンドの出力を ldapmodify にリダイレクトします。対話モードは、リダイレクトされたコマンドの終了後に自動的に終了します。# command_that_outputs_LDIF | ldapmodify -D "cn=Directory Manager" \ -W -p 389 -h server.example.com -x
3.1.1.2. LDIF ファイルを使用した入力の提供
例3.3 LDIF ステートメントを持つファイルを ldapmodify に渡す
- LDIF ステートメントでファイルを作成します。たとえば、以下のステートメントで
~/example.ldif
ファイルを作成します。dn: uid=user,ou=people,dc=example,dc=com changetype: modify delete: telephoneNumber - add: manager manager: cn=manager_name,ou=people,dc=example,dc=com
この例では、telephoneNumber
属性を削除し、cn=manager_name,ou=people,dc=example,dc=com 値を持つ manager 属性を uid=user,ou=people,dc=example,dc=com エントリーに追加します。 -f file_name
オプションを使用して、ファイルを ldapmodify コマンドに渡します。# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x \ -f ~/example.ldif
3.1.2. 継続的操作モード
-c
オプションを ldapadd および ldapmodify に渡します。以下に例を示します。
# ldpamodify -c -D "cn=Directory Manager" -W -p 389 -h server.example.com -x
3.1.3. エントリーの追加
/bin/ldapmodify
へのシンボリックリンクであることに注意してください。そのため、ldapadd は ldapmodify -a と同じ操作を実行します。
3.1.3.1. ldapadd を使用したエントリーの追加
# ldapadd -D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: uid=user,ou=People,dc=example,dc=com uid: user givenName: given_name objectClass: top objectClass: person objectClass: organizationalPerson objectClass: inetorgperson sn: surname cn: user
3.1.3.2. ldapmodify を使用したエントリーの追加
# ldapmodify -a -D "cn=Directory Manager" -W -p 389 -h server.example.com -x
dn: uid=user,ou=People,dc=example,dc=com
uid: user
givenName: given_name
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetorgperson
sn: surname
cn: user
-a
オプションを ldapmodify コマンドに渡すと、ユーティリティーは changetype: add 操作を自動的に実行します。そのため、LDIF ステートメントで changetype: add を指定する必要はありません。
3.1.3.3. ルートエントリーの作成
cn=Directory Manager
ユーザーとしてバインドし、エントリーを追加します。
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: dc=example,dc=com changetype: add objectClass: top objectClass: domain dc: example
-n back_end
オプションを指定して ldif2db ユーティリティーを使用し、新しいエントリーを保持するデータベースを設定する必要があります。詳細については、「コマンドラインでのインポート」 を参照してください。
3.1.4. ディレクトリーエントリーの更新
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x
3.1.4.1. エントリーへの属性の追加
telephoneNumber
属性:
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: uid=user,ou=People,dc=example,dc=com changetype: modify add: telephoneNumber telephoneNumber: 555-1234567
telephoneNumber
属性を同時に追加するには、以下のコマンドを実行します。
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: uid=user,ou=People,dc=example,dc=com changetype: modify add: telephoneNumber telephoneNumber: 555-1234567 telephoneNumber: 555-7654321
3.1.4.2. 属性の値の更新
単値属性の更新
manager
属性:
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: uid=user,ou=People,dc=example,dc=com changetype: modify replace: manager manager: uid=manager_name,ou=People,dc=example,dc=com
多値属性の特定値の更新
telephoneNumber
属性:
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: uid=user,ou=People,dc=example,dc=com changetype: modify delete: telephoneNumber telephoneNumber: 555-1234567 - add: telephoneNumber telephoneNumber: 555-9876543
3.1.4.3. エントリーからの属性の削除
属性の削除
manager
属性:
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: uid=user,ou=People,dc=example,dc=com changetype: modify delete: manager
多値属性から特定の値の削除
telephoneNumber
属性:
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: uid=user,ou=People,dc=example,dc=com changetype: modify delete: telephoneNumber telephoneNumber: 555-1234567
3.1.5. エントリーの削除
3.1.5.1. ldapdelete を使用したエントリーの削除
# ldapdelete -D "cn=Directory Manager" -W -p 389 -h server.example.com -x "uid=user,ou=People,dc=example,dc=com"
# ldapdelete -D "cn=Directory Manager" -W -p 389 -h server.example.com -x \ "uid=user1,ou=People,dc=example,dc=com" \ "uid=user2,ou=People,dc=example,dc=com"
3.1.5.2. ldapmodify を使用したエントリーの削除
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: uid=user,ou=People,dc=example,dc=com changetype: delete
3.1.6. エントリーの名前変更および変更
- エントリーの名前変更
- エントリーの名前を変更すると、modrdn 操作によってエントリーの相対識別名 (RDN) が変更されます。
- サブエントリーの名前変更
- サブツリーエントリーの場合、modrdn 操作はサブツリーと子エントリーの DN コンポーネントの名前を変更します。大規模なサブツリーでは、このプロセスに多くの時間とリソースが必要になる可能性があることに注意してください。
- エントリーを新しい親へ移動
- サブツリーの名前を変更する同様のアクションは、エントリーをあるサブツリーから別のサブツリーに移動することです。これは、modrdn 操作の拡張タイプで、エントリーの名前を同時に変更し、
newSuperior
属性を設定して、エントリーを別の親に移動します。
3.1.6.1. エントリーの名前変更に関する考慮事項
- root 接尾辞の名前を変更することはできません。
- サブツリー名前変更操作によるレプリケーションへの影響は最小限に抑えられます。レプリカ合意は、データベースのサブツリーではなく、データベース全体に適用されます。そのため、サブツリーの名前変更操作ではレプリカ合意の再設定は必要ありません。サブツリーの名前変更操作後のすべての名前の変更は、通常どおり複製されます。
- サブツリーの名前を変更し、同期合意を再設定する必要がある場合があります。同期合意は、接尾辞またはサブツリーレベルで設定されます。そのため、サブツリーの名前を変更すると、同期が中断する可能性があります。
- サブツリーの名前を変更するには、サブツリーに設定されたサブツリーレベルのアクセス制御命令 (ACI) を手動で再設定し、サブツリーの子エントリーに設定されたエントリーレベルの ACI (エントリーレベルの ACI) を手動で再設定する必要があります。
ou
からdc
への移行など、サブツリーのコンポーネントを変更しようとすると、スキーマ違反で失敗する可能性があります。たとえば、organizationalUnit オブジェクトクラスにはou
属性が必要です。この属性がサブツリーの名前の一部として削除されると、操作は失敗します。- グループを移動すると、MemberOf プラグインは
memberOf
属性を自動的に更新します。ただし、グループが含まれるサブツリーを移動する場合は、cn=memberof task エントリーでタスクを手動で作成するか、fixup-memberof.pl を使用して関連するmemberOf
属性を更新する必要があります。memberOf
属性参照のクリーンアップに関する詳細は、「memberOf
値の再生成」 を参照してください。
3.1.6.2. ユーザー、グループ、POSIX グループ、および OU の名前変更
dsidm
ユーティリティーは、複数のタイプのオブジェクトの名前を変更できます。
- ユーザー:
# dsidm -D "cn=Directory Manager" ldap://server.example.com -b "dc=example,dc=com" user rename current_user_name new_user_name
dsidm user rename コマンドは、指定したベース DN の前に ou=People を自動的に配置することに注意してください。 - グループ:
# dsidm -D "cn=Directory Manager" ldap://server.example.com -b "dc=example,dc=com" group rename current_group_name new_group_name
dsidm group rename コマンドは、指定したベース DN の前に ou=Groups を自動的に配置することに注意してください。 - POSIX グループ:
# dsidm -D "cn=Directory Manager" ldap://server.example.com -b "dc=example,dc=com" posixgroup rename current_posix_group_name new_posix_group_name
dsidm posixgroup rename コマンドは、指定したベース DN の前に ou=Groups を自動的に配置することに注意してください。 - 組織単位 (OU)
# dsidm -D "cn=Directory Manager" ldap://server.example.com -b "dc=example,dc=com" organizationalunit rename current_ou_name new_ou_name
dsidm organizationalunit rename コマンドは、指定したベース DN で直接名前変更の操作を実行します。
3.1.6.3. LDIF ステートメントを使用してエントリーの名前を変更する際の deleteOldRDN
パラメーター
deleteOldRDN
パラメーターは古い RDN が削除されるかどうかを制御します。
deleteOldRDN
: 0- 既存の RDN は、新しいエントリーの値として保持されます。生成されるエントリーには、古い属性と新しい共通名 (CN) を持つ 2 つの
cn
属性が含まれます。たとえば、以下の属性は、deleteOldRDN: 0 パラメーターを設定して、cn=old_group,dc=example,dc=com からcn=new_group,dc=example,dc=com に名前を変更したグループに属しています。dn: cn=new_group,ou=Groups,dc=example,dc=com objectClass: top objectClass: groupOfUniqueNames cn: old_group cn: new_group
deleteOldRDN
: 1- Directory Server は古いエントリーを削除し、新しい RDN を使用して新しいエントリーを作成します。新しいエントリーには、新しいエントリーの
cn
属性のみが含まれます。たとえば、以下のグループは、deleteOldRDN: 1 パラメーターを設定して、cn=new_group,dc=example,dc=com に名前を変更しました。dn: cn=new_group,ou=Groups,dc=example,dc=com objectClass: top objectClass: groupofuniquenames cn: new_group
3.1.6.4. LDIF ステートメントを使用したエントリーまたはサブツリーの名前変更
newrdn
属性に新しい RDN を設定します。
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: cn=example_user,cn=ldap_connect,dc=example,dc=com changetype: modrdn newrdn: cn=example_user deleteOldRDN: 1 newSuperior: dc=example,dc=com
deleteOldRDN
の詳細は、「LDIF ステートメントを使用してエントリーの名前を変更する際の deleteOldRDN
パラメーター」を参照してください。
3.1.6.5. LDIF ステートメントを使用した新しい親へのエントリーの移動
newrdn
- 移動したエントリーの RDN を設定します。RDN が同じままであっても、このエントリーを設定する必要があります。
newSuperior
- 新しい親エントリーの DN を設定します。
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: cn=demo,ou=Germany,dc=example,dc=com changetype: modrdn newrdn: cn=demo deleteOldRDN: 1 newSuperior: ou=France,dc=example,dc=com
deleteOldRDN
の詳細は、「LDIF ステートメントを使用してエントリーの名前を変更する際の deleteOldRDN
パラメーター」を参照してください。
3.1.7. 特殊文字の使用
cn=Directory Manager
ユーザーとして認証するには、ユーザーの DN を引用符で囲みます。
# ldapmodify -a -D "cn=Directory Manager" -W -p 389 -h server.example.com -x
uid=user,ou=People,dc=example.com Chicago, IL
ユーザーとして認証するには、次のコマンドを実行します。
# ldapmodify -a -D "cn=uid=user,ou=People,dc=example.com Chicago\, IL" \
-W -p 389 -h server.example.com -x
3.1.8. Binary 属性の使用
jpegPhoto
属性などのバイナリー値をサポートします。このような属性を追加または更新すると、ユーティリティーはファイルから属性の値を読み取ります。このような属性を追加または更新するには、ldapmodify ユーティリティーを使用できます。
jpegPhoto
属性を追加し、/home/user_name/photo.jpg
ファイルから属性の値を読み取るには、次のコマンドを実行します。
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: uid=user,ou=People,dc=example,dc=com changetype: modify add: jpegPhoto jpegPhoto:< file:///home/user_name/photo.jpg
3.1.9. 国際化されたディレクトリーにおけるエントリーの更新
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: uid=user,ou=People,dc=example,dc=com changetype: modify replace: homePostalAddress;lang-fr homePostalAddress;lang-fr: 34 rue de Seine
3.2. Web コンソールを使用したディレクトリーエントリーの管理
3.2.1. Web コンソールを使用した LDAP エントリーの追加
- ユーザー
- グループ
- roles
- 組織単位 (OU)
- カスタムエントリー
cn=John Smith,ou=people,dc=example,dc=com
のパスワードを使用して POSIX ユーザーを作成するとします。
前提条件
- ディレクトリーサーバー Web コンソールにログインしている。
- 親エントリーが存在する。例:
ou=people,dc=example,dc=com
手順
- Web コンソールで LDAP Browser メニューを開き、既存の接尾辞のリストを表示します。
- Tree ビューまたは Table ビューを使用して、ユーザーを作成する親エントリー
ou=people,dc=example,dc=com
を展開します。 - Options メニュー (⫶) をクリックし、New を選択してウィザードウィンドウを開きます。
- Create a new User オプションを選択し、Next をクリックします。
- ユーザーエントリーで Posix Account タイプを選択し、Next をクリックします。
- オプション:
userPassword
のような追加属性を選択し、Next をクリックします。ステップ名の近くにあるドロップダウンリストを展開すると、選択されたすべての属性を表示できます。 - 各属性の値を設定します。
- 属性の鉛筆ボタンをクリックし、値を追加します。
userPassword
値を設定すると、別のメニューが開くことに注意してください。プレーンテキストを非表示にするために、値にはアスタリスク (*) が入力されます。 - チェックボタンをクリックして変更を保存します。
- オプション: Options メニュー (⫶) → Add Another Value をクリックして、追加の属性値を設定します。
- すべての値を設定したら、Next をクリックします。
- エントリーの詳細がすべて正しいことを確認し、Create User をクリックします。ディレクトリーサーバーは、POSIX ユーザーの必須属性を持つエントリーを作成し、それにパスワードを設定します。Back をクリックしてエントリーの設定を変更するか、Cancel をクリックしてエントリーの作成をキャンセルできます。
- Result for Entry Creation 表示し、Finish をクリックします。
検証
- LDAP Browser → Search に移動します。
- エントリーを含むデータベース接尾辞 (例:
dc=example,cd=com
) を選択します。 - 検索基準 (例:
John
) をフィールドに入力し、Enter を押します。 - エントリーのリストで最近作成したエントリーを見つけます。
3.2.2. Web コンソールを使用した LDAP エントリーの編集
cn=John Smith,ou=people,dc=example,dc=com
を次のとおり変更します。
- 電話番号
556778987
および556897445
を追加します。 - 電子メール
jsmith@example.com
を追加します。 - パスワードを変更します。
前提条件
手順
- Web コンソールで LDAP Browser メニューを開き、既存の接尾辞のリストを表示します。
- Tree ビューまたは Table ビューを使用して、編集するエントリー (例:
cn=John Smith,ou=people,dc=example,dc=com
) を展開します。 - Options メニュー (⫶) をクリックし、Edit を選択してウィザードウィンドウを開きます。
- オプション: Select ObjectClasses の手順で、エントリーのオブジェクトクラスを追加または削除します。Next をクリックします。
- Select Attributes の手順で、エントリーに
telephoneNumber
とmail
の属性を追加し、Next をクリックします。エントリーに追加する属性が表示されない場合は、前の手順で対応するオブジェクトクラスを追加していないことを意味します。注記この手順では、選択したオブジェクトクラスの必須属性は 削除できません。 - Edit Attribute Values の手順で、
telephoneNumber
を556778987
および556897445
、mail
をjsmith@example.com
に設定し、userPassword
値を変更します。- 属性の鉛筆ボタンをクリックして、新しい値を追加または変更します。
- チェックボタンをクリックして変更を保存します。
- オプション: Options メニュー (⫶) → Add Another Value をクリックして、属性に追加の値を設定します。この例では、
telephoneNumber
属性には値が 2 つあります。すべての値を設定したら、Next をクリックします。
- 変更内容を確認し、Next をクリックします。
- エントリーを編集するには、Modify Entry をクリックします。Back をクリックしてエントリーの設定を変更するか、Cancel をクリックしてエントリーの編集をキャンセルできます。
- Result for Entry Modification 表示し、Finish をクリックします。
検証
- エントリーの詳細を展開し、エントリー属性に表示される新しく変更された内容を確認します。
3.2.3. Web コンソールを使用した LDAP エントリーまたはサブツリーの名前変更と再配置
cn=John Smith,ou=people,dc=example,dc=com
の名前と配置を cn=Tom Smith,ou=clients,dc=example,dc=com
に変更します。
前提条件
手順
- Web コンソールで LDAP Browser メニューを開き、既存の接尾辞のリストを表示します。
- Tree ビューまたは Table ビューを使用して、変更するエントリー (例:
cn=John Smith,ou=people,dc=example,dc=com
) を展開します。 - Options メニュー (⫶) をクリックし、Rename を選択してウィザードウィンドウを開きます。
- Select The Naming Attribute And Value の手順で以下を実行します。
- 命名属性
cn
に新しい値Tom Smith
を設定し、Next をクリックします。 - オプション: ドロップダウンメニューから別の命名属性を選択します。
- オプション: 古いエントリーを削除し、新しい RDN を使用して新規エントリーを作成する場合は、Delete the old RDN をオンにします。
- Select The Entry Location の手順で新しい場所の親エントリーを選択し、Next をクリックします。
- エントリーに加えた変更を確認し、Next をクリックします。
- エントリーの詳細が正しい場合は、Change Entry Name をクリックします。Back をクリックしてエントリーに別の変更を加えるか、Cancel をクリックしてエントリーの変更をキャンセルできます。
- Result for Entry Modification を表示し、Finish をクリックします。
検証
- エントリーの詳細を展開し、更新されたエントリーを確認します。
3.2.4. Web コンソールを使用した LDAP エントリーの削除
cn=Tom Smith,ou=clients,dc=example,dc=com
を削除します。
前提条件
手順
- Web コンソールで LDAP Browser メニューを開き、既存の接尾辞のリストを表示します。
- Tree ビューまたは Table ビューを使用して、削除するエントリー (例:
cn=Tom Smith,ou=clients,dc=example,dc=com
) を展開します。 - Options メニュー (⫶) をクリックし、Delete を選択してウィザードウィンドウを開きます。
- 削除するエントリーに関するデータを確認し、Next をクリックします。
- Deletion の手順でスイッチを Yes, I’m sure の位置に切り替え、Delete をクリックします。Cancel をクリックすると、エントリーの削除をキャンセルできます。
- Result for Entry Deletion を表示し、Finish をクリックします。
検証
- LDAP Browser → Search に移動します。
- 前にエントリーが存在していた接尾辞 (例:
dc=example,cd=com
) を選択します。 - 検索基準 (例:
Tom
) をフィールドに入力し、Enter を押します。 - 削除されたエントリーが存在しないことを確認します。
第4章 ディレクトリーエントリーの変更の追跡
- 変更シーケンス番号を使用してデータベースへの変更を追跡します。これは、レプリケーションおよび同期で使用されるシーケンス番号の変更に類似しています。通常のディレクトリー操作はすべて、シーケンス番号がトリガーされます。
- 作成および変更の情報を割り当てます。これらの属性は、エントリーを作成して直近に変更したユーザーの名前と、エントリーの作成および修正時のタイムスタンプを記録します。
4.1. 更新シーケンス番号でデータベースへの変更の追跡
4.1.1. エントリーシーケンス番号の概要
4.1.1.1. ローカルおよびグローバルの USN
entryUSN
操作属性のエントリーへの最後の変更の変更番号が表示されます。操作属性の詳細は、「操作属性の検索」を参照してください。
例4.1 エントリー USN の例
uid=example,ou=People,dc=example,dc=com
ユーザーエントリーの entryusn
属性を表示するには、以下のコマンドを実行します。
# ldapsearch -D "cn=Directory Manager" -W -H ldap://server.example.com:389 -x -b "uid=example,ou=People,dc=example,dc=com" -s base -x entryusn
dn: uid=example,ou=People,dc=example,dc=com
entryusn: 17653
- ローカルモードでは、各バックエンドデータベースには、そのバックエンドデータベースに固有の USN カウンターを持つ USN プラグインのインスタンスがあります。これはデフォルト設定です。
- グローバルモードでは、ディレクトリー全体に追加された変更に適用されるグローバル USN カウンターを使用する USN プラグインのグローバルインスタンスがあります。
lastusn
属性のデータベースのエントリーに割り当てられた最新の USN を表示します。USN プラグインがローカルモードに設定されているため、各データベースに独自のローカル USN カウンターがある場合、lastUSN
は、USN が割り当てられているデータベースと、USN の両方を表示します。
lastusn;database_name:USN
lastusn;example1: 2130 lastusn;example2: 2070
lastUSN
属性は最新の USN のみを表示します。
lastusn: 4200
4.1.1.2. USN エントリーのインポート
nsslapd-entryusn-import-initval
属性を使用して、エントリーに USN が割り当てられているかどうかを確認します。nsslapd-entryusn-import-initval
の値が数値である場合、インポートされたエントリーはこの数字をエントリーの USN として使用します。nsslapd-entryusn-import-initval
の値が数値でない場合、USN プラグインは lastUSN
属性の値を使用して、インポートしたエントリーの USN で増やします。
4.1.2. USN プラグインの有効化
4.1.2.1. コマンドラインで USN プラグインの有効化
dsconf
ユーティリティーを使用してプラグインを有効にします。# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin usn enable
- インスタンスを再起動します。
# dsctl instance_name restart
4.1.2.2. Web コンソールを使用した USN プラグインの有効化
- Web コンソールで Directory Server ユーザーインターフェイスを開きます。「Web コンソールを使用した Directory Server へのログイン」を参照してください。
- インスタンスを選択します。
- Plugins メニューを選択します。
- USN プラグインを選択します。
- ステータスを ON に変更し、プラグインを有効にします。
- インスタンスを再起動します。「Web コンソールを使用した Directory Server インスタンスの起動および停止」を参照してください。
4.1.3. グローバルの USN
4.1.3.1. グローバル USN が有効になっているかどうかの特定
4.1.3.1.1. コマンドラインでグローバル USN が有効になっているかどうかの特定
# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin usn global USN global mode is disabled
4.1.3.1.2. Web コンソールを使用してグローバル USN が有効になっているかどうかの特定
- Web コンソールで Directory Server ユーザーインターフェイスを開きます。「Web コンソールを使用した Directory Server へのログイン」を参照してください。
- インスタンスを選択します。
- Plugins メニューを選択します。
- USN プラグインを選択します。
- USN Global スイッチが On に設定されていることを確認します。
4.1.3.2. グローバル USN の有効化
4.1.3.2.1. コマンドラインでグローバル USN の有効化
- グローバル USN を有効にします。
# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin usn global on
- インスタンスを再起動します。
# dsctl instance_name restart
4.1.3.2.2. Web コンソールを使用したグローバル USN の有効化
- Web コンソールで Directory Server ユーザーインターフェイスを開きます。「Web コンソールを使用した Directory Server へのログイン」を参照してください。
- インスタンスを選択します。
- Plugins メニューを開きます。
- USN プラグインを選択します。
- プラグインのステータスを On に変更します。
- USN Global ステータスを On に変更します。
- インスタンスを再起動します。「Web コンソールを使用した Directory Server インスタンスの起動および停止」を参照してください。
4.1.4. USN Tombstone エントリーのクリーンアップ
- サーバーをレプリカに変換する前に
- サーバーのメモリーを解放する
4.1.4.1. コマンドラインを使用した USN tombstone エントリーのクリーンアップ
# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin usn cleanup -s "dc=example,dc=com"
-o max_USN
オプションをコマンドに渡して、指定した値まで USN tombstone エントリーを削除します。
4.1.4.2. Web コンソールを使用した USN tombstone エントリーのクリーンアップ
- Web コンソールで Directory Server ユーザーインターフェイスを開きます。「Web コンソールを使用した Directory Server へのログイン」を参照してください。
- インスタンスを選択します。
- Plugins メニューを開きます。
- USN プラグインを選択します。
- Run Fixup Task ボタンをクリックします。
- フィールドを入力し、Run を押します。
4.2. 操作属性によるエントリー変更の追跡
creatorsName
: エントリーを最初に作成したユーザーの識別名 (DN) です。createTimestamp
: エントリーの作成時にグリニッジ標準時 (GMT) 形式のタイムスタンプ。modifiersName
: エントリーを最後に変更したユーザーの識別名。modifyTimestamp
: エントリーが最後に修正された時点の GMT 形式のタイムスタンプ。
nsUniqueID
属性に割り当てられた一意の ID を取得しなくなり、レプリケーションは機能しません。
4.2.1. データベースリンクにより変更されたエントリーまたは作成済みエントリー
creatorsName
および modifiersName
属性には、リモートサーバーのプロキシー認可権限を付与されたユーザー名が含まれます。この場合、属性はエントリーの元の作成者または最新の変更者を表示しません。ただし、アクセスログには、プロキシーユーザー (dn) と元のユーザー (authzid) の両方が表示されます。以下に例を示します。
[23/May/2018:18:13:56.145747965 +051800] conn=1175 op=0 BIND dn="cn=proxy admin,ou=People,dc=example,dc=com" method=128 version=3 [23/May/2018:18:13:56.575439751 +051800] conn=1175 op=0 RESULT err=0 tag=97 nentries=0 etime=0 dn="cn=proxy admin,ou=people,dc=example,dc=com" [23/May/2018:18:13:56.744359706 +051800] conn=1175 op=1 SRCH base="dc=example,dc=com" scope=2 filter="(objectClass=*)" attrs=ALL authzid="uid=user_name,ou=People,dc=example,dc=com"
4.2.2. 変更のトラッキングの有効化
4.2.2.1. コマンドラインを使用した変更の追跡の有効化
nsslapd-lastmod
パラメーターを on に設定します。# dsconf -D "cn=Directory Manager" ldap://server.example.com config replace nsslapd-lastmod=on
- 必要に応じて、不足している
nsUniqueID
属性を再生成するには、以下を実行します。- データベースを LDAP データ交換形式 (LDIF) ファイルにエクスポートします。「コマンドラインを使用した LDIF ファイルへのデータのエクスポート」を参照してください。
- LDIF ファイルからデータベースをインポートします。「コマンドラインでのインポート」を参照してください。
4.3. プラグイン開始更新のバインド DN の追跡
dn: cn=example_group,ou=groups,dc=example,dc=com modifiersname: uid=example,ou=people,dc=example,dc=com dn: uid=example,ou=people,dc=example,dc=com modifiersname: cn=memberOf plugin,cn=plugins,cn=config
nsslapd-plugin-binddn-tracking
パラメーターにより、サーバーは、更新操作を開始したユーザーと、実際に実行した内部プラグインを追跡できます。バインドされたユーザーは modifiersname
操作属性および creatorsname
操作属性に表示されますが、実行されたプラグインは internalModifiersname
操作属性および internalCreatorsname
操作属性に表示されます。以下に例を示します。
dn: uid=example,ou=people,dc=example,dc=com modifiersname: uid=admin,ou=people,dc=example,dc=com internalModifiersname: cn=memberOf plugin,cn=plugins,cn=config
nsslapd-plugin-binddn-tracking
パラメーターは、バインドされたユーザーと、その接続に対して実行される更新の関係を追跡し、維持します。
internalModifiersname
属性および internalCreatorsname
属性は、常にプラグインをアイデンティティーとして表示します。このプラグインは、MemberOf プラグインなどの追加のプラグインである可能性があります。コア Directory Server により変更が加えられると、プラグインはデータベースプラグイン (cn=ldbm database,cn=plugins,cn=config) になります。
4.3.1. コマンドラインで開始した更新のバインド DN の追跡の有効化
nsslapd-plugin-binddn-tracking
パラメーターを on に設定します。# dsconf -D "cn=Directory Manager" ldap://server.example.com config replace nsslapd-plugin-binddn-tracking=on
- インスタンスを再起動します。
# dsctl instance_name restart
4.3.2. Web コンソールを使用したプラグイン開始の更新のバインド DN の追跡の有効化
- Web コンソールで Directory Server ユーザーインターフェイスを開きます。「Web コンソールを使用した Directory Server へのログイン」を参照してください。
- インスタンスを選択します。
- Server Settings メニューを開き、Server Settings エントリーを選択します。
- Advanced Settings タブで Enable Plugin Bind DN Tracking を選択します。
- Save をクリックします。
- インスタンスを再起動します。「Web コンソールを使用した Directory Server インスタンスの起動および停止」を参照してください。
4.4. パスワード変更時間の追跡
lastModified
操作属性に記録されます。ただし、Active Directory 同期におけるパスワードの更新や、他の LDAP クライアントへの接続を容易にするため、パスワード変更の時間は別々に記録しないといけない場合があります。
passwordTrackUpdateTime
属性は、エントリーのパスワードが最後に更新された日時のタイムスタンプを記録するようサーバーに指示します。パスワードの変更時間はユーザーエントリーで pwdUpdateTime
操作属性 (modifyTimestamp
または lastModified
操作属性とは別) として保存されます。
passwordTrackUpdateTime
属性は、パスワード変更時間にアクセスする必要があるクライアントに応じて、グローバルパスワードポリシー、サブツリー、またはユーザーレベルのポリシーの一部として設定できます。パスワードポリシーの設定は、「パスワードポリシーの管理」を参照してください。
第5章 参照整合性の維持
5.1. 参照整合性の仕組み
- エントリーの場合は、ログファイルで削除済みと表示され、ディレクトリーの対応する属性が削除されます。
- エントリーの場合は、ログファイルで名前が変更または移動済みと表示され、ディレクトリーの対応する属性の名前が変わります。
member
、uniquemember
、owner
、およびseeAlso
属性の整合性更新が実行されます。ただし、Referential Integrity Postoperation プラグインの動作は、ディレクトリーのニーズに応じて複数の方法で設定できます。
- レプリケーション変更ログに整合性の更新を記録します。
- 更新間隔を変更します。
- 参照整合性を適用する属性を選択します。
- 参照整合性を無効にします。
nsIndexType: pres nsIndexType: eq nsIndexType: subインデックスの確認および作成に関する詳細は、「標準インデックスの作成」を参照してください。
5.2. レプリケーションによる参照整合性の使用
- 専用のコンシューマーサーバー (読み取り専用レプリカのみが含まれるサーバー) では有効に しないでください。
- 読み書きレプリカと読み取り専用レプリカの組み合わせが含まれるサーバーで有効に しないでください。
- 読み取り/書き込みレプリカ のみ を含むサプライヤーサーバーで有効にします。
- マルチサプライヤーレプリケーショントポロジーの各サプライヤーサーバーに対してプラグインを有効にします。プラグイン設定は、すべてのサプライヤーサーバーで同じである必要があります。
5.3. 参照整合性の有効化
5.3.1. コマンドラインを使用した参照整合性の有効化
dsconf
ユーティリティーを使用してプラグインを有効にします。# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin referential-integrity enable
- インスタンスを再起動します。
# dsctl instance_name restart
5.3.2. Web コンソールを使用した参照整合性の有効化
- Web コンソールで Directory Server ユーザーインターフェイスを開きます。「Web コンソールを使用した Directory Server へのログイン」を参照してください。
- インスタンスを選択します。
- Plugins メニューを選択します。
- Referential Integrity プラグインを選択し、Show Advanced Settings をクリックします。
- ステータスを ON に変更し、プラグインを有効にします。
5.4. 参照整合性の更新間隔
- 0: 参照整合性の確認は即座に実行されます。
- -1: 参照整合性の確認は実行されません。
5.4.1. コマンドラインを使用した更新間隔の表示
# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin referential-integrity show
referint-update-delay: 0
...
5.4.2. Web コンソールを使用した更新間隔の表示
- Web コンソールで Directory Server ユーザーインターフェイスを開きます。「Web コンソールを使用した Directory Server へのログイン」を参照してください。
- インスタンスを選択します。
- Plugins メニューを開きます。
- Referential Integrity プラグインを選択します。
- 更新間隔については、Update Delay フィールドを参照してください。
5.4.3. コマンドラインを使用した更新間隔の変更
- 更新間隔を 0 に設定します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin referential-integrity set --update-delay=0
- インスタンスを再起動します。
# dsctl instance_name restart
5.4.4. Web コンソールを使用した更新間隔の変更
- Web コンソールで Directory Server ユーザーインターフェイスを開きます。「Web コンソールを使用した Directory Server へのログイン」を参照してください。
- インスタンスを選択します。
- Plugins メニューを開きます。
- Referential Integrity プラグインを選択します。
- Update Delay フィールドに間隔を設定します。
- Save Config を押します。
- インスタンスを再起動します。「Web コンソールを使用した Directory Server インスタンスの起動および停止」を参照してください。
5.5. 属性リストの表示および修正
member
属性、uniquemember
属性、owner
属性、および seeAlso
属性を確認し、更新します。コマンドラインまたは Web コンソールを使用して、更新する属性を追加または削除できます。
5.5.1. コマンドラインを使用した属性リストの表示
# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin referential-integrity show
5.5.2. Web コンソールを使用した属性リストの表示
- Web コンソールで Directory Server ユーザーインターフェイスを開きます。「Web コンソールを使用した Directory Server へのログイン」を参照してください。
- インスタンスを選択します。
- Plugins メニューを開きます。
- Referential Integrity プラグインを選択します。
- 属性のリストは、Membership Attribute フィールドを参照してください。
5.5.3. コマンドラインで属性リストの設定
- 必要に応じて、属性の現在のリストを表示します。「コマンドラインを使用した属性リストの表示」を参照してください。
- 属性リストを更新します。
- プラグインが確認および更新される必要がある属性リストを設定するには、以下を実行します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin referential-integrity set --membership-attr attribute_name_1 attribute_name_2
- プラグインで確認および更新されなくなった属性をすべて削除するには、以下を実行します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin referential-integrity set --membership-attr delete
- インスタンスを再起動します。
# dsctl instance_name restart
5.5.4. Web コンソールを使用した属性リストの設定
- Web コンソールで Directory Server ユーザーインターフェイスを開きます。「Web コンソールを使用した Directory Server へのログイン」を参照してください。
- インスタンスを選択します。
- Plugins メニューを開きます。
- Referential Integrity プラグインを選択します。
- Membership Attribute フィールドを更新して、属性を設定します。
- 属性を追加するには、Membership Attribute フィールドに名前を入力します。
- 属性を削除するには、Membership Attribute フィールドの属性名の横にある X ボタンをクリックします。
- Save Config を押します。
5.6. 参照整合性のためのスコープの設定
dc=example,dc=com
に ou=active users,dc=example,dc=com
と ou=deleted users,dc=example,dc=com
の 2 つのサブツリーが含まれる場合があります。deleted users
のエントリーは、参照整合性の確保のために処理しないでください。
5.6.1. 参照整合性の範囲を制御するパラメーター
nsslapd-pluginEntryScope
- この多値パラメーターは、削除または名前変更のエントリーの範囲を制御します。これは、Referential Integrity Postoperation プラグインがユーザーエントリーの削除操作または名前変更操作を検索するサブツリーを定義します。定義されたサブツリーに存在しないユーザーを削除または名前変更した場合、プラグインは操作を無視します。このパラメーターを使用すると、プラグインが操作を適用するデータベースのブランチを指定できます。
nsslapd-pluginExcludeEntryScope
- このパラメーターは、削除または名前変更のエントリーの範囲も制御します。これは、Referential Integrity Postoperation プラグインがユーザーの削除や名前変更の操作を無視するサブツリーを定義します。
nsslapd-pluginContainerScope
- このパラメーターは、参照を更新するグループのスコープを制御します。ユーザーの削除後、Referential Integrity Postoperation プラグインはユーザーが属するグループを検索し、それに応じて更新します。このパラメーターは、プラグインがユーザーが属するグループを検索するブランチを指定します。Referential Integrity Postoperation プラグインは、指定のコンテナーブランチにあるグループのみを更新し、その他のグループは更新されないままにします。
5.6.2. コマンドラインを使用した参照整合性範囲の表示
# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin referential-integrity show ... nsslapd-pluginEntryScope: DN nsslapd-pluginExcludeEntryScope: DN nsslapd-pluginContainerScope: DN
5.6.3. Web コンソールを使用した参照整合性範囲の表示
- Web コンソールで Directory Server ユーザーインターフェイスを開きます。「Web コンソールを使用した Directory Server へのログイン」を参照してください。
- インスタンスを選択します。
- Plugins メニューを開きます。
- Referential Integrity プラグインを選択します。
- 現在設定されているスコープについては、Entry Scope フィールド、Exclude Entry Scope フィールド、および Container Scope フィールドを参照してください。
5.6.4. コマンドラインを使用した参照整合性範囲の設定
- 必要に応じて、スコープ設定を表示します。「コマンドラインを使用した参照整合性範囲の表示」を参照してください。
- 以下のコマンドは、コマンドラインを使用して個別の参照整合性スコープを設定する方法を示しています。
- 識別名 (DN) を設定するには、以下を実行します。
nsslapd-pluginEntryScope
パラメーターに対して以下を実行します。# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin referential-integrity set --entry-scope="DN"
nsslapd-pluginExcludeEntryScope
パラメーターに対して以下を実行します。# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin referential-integrity set --exclude-entry-scope="DN"
nsslapd-pluginContainerScope
パラメーターに対して以下を実行します。# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin referential-integrity set --container-scope="DN"
- DN を削除するには、以下を実行します。
nsslapd-pluginEntryScope
パラメーターから、以下を行います。# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin referential-integrity set --entry-scope=delete
nsslapd-pluginExcludeEntryScope
パラメーターから、以下を行います。# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin referential-integrity set --exclude-entry-scope=delete
nsslapd-pluginContainerScope
パラメーターから、以下を行います。# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin referential-integrity set --container-scope=delete
- インスタンスを再起動します。
# dsctl instance_name restart
5.6.5. Web コンソールを使用した参照整合性範囲の設定
- Web コンソールで Directory Server ユーザーインターフェイスを開きます。「Web コンソールを使用した Directory Server へのログイン」を参照してください。
- インスタンスを選択します。
- Plugins メニューを選択します。
- Referential Integrity プラグインを選択します。
- Entry Scope フィールド、Exclude Entry Scope フィールドおよび Container Scope フィールドにスコープを設定します。
- Save Config をクリックします。
第6章 Directory Database への入力
6.1. データのインポート
- データのインポート重要データをインポートするには、インポートする LDIF ファイルを
/var/lib/dirsrv/slapd-instance_name/ldif/
ディレクトリーに保存する必要があります。Directory Server はデフォルトでPrivateTmp
systemd ディレクティブを使用します。そのため、LDIF ファイルを/tmp/
または/var/tmp/
システムディレクトリーにエクスポートすると、Directory Server はインポート中にこれらの LDIF ファイルを認識しません。PrivateTmp
の詳細は、systemd.exec(5)
の man ページを参照してください。 - レプリケーションのデータベースの初期化
表6.1 インポート方法の比較
動作 | インポート | データベースの初期化 |
---|---|---|
データベースの上書き | いいえ | はい |
LDAP 操作 | 追加、変更、削除 | 追加のみ |
パフォーマンス | より時間がかかる | 速い |
パーティション特長 | すべてのパーティションで機能 | ローカルパーティションのみ |
サーバー障害への応答 | ベストエフォート (障害が発生した時点までに行われたすべての変更が残る) | アトミック (障害発生後にすべての変更が失われる) |
LDIF ファイルの場所 | Web コンソールへのローカル | Web コンソールまたはローカルサーバーへのローカル |
設定情報 (cn=config) をインポートする | はい | いいえ |
6.1.1. インポート中の EntryUSN 初期値の設定
nsslapd-entryusn-import-initval
パラメーターを設定します。これにより、インポートされたすべてのエントリーの USN が開始されます。
nsslapd-entryusn-import-initval
には 2 つの値を指定することができます。
- 整数。インポートされたすべてのエントリーに使用される明示的な開始番号です。
- next。つまり、インポートされたエントリーはすべて、インポート操作の前にサーバー上にあった最大のエントリー USN 値を、1 つずつインクリメントして使用します。
nsslapd-entryusn-import-initval
が設定されていない場合、すべてのエントリー USN はゼロで始まります。
例6.1 nsslapd-entryusn-import-initval
パラメーターの仕組み
nsslapd-entryusn-import-initval
の値が next の場合、インポートされたすべてのエントリーには 1001 の USN が割り当てられます。
# ldapsearch -D "cn=Directory Manager" -W -p 389 -h server.example.com -x "(cn=*)" entryusn dn: dc=example,dc=com entryusn: 1001 dn: ou=Accounting,dc=example,dc=com entryusn: 1001 dn: ou=Product Development,dc=example,dc=com entryusn: 1001 ... dn: uid=user_name,ou=people,dc=example,dc=com entryusn: 1001 ...
nsslapd-entryusn-import-initval
パラメーターを、データをインポートするサーバーまたは初期化を実行するサプライヤーサーバーに追加します。以下に例を示します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com config replace nsslapd-entryusn-import-initval=next
nsslapd-entryusn-import-initval
パラメーターはサーバー間で複製 されません。つまり、値は、レプリカの初期化に使用しているすべてのサプライヤーサーバーに対して設定する必要があります。
Supplier1
ホストの nsslapd-entryusn-import-initval
が next に設定され、レプリカの初期化に使用される場合は、インポートされたエントリーのエントリー USN は最も高い値に 1 が追加されます。Supplier2
ホストに nsslapd-entryusn-import-initval
が設定されておらず、レプリカの初期化に使用される場合は、Supplier1
および Supplier2
にマルチサプライヤーレプリカ合意がある場合でも、インポートされたエントリーのすべてのエントリー USN はゼロで始まります。
6.1.2. コマンドラインでのインポート
- インスタンスが実行している場合には、以下のいずれかの方法を使用します。
- dsconf backend import コマンドを使用します。「dsconf backend import コマンドを使用したインポート」を参照してください。
- cn=tasks エントリーを作成します。「cn=tasks エントリーを使用したデータのインポート」を参照してください。
- インスタンスがオフラインの場合は、dsctl ldif2db コマンドを使用します。「サーバーがオフライン時のデータのインポート」を参照してください。
UTF-8
文字セットエンコーディングを使用する必要があります。インポート操作は、データをローカル文字セットエンコーディングから UTF-8
に変換しません。また、インポートされたすべての LDIF ファイルにルート接尾辞エントリーが含まれている必要があります。
dirsrv
ユーザーとしてインポート操作を実行します。したがって、LDIF ファイルのパーミッションにより、このユーザーがファイルの読み取りを許可する必要があります。
6.1.2.1. サーバーの実行中にデータのインポート
6.1.2.1.1. dsconf backend import コマンドを使用したインポート
/var/lib/dirsrv/slapd-instance_name/ldif/instance_name-database_name-time_stamp.ldif
ファイルを userRoot
データベースにインポートするには、以下のコマンドを実行します。
- 接尾辞が存在しない場合は作成します。詳細については、「接尾辞の作成」 を参照してください。
- インポートする LDIF に接尾辞エントリーを追加するステートメントが含まれていない場合は、「ルートエントリーの作成」 で説明されているように、このエントリーを手動で作成します。
- LDIF ファイルをインポートします。
# dsconf -D "cn=Directory Manager" ldap://server.example.com backend import userRoot /var/lib/dirsrv/slapd-instance_name/ldif/instance_name-database_name-time_stamp.ldif The import task has finished successfully
dsconf backend import コマンドは、特定の接尾辞を除外するなど、追加オプションに対応します。利用可能なオプションをすべて表示するには、以下を入力します。# dsconf ldap://server.example.com backend import --help
6.1.2.1.2. cn=tasks エントリーを使用したデータのインポート
cn
: タスクの一意の名前を設定します。nsFilename
: インポートする LDIF ファイルの名前を設定します。nsInstance
: ファイルをインポートするデータベースの名前を設定します。
/var/lib/dirsrv/slapd-instance_name/ldif/example.ldif
ファイルの内容を userRoot
データベースにインポートするタスクを追加するには:
- 接尾辞が存在しない場合は作成します。詳細については、「接尾辞の作成」 を参照してください。
- インポートする LDIF に接尾辞エントリーを追加するステートメントが含まれていない場合は、「ルートエントリーの作成」 で説明されているように、このエントリーを手動で作成します。
- インポートタスクを追加します。
# ldapadd -D "cn=Directory Manager" -W -H ldap://server.example.com -x dn: cn=example_import,cn=import,cn=tasks,cn=config changetype: add objectclass: extensibleObject cn: example_import nsFilename: /var/lib/dirsrv/slapd-instance_name/ldif/example.ldif nsInstance: userRoot
6.1.2.2. サーバーがオフライン時のデータのインポート
- 接尾辞が存在しない場合は作成します。詳細については、「接尾辞の作成」 を参照してください。
- インポートする LDIF に接尾辞エントリーを追加するステートメントが含まれていない場合は、「ルートエントリーの作成」 で説明されているように、このエントリーを手動で作成します。
- インスタンスを停止します。
# dsctl instance_name stop
- LDIF ファイルからデータをインポートします。たとえば、
/var/lib/dirsrv/slapd-instance_name/ldif/example.ldif
ファイルをuserRoot
データベースにインポートするには、以下を実行します。# dsctl instance_name ldif2db userroot /var/lib/dirsrv/slapd-instance_name/ldif/example.ldif OK group dirsrv exists OK user dirsrv exists [17/Jul/2018:13:42:42.015554231 +0200] - INFO - ldbm_instance_config_cachememsize_set - force a minimal value 512000 ... [17/Jul/2018:13:42:44.302630629 +0200] - INFO - import_main_offline - import userroot: Import complete. Processed 160 entries in 2 seconds. (80.00 entries/sec) ldif2db successful
警告コマンドで指定したデータベースが、LDIF ファイルに含まれる接尾辞と一致しない場合は、データベースに含まれるすべてのデータが削除され、インポートに失敗します。 - インスタンスを起動します。
# dsctl instance_name start
6.1.3. Web コンソールを使用したデータのインポート
- 接尾辞が存在しない場合は作成します。詳細については、「接尾辞の作成」 を参照してください。
- インポートする LDIF に接尾辞エントリーを追加するステートメントが含まれていない場合は、「ルートエントリーの作成」 で説明されているように、このエントリーを手動で作成します。
- インポートする LDIF ファイルを
/var/lib/dirsrv/slapd-instance_name/ldif/
ディレクトリーに保存します。 - Web コンソールで Directory Server ユーザーインターフェイスを開きます。「Web コンソールを使用した Directory Server へのログイン」を参照してください。
- インスタンスを選択します。
- Database メニューを開きます。
- 接尾辞エントリーを選択します。
- Suffix Tasks をクリックし、Initialize Suffix を選択します。
- インポートする LDIF ファイルを選択するか、ファイルへの完全パスを入力します。
- Yes, I am sure を選択し、Initialize Database をクリックして確定します。
6.2. データのエクスポート
- データベースのデータのバックアップを作成します。
- 別の Directory Server にデータをコピーします。
- 別のアプリケーションへのデータのエクスポート。
- ディレクトリートポロジーの変更後にデータベースを再作成します。たとえば、ディレクトリーに 1 つのデータベースが含まれ、その内容を 2 つのデータベースに分割する必要がある場合は、図6.1「データベースコンテンツの 2 つのデータベースへの分割」で説明されるように、2 つの新しいデータベースのコンテンツをエクスポートし、それを 2 つの新しいデータベースにインポートます。
図6.1 データベースコンテンツの 2 つのデータベースへの分割
dirsrv
ユーザーとして実行します。したがって、移行先ディレクトリーのパーミッションでは、このユーザーがこのファイルを作成できるようにする必要があります。
6.2.1. コマンドラインを使用した LDIF ファイルへのデータのエクスポート
- インスタンスが実行している場合には、以下のいずれかの方法を使用します。
- dsconf backend export コマンドを使用します。「dsconf backend export コマンドを使用したデータベースのエクスポート」を参照してください。
- cn=tasks エントリーを作成します。「cn=tasks エントリーを使用したデータベースのエクスポート」を参照してください。
- インスタンスがオフラインの場合は、dsctl db2ldif コマンドを使用します。「サーバーがオフライン時のデータベースのエクスポート」を参照してください。
/tmp
または /var/tmp/
ディレクトリーにエクスポートしないでください。理由は以下のとおりです。
- Directory Server は、デフォルトで
systemd
のPrivateTmp
機能を使用します。LDIF ファイルを/tmp
または/var/tmp/
システムディレクトリーに配置すると、Directory Server はインポート中にこれらの LDIF ファイルを認識しません。PrivateTmp
の詳細は、systemd.exec(5)
の man ページを参照してください。 - LDIF ファイルには、しばしばユーザーパスワードなどの機密データが含まれます。したがって、これらのファイルを保存するために一時システムディレクトリーを使用しないでください。
6.2.1.1. サーバーの実行中にデータベースのエクスポート
6.2.1.1.1. dsconf backend export コマンドを使用したデータベースのエクスポート
userRoot
データベースをエクスポートするには、以下のコマンドを実行します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com backend export userRoot The export task has finished successfully
dsconf
は、エクスポートを /var/lib/dirsrv/slapd-instance_name/export/
ディレクトリーの instance_name_database_name-time_stamp.ldif
という名前のファイルに保存します。または、コマンドに -l file_name
オプションを追加して、別の場所を指定します。
# dsconf ldap://server.example.com backend export --help
6.2.1.1.2. cn=tasks エントリーを使用したデータベースのエクスポート
cn
: タスクの一意の名前を設定します。nsInstance
: エクスポートするデータベースの名前を設定します。nsFilename
: エクスポートを保存するファイルの名前を設定します。
userRoot
データベースのコンテンツを /var/lib/dirsrv/slapd-instance_name/ldif/example.ldif
ファイルにエクスポートするタスクを追加するには、次のようにします。
# ldapadd -D "cn=Directory Manager" -W -H ldap://server.example.com -x dn: cn=example_export,cn=export,cn=tasks,cn=config changetype: add objectclass: extensibleObject cn: example_export nsInstance: userRoot nsFilename: /var/lib/dirsrv/slapd-instance_name/ldif/example.ldif
6.2.1.2. サーバーがオフライン時のデータベースのエクスポート
- インスタンスを停止します。
# dsctl instance_name stop
- データベースを LDIF ファイルにエクスポートします。たとえば、
userRoot
データベースを/var/lib/dirsrv/slapd-instance_name/ldif/example.ldif
ファイルにエクスポートするには:# dsctl instance_name db2ldif userroot /var/lib/dirsrv/slapd-instance_name/ldif/example.ldif OK group dirsrv exists OK user dirsrv exists ldiffile: /var/lib/dirsrv/slapd-instance_name/ldif/example.ldif [18/Jul/2018:10:46:03.353656777 +0200] - INFO - ldbm_instance_config_cachememsize_set - force a minimal value 512000 [18/Jul/2018:10:46:03.383101305 +0200] - INFO - ldbm_back_ldbm2ldif - export userroot: Processed 160 entries (100%). [18/Jul/2018:10:46:03.391553963 +0200] - INFO - dblayer_pre_close - All database threads now stopped db2ldif successful
- インスタンスを起動します。
# dsctl instance_name start
6.2.2. Web コンソールを使用した LDIF ファイルへの接尾辞のエクスポート
- Web コンソールで Directory Server ユーザーインターフェイスを開きます。「Web コンソールを使用した Directory Server へのログイン」を参照してください。
- インスタンスを選択します。
- Database メニューを開きます。
- 接尾辞エントリーを選択します。
- Suffix Tasks をクリックし、Export Suffix を選択します。
- エクスポートを保存する LDIF ファイルの名前を入力します。Directory Server は、指定したファイル名を使用して、ファイルを
/var/lib/dirsrv/slapd-instance_name/ldif/
ディレクトリーに保存します。 - Export Database をクリックします。
6.2.3. グループのメンバーがデータをエクスポートすることの許可、およびグループメンバーの 1 つとしてのエクスポートの実行
cn=Directory Manager
の認証情報を設定する必要がなくなるため、セキュリティーが向上します。また、グループを変更して、エクスポートのパーミッションを簡単に許可し、取り消しすことができます。
6.2.3.1. グループがデータをエクスポートすることの許可
cn=export_users,ou=groups,dc=example,dc=com
グループを追加し、このグループのメンバーがエクスポートタスクを作成することを許可します。
手順
cn=export_users,ou=groups,dc=example,dc=com
グループを作成します。# dsidm -D "cn=Directory Manager" ldap://server.example.com -b "dc=example,dc=com" group create --cn export_users
cn=export_users,ou=groups,dc=example,dc=com
グループのメンバーがエクスポートタスクを作成するのを許可するアクセス制御手順 (ACI) を追加します。# ldapadd -D "cn=Directory Manager" -W -H ldap://server.example.com dn: cn=config changetype: modify add: aci aci: (target = "ldap:///cn=export,cn=tasks,cn=config")(targetattr="*") (version 3.0 ; acl "permission: Allow export_users group to export data" ; allow (add, read, search) groupdn = "ldap:///cn=export_users,ou=groups,dc=example,dc=com";) - add: aci aci: (target = "ldap:///cn=config")(targetattr = "objectclass || cn || nsslapd-suffix || nsslapd-ldifdir") (version 3.0 ; acl "permission: Allow export_users group to access ldifdir attribute" ; allow (read,search) groupdn = "ldap:///cn=export_users,ou=groups,dc=example,dc=com";)
- ユーザーを作成します。
- ユーザーアカウントを作成します。
# dsidm -D "cn=Directory Manager" ldap://server.example.com -b "dc=example,dc=com" user create --uid="example" --cn="example" --uidNumber="1000" --gidNumber="1000" --homeDirectory="/home/example/" --displayName="Example User"
- ユーザーアカウントのパスワードを設定します。
# dsidm -D "cn=Directory Manager" ldap://server.example.com -b "dc=example,dc=com" account reset_password "uid=example,ou=People,dc=example,dc=com" "password"
uid=example,ou=People,dc=example,dc=com
ユーザーをcn=export_users,ou=groups,dc=example,dc=com
グループに追加します。# dsidm -D "cn=Directory Manager" ldap://server.example.com -b "dc=example,dc=com" group add_member export_users uid=example,ou=People,dc=example,dc=com
検証
- cn=config に設定した ACI を表示します。
# ldapsearch -o ldif-wrap=no -LLLx -D "cn=Directory Manager" -W -H ldap://server.example.com -b cn=config aci=* aci -s base dn: cn=config aci: (target = "ldap:///cn=export,cn=tasks,cn=config")(targetattr="*")(version 3.0 ; acl "permission: Allow export_users group to export data" ; allow (add, read, search) groupdn = "ldap:///cn=export_users,ou=groups,dc=example,dc=com";) aci: (target = "ldap:///cn=config")(targetattr = "objectclass || cn || nsslapd-suffix || nsslapd-ldifdir")(version 3.0 ; acl "permission: Allow export_users group to access ldifdir attribute" ; allow (read,search) groupdn = "ldap:///cn=export_users,ou=groups,dc=example,dc=com";) ...
6.2.3.2. 通常のユーザーとしてのエクスポートの実行
cn=Directory Manager
ではなく、通常のユーザーとしてエクスポートを実行できます。
前提条件
cn=export_users,ou=groups,dc=example,dc=com
グループのメンバーがデータをエクスポートすることを許可している。「グループがデータをエクスポートすることの許可」を参照してください。- エクスポートの実行に使用するユーザーが
cn=export_users,ou=groups,dc=example,dc=com
グループのメンバーである。
手順
- 以下の方法のいずれかを使用してエクスポートタスクを作成します。
- dsconf backend export コマンドの使用:
# dsconf -D "uid=example,ou=People,dc=example,dc=com" ldap://server.example.com backend export userRoot
- タスクの手動での作成:
# ldapadd -D "uid=example,ou=People,dc=example,dc=com" -W -H ldap://server.example.com dn: cn=userRoot-2021_07_23_12:55_00,cn=export,cn=tasks,cn=config changetype: add objectClass: extensibleObject nsFilename: /var/lib/dirsrv/slapd-instance_name/ldif/None-userroot-2021_07_23_12:55_00.ldif nsInstance: userRoot cn: export-2021_07_23_12:55_00
検証
- バックアップが作成されたことを確認します。
# ls -l /var/lib/dirsrv/slapd-instance_name/ldif/*.ldif total 0 -rw-------. 1 dirsrv dirsrv 10306 Jul 23 12:55 None-userroot-2021_07_23_12_55_00.ldif ...
6.3. Directory Server のバックアップ
- これらのデータベース内に格納されているデータを含むすべてのデータベースファイル注記Directory Server は、個別のデータベースのバックアップをサポートしません。
- トランザクションログ
- インデックス
dirsrv
ユーザーとして実行します。したがって、移行先ディレクトリーのパーミッションでは、このユーザーがファイルを作成できるようにする必要があります。
6.3.1. コマンドラインを使用した全データベースのバックアップ
- インスタンスが実行している場合には、以下のいずれかの方法を使用します。
- dsconf backup create コマンドを使用します。「dsconf backup create コマンドを使用した全データベースのバックアップ」を参照してください。
- cn=tasks エントリーを作成します。「cn=tasks エントリーを使用した全データベースのバックアップ」を参照してください。
- インスタンスがオフラインの場合は、dsctl db2bak コマンドを使用します。「サーバーがオフライン時のすべてのデータベースのバックアップ」を参照してください。
6.3.1.1. サーバーの実行中にすべてのデータベースのバックアップ
6.3.1.1.1. dsconf backup create コマンドを使用した全データベースのバックアップ
# dsconf -D "cn=Directory Manager" ldap://server.example.com backup create The backup create task has finished successfully
dsconf
は、バックアップを /var/lib/dirsrv/slapd-instance_name/bak/
ディレクトリーの instance_name-time_stamp
というサブディレクトリーに保存します。別の場所を指定するには、コマンドにディレクトリー名を追加します。
6.3.1.1.2. cn=tasks エントリーを使用した全データベースのバックアップ
cn
: タスクの一意の名前を設定します。nsDatabaseType
: バックアップするデータベースのタイプを設定します。Directory Server は、この属性の ldbm database 値のみをサポートします。
/var/lib/dirsrv/slapd-instance_name/bak/
)。完全なリストは、『Red Hat Directory Server Configuration, Command, and File Reference』の『cn=backup』セクションを参照してください。
# ldapadd -D "cn=Directory Manager" -W -H ldap://server.example.com -x dn: cn=example_backup,cn=export,cn=tasks,cn=config changetype: add objectclass: extensibleObject cn: example_backup nsDatabaseType: ldbm database
nsArchiveDir
属性を指定しないと、サーバーは /var/lib/dirsrv/slapd-instance_name/bak/
ディレクトリーの instance_name-time_stamp
という名前のサブディレクトリーにバックアップを保存します。
6.3.1.2. サーバーがオフライン時のすべてのデータベースのバックアップ
- インスタンスを停止します。
# dsctl instance_name stop
- データベースのバックアップを作成します。
# dsctl instance_name db2bak db2bak successful
注記dsctl db2bak コマンドは、dirsrv
ユーザーとしてバックアップとして実行されます。したがって、インストール先ディレクトリーのパーミッションでは、このユーザーがファイルとディレクトリーを作成できるようにする必要があります。宛先ディレクトリーをコマンドに追加しないと、サーバーは、/var/lib/dirsrv/slapd-instance_name/bak/
ディレクトリーのサブディレクトリーinstance_name-time_stamp
にバックアップを保存します。 - インスタンスを起動します。
# dsctl instance_name start
6.3.2. Web コンソールを使用した全データベースのバックアップ
- Web コンソールで Directory Server ユーザーインターフェイスを開きます。「Web コンソールを使用した Directory Server へのログイン」を参照してください。
- インスタンスを選択します。
- Actions ボタンをクリックして、Manage Backup を選択します。
- Create Backup をクリックします。
- バックアップの作成日時を示すタイムスタンプなど、バックアップの名前を入力します。
- Create Backup をクリックします。
/var/lib/dirsrv/slapd-instance_name/bak/
ディレクトリー内の指定した名前のサブディレクトリーに保存します。
6.3.3. 設定ファイル、証明書データベース、およびカスタムスキーマファイルのバックアップ
/etc/dirsrv/slapd-instance_name/
ディレクトリーには追加のファイルが保存されています。これらのファイルは、たとえば、ハードウェア障害後に別のサーバー上でインスタンスを復元するのに必要になります。
例6.2 /etc/dirsrv/slapd-instance_name/
ディレクトリーのバックアップ方法
/etc/dirsrv/slapd-instance_name/
のコンテンツをバックアップするには、ディレクトリーをコピーするか、アーカイブファイルに保存します。たとえば、/etc/dirsrv/slapd-instance_name/
ディレクトリーのコンテンツを /root/config_slapd-instance_name_time_stamp.tar.gz
ファイルに保存するには、次のコマンドを実行します。
# cd /etc/dirsrv/ # tar -zcvf /root/config_slapd-instance_name_$(date +%Y-%m-%d_%H-%M-%S).tar.gz slapd-instance_name/
6.3.4. グループのメンバーが Directory Server をバックアップすることの許可、およびグループメンバーの 1 つとしてのバックアップの実行
cn=Directory Manager
の認証情報を設定する必要がなくなるため、セキュリティーが向上します。また、グループを変更して、バックアップのパーミッションを簡単に許可し、取り消しすことができます。
6.3.4.1. グループが Directory Server をバックアップすることの許可
cn=backup_users,ou=groups,dc=example,dc=com
グループを追加し、このグループのメンバーがバックアップタスクを作成するのを許可します。
手順
cn=backup_users,ou=groups,dc=example,dc=com
グループを作成します。# dsidm -D "cn=Directory Manager" ldap://server.example.com -b "dc=example,dc=com" group create --cn backup_users
cn=backup_users,ou=groups,dc=example,dc=com
グループのメンバーがバックアップタスクを作成するのを許可するアクセス制御手順 (ACI) を追加します。# ldapadd -D "cn=Directory Manager" -W -H ldap://server.example.com dn: cn=config changetype: modify add: aci aci: (target = "ldap:///cn=backup,cn=tasks,cn=config")(targetattr="*") (version 3.0 ; acl "permission: Allow backup_users group to create backup tasks" ; allow (add, read, search) groupdn = "ldap:///cn=backup_users,ou=groups,dc=example,dc=com";) - add: aci aci: (target = "ldap:///cn=config")(targetattr = "nsslapd-bakdir || objectClass") (version 3.0 ; acl "permission: Allow backup_users group to access bakdir attribute" ; allow (read,search) groupdn = "ldap:///cn=backup_users,ou=groups,dc=example,dc=com";)
- ユーザーを作成します。
- ユーザーアカウントを作成します。
# dsidm -D "cn=Directory Manager" ldap://server.example.com -b "dc=example,dc=com" user create --uid="example" --cn="example" --uidNumber="1000" --gidNumber="1000" --homeDirectory="/home/example/" --displayName="Example User"
- ユーザーアカウントのパスワードを設定します。
# dsidm -D "cn=Directory Manager" ldap://server.example.com -b "dc=example,dc=com" account reset_password "uid=example,ou=People,dc=example,dc=com" "password"
uid=example,ou=People,dc=example,dc=com
ユーザーをcn=backup_users,ou=groups,dc=example,dc=com
グループに追加します。# dsidm -D "cn=Directory Manager" ldap://server.example.com -b "dc=example,dc=com" group add_member backup_users uid=example,ou=People,dc=example,dc=com
検証
- cn=config エントリーに設定された ACI を表示します。
# ldapsearch -o ldif-wrap=no -LLLx -D "cn=directory manager" -W -H ldap://server.example.com -b cn=config aci=* aci -s base dn: cn=config aci: (target = "ldap:///cn=backup,cn=tasks,cn=config")(targetattr="*")(version 3.0 ; acl "permission: Allow backup_users group to create backup tasks" ; allow (add, read, search) groupdn = "ldap:///cn=backup_users,ou=groups,dc=example,dc=com";) aci: (target = "ldap:///cn=config")(targetattr = "nsslapd-bakdir || objectClass")(version 3.0 ; acl "permission: Allow backup_users group to access bakdir attribute" ; allow (read,search) groupdn = "ldap:///cn=backup_users,ou=groups,dc=example,dc=com";) ...
6.3.4.2. 通常のユーザーとしてのバックアップの実行
cn=Directory Manager
ではなく、通常のユーザーとしてバックアップを実行できます。
前提条件
cn=backup_users,ou=groups,dc=example,dc=com
グループのメンバーがデータをバックアップするのを許可している。「グループが Directory Server をバックアップすることの許可」を参照してください。- バックアップの実行に使用するユーザーが
cn=backup_users,ou=groups,dc=example,dc=com
グループのメンバーである。
手順
- 以下の方法のいずれかを使用してバックアップタスクを作成します。
- dsconf backup create コマンドの使用:
# dsconf -D uid=example,ou=People,dc=example,dc=com ldap://server.example.com backup create
- タスクの手動での作成:
# ldapadd -D uid=example,ou=People,dc=example,dc=com -W -H ldap://server.example.com dn: cn=backup-2021_07_23_12:55_00,cn=backup,cn=tasks,cn=config changetype: add objectClass: extensibleObject nsarchivedir: /var/lib/dirsrv/slapd-instance_name/bak/backup-2021_07_23_12:55_00 nsdatabasetype: ldbm database cn: backup-2021_07_23_12:55_00
検証
- バックアップが作成されたことを確認します。
# ls -l /var/lib/dirsrv/slapd-instance_name/bak/ total 0 drwx------. 3 dirsrv dirsrv 108 Jul 23 12:55 backup-2021_07_23_12_55_00 ...
6.4. Directory Server の復元
dirsrv
ユーザーとして実行します。そのため、バックアップを含むディレクトリーのパーミッションにより、このユーザーがファイルを読み取ることができます。
6.4.1. コマンドラインでのすべてのデータベースの復元
- インスタンスが実行している場合には、以下のいずれかの方法を使用します。
- dsconf backup restore コマンドを使用します。「dsconf backup restore コマンドを使用した全データベースの復元」を参照してください。
- cn=tasks エントリーを作成します。「cn=tasks エントリーを使用した全データベースの復元」を参照してください。
- インスタンスがオフラインの場合は、dsctl bak2db コマンドを使用します。「サーバーがオフライン時の全データベースの復元」を参照してください。
6.4.1.1. サーバーの実行中にすべてのデータベースの復元
6.4.1.1.1. dsconf backup restore コマンドを使用した全データベースの復元
/var/lib/dirsrv/slapd-instance_name/bak/instance_name-time_stamp/
ディレクトリーに保存されているバックアップを復元するには、次のコマンドを実行します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com backup restore /var/lib/dirsrv/slapd-instance_name/bak/instance_name-time_stamp/ The backup restore task has finished successfully
6.4.1.1.2. cn=tasks エントリーを使用した全データベースの復元
cn
: タスクの一意の名前を設定します。nsArchiveDir
: バックアップが含まれるディレクトリーへのパスを設定します。nsDatabaseType
: 復元するデータベースのタイプを設定します。Directory Server は、この属性の ldbm database 値のみをサポートします。
/var/lib/dirsrv/slapd-instance_name/bak/instance_name-time_stamp/
ディレクトリーに保存されているバックアップからすべてのデータベースを復元するタスクを追加するには、次のコマンドを実行します。
# ldapadd -D "cn=Directory Manager" -W -H ldap://server.example.com -x dn: cn=example_restore,cn=import,cn=tasks,cn=config changetype: add objectclass: extensibleObject cn: example_restore nsArchiveDir: /var/lib/dirsrv/slapd-instance_name/bak/instance_name-time_stamp/ nsDatabaseType: ldbm database
6.4.1.2. サーバーがオフライン時の全データベースの復元
- インスタンスを停止します。
# dsctl instance_name stop
- データベースを復元します。たとえば、
/var/lib/dirsrv/slapd-instance_name/bak/instance_name-time_stamp/
ディレクトリーに保存されているバックアップからすべてのデータベースを復元するタスクを追加するには、次のコマンドを実行します。# dsctl instance_name bak2db /var/lib/dirsrv/slapd-instance_name/bak/instance_name-time_stamp/ bak2db successful
注記dsctl bak2db コマンドは、dirsrv
ユーザーとして復元として実行されます。したがって、ソースディレクトリーのパーミッションでは、このユーザーがファイルとディレクトリーを読み取りできるようにする必要があります。 - インスタンスを起動します。
# dsctl instance_name start
6.4.2. Web コンソールを使用した全データベースの復元
- Web コンソールで Directory Server ユーザーインターフェイスを開きます。「Web コンソールを使用した Directory Server へのログイン」を参照してください。
- インスタンスを選択します。
- Actions ボタンをクリックして、Manage Backups を選択します。表示されるウィンドウには、
/var/lib/dirsrv/slapd-instance_name/bak/
ディレクトリーで利用可能なバックアップが表示されます。 - 復元するバックアップの横にある Actions メニューを開き、Restore Backup を選択します。
- Yes をクリックして確定します。
6.4.3. 複製されたエントリーが含まれるデータベースの復元
- コンシューマーサーバーも復元される。(データが同期されるように) 全く同じ時間に作成されたバックアップからすべてのデータベースを復元するような非常にまれな状況においては、コンシューマーはサプライヤーと同期が取れた状態のままであるため、特に何もする必要はありません。レプリケーションは中断せずに再開します。
- サプライヤーだけが復元します。サプライヤーのみが復元された場合や、コンシューマーが別のバックアップから復元された場合は、サプライヤーがコンシューマーを再初期化して、データベースのデータを更新します。サプライヤーのみが復元された場合や、コンシューマーが別のバックアップから復元された場合は、サプライヤーがコンシューマーを再初期化して、データベースのデータを更新します。
- サプライヤーサーバーでチェンジログエントリーの有効期限が切れていません。データベースのバックアップの取得後にサプライヤーの変更ログが期限切れになっていない場合は、ローカルコンシューマーを復元し、通常の操作を継続します。この状態は、cn=changelog5,cn=config エントリーで、最大 changelog age 属性
nsslapd-changelogmaxage
に設定された値よりも短い期間内にバックアップを取得した場合に限り発生します。このオプションの詳細は、『Red Hat Directory Server 設定、コマンド、およびファイルリファレンス』 を参照してください。Directory Server は、レプリカとその変更ログの間の互換性を自動的に検出します。不一致が検出されると、サーバーは古い変更ログファイルを削除し、空のファイルを新たに作成します。 - 変更ログエントリーが、ローカルバックアップを作成した後にサプライヤーサーバー上で期限切れになる。変更ログエントリーの有効期限が切れている場合は、コンシューマーが再初期化される。コンシューマーの再初期化に関する詳細は、「コンシューマーの初期化」を参照してください。
例6.3 Directory Server のレプリケーショントポロジーの復元
- 最初のサプライヤーを復元します。dsconf backend import コマンドを使用して、データをインポートします。「コマンドラインでのインポート」を参照してください。
- レプリケーションを使用して残りのサーバーをオンラインに初期化します。
- 最初のサプライヤーから 2 番目のサプライヤーを初期化します。
- サプライヤーからコンシューマーを初期化します。
詳細については、「コンシューマーの初期化」 を参照してください。 - 各サーバーでレプリケーションのステータスを表示し、レプリケーションが正しく機能していることを確認します。詳細については、「特定のレプリカ合意の状態の表示」 を参照してください。
第7章 属性および値の管理
7.1. 属性の一意性の有効化
7.1.1. Attribute Uniqueness プラグインの新規設定レコードの作成
dsconf -D "cn=Directory Manager" ldap://server.example.com plugin attr-uniq add "Example" --attr-name uid
7.1.2. 接尾辞またはサブツリーにおける属性一意の設定
7.1.2.1. コマンドラインで接尾辞またはサブツリーに対する属性一意の設定
- たとえば mail Attribute Uniqueness という名前の Attribute Uniqueness プラグインの新たな設定レコードを作成します。詳細については、「Attribute Uniqueness プラグインの新規設定レコードの作成」 を参照してください。
- プラグイン設定レコードを有効にします。
# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin attr-uniq enable "mail Attribute Uniqueness"
mail
属性に保存されている値は、内部で一意である必要があります。たとえば、ou=Engineering,dc=example,dc=com および ou=Sales,dc=example,dc=com サブツリーなどです。# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin attr-uniq set "mail Attribute Uniqueness" --attr-name mail --subtree ou=Engineering,dc=example,dc=com ou=Sales,dc=example,dc=com
- 必要に応じて、このプラグイン設定レコードに設定されたすべてのサブツリーで一意性を設定するには、以下を実行します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin attr-uniq set "mail Attribute Uniqueness" --across--all-subtrees=on
- インスタンスを再起動します。
# dsctl instance_name restart
7.1.2.2. Web コンソールを使用した接尾辞またはサブツリーに対する属性の一意の設定
- Web コンソールで Directory Server ユーザーインターフェイスを開きます。「Web コンソールを使用した Directory Server へのログイン」を参照してください。
- インスタンスを選択します。
- Plugins メニューを開きます。
- Attribute Uniqueness プラグインを選択します。
- Add Config をクリックします。
- フィールドを入力し、設定を有効にします。以下に例を示します。
図7.1 属性一意設定の追加
- インスタンスを再起動します。「Web コンソールを使用した Directory Server インスタンスの起動および停止」を参照してください。
7.1.3. オブジェクトクラスに対する属性の一意性の設定
uniqueness-attribute-name
に設定された属性の値がこのサブツリー内で一意であることを確認します。
- たとえば mail Attribute Uniqueness という名前の Attribute Uniqueness プラグインの新たな設定レコードを作成します。詳細については、「Attribute Uniqueness プラグインの新規設定レコードの作成」 を参照してください。
- プラグイン設定レコードを有効にします。
# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin attr-uniq enable "mail Attribute Uniqueness"
mail
属性に保存される値は、nsContainer オブジェクトクラスが含まれるエントリーで一意である必要があります。# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin attr-uniq set "mail Attribute Uniqueness" --top-entry-oc=nsContainer
- 必要に応じて、チェックされるオブジェクトの範囲を制限できます。サーバーが nsContainer オブジェクトクラスを含むエントリーの下にあるエントリーのサブセットのみをチェックするようにするには、
uniqueness-subtree-entries-oc
パラメーターに追加のオブジェクトクラスを設定します。この追加クラスも存在している必要があります。たとえば、nsContainer オブジェクトクラスセットが含まれるエントリーにあるすべてのエントリーでmail
属性を一意にする必要があります。ただし、プラグインは、inetOrgPerson など、この属性を提供するオブジェクトクラスが含まれるエントリーでmail
のみを検索します。この場合は、以下を入力します。# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin attr-uniq set "mail Attribute Uniqueness" --subtree-entries-oc=inetOrgPerson
- インスタンスを再起動します。
# dsctl instance_name restart
7.1.4. 属性の一意性プラグイン設定パラメーター
例7.1 プラグイン固有の属性を使用した属性の一意性プラグイン設定
dn: cn=Example Attribute Uniqueness,cn=plugins,cn=config nsslapd-pluginEnabled: on uniqueness-attribute-name: attribute_name uniqueness-top-entry-oc: objectclass1 uniqueness-subtree-entries-oc: objectclass2
7.2. サービスのクラスの割り当て
- CoS 定義エントリー。CoS 定義エントリーは、使用される CoS のタイプを識別します。ロール定義エントリーと同様に、LDAPsubentry オブジェクトクラスから継承されます。CoS 定義エントリーは、有効なブランチの下にあります。
- テンプレートエントリー。CoS テンプレートエントリーには、共有属性値のリストが含まれます。テンプレートエントリー属性値への変更は、CoS の範囲内のすべてのエントリーに自動的に適用されます。1 つの CoS に、複数のテンプレートエントリーが関連付けられている場合があります。
7.2.1. CoS 定義エントリーの概要
- ポインター CoS。ポインター CoS は、テンプレート DN のみを使用してテンプレートエントリーを特定します。
- 間接的な CoS。間接 CoS は、ターゲットエントリーの属性の 1 つを使用してテンプレートエントリーを識別します。たとえば、間接的な CoS はターゲットエントリーの
manager
属性を指定する場合があります。次に、manager
属性の値を使用してテンプレートエントリーを特定します。ターゲットエントリーの属性は単値であり、DN が含まれる必要があります。 - Classic CoS。Classic CoS は、テンプレートエントリーのベース DN とターゲットエントリーの属性の 1 つの値を使用してテンプレートエントリーを特定します。
7.2.2. CoS テンプレートエントリーの概要
- テンプレートエントリーの DN のみ。このタイプのテンプレートは Pointer CoS 定義に関連付けられます。
- ターゲットエントリーの属性の 1 つの値。テンプレートエントリーに相対 DN を提供するために使用される属性は、
cosIndirectSpecifier
属性を使用して CoS 定義エントリーに指定されます。このタイプのテンプレートは、間接 CoS 定義に関連付けられます。 - CoS がテンプレートの 1 つのレベル検索を実行するサブツリーの DN と、ターゲットエントリーの属性の 1 つの値の組み合わせ。このタイプのテンプレートは、Classic CoS 定義に関連付けられます。
7.2.3. Pointer CoS の仕組み
図7.2 Pointer CoS のサンプル

postalCode
属性がエントリー cn=wholiday,ou=people,dc=example,dc=com に対してクエリーされるたびに、Directory Server は、テンプレートエントリー cn=exampleUS,cn=data で使用可能な値を返します。
7.2.4. 間接的な CoS の仕組み
manager
属性を使用してテンプレートエントリーを識別する間接的な CoS を作成します。図7.3「間接的な CoS の例」に示されるように、3 つの CoS エントリーが表示されます。
図7.3 間接的な CoS の例

manager
属性) が含まれます。William のマネージャーは Carla Fuentes であるため、manager
属性にはテンプレートエントリーの DN へのポインター cn=Carla Fuentes,ou=people,dc=example,dc=com が含まれます。テンプレートエントリーは次に、318842 の departmentNumber
属性値を提供します。
7.2.5. Classic CoS の仕組み
図7.4 Classic CoS のサンプル

cosSpecifier
属性は、employeeType
属性を指定しています。この属性は、テンプレート DN と組み合わせて、テンプレートエントリーを cn=sales,cn=exampleUS,cn=data として特定します。その後、テンプレートエントリーは、postalCode
属性値をターゲットエントリーに提供します。
7.2.6. 物理属性値の処理
cosAttribute
属性には、サービスのクラスによって管理される別の属性の名前が含まれます。この属性は、属性値の後に override 修飾子を許可します。属性値の生成時に、CoS がエントリーの既存の属性値を処理する方法を設定します。
cosAttribute: attribute_name override
- default: エントリーに対応する属性値が格納されてない場合のみ、生成された値を返します。
- override: エントリーに値が保存されている場合でも、常に CoS によって生成された値を返します。
- operational: 生成された属性が検索で明示的に要求されている場合にのみ、生成された属性を返します。操作属性は、返されるためにスキーマチェックに合格する必要はありません。operational を使用すると、既存の属性値も上書きされます。注記属性は、スキーマで操作可能として定義されている場合にのみ操作可能にすることができます。たとえば、CoS が
description
属性の値を生成する場合、この属性はスキーマで稼働していないため、operational 修飾子を使用することはできません。 - operational-default: エントリーに対応する属性値が格納されておらず、検索で明示的に要求された場合にのみ、生成された値を返します。
postalCode
属性の値を生成するテンプレートエントリー cn=exampleUS,ou=data,dc=example,dc=com に関連付けられていることを示しています。override 修飾子は、この値が postalCode
属性のエントリーによって保存される値よりも優先されることを示しています。
dn: cn=pointerCoS,dc=example,dc=com
objectclass: top
objectclass: cosSuperDefinition
objectclass: cosPointerDefinition
cosTemplateDn: cn=exampleUS,ou=data,dc=example,dc=com
cosAttribute: postalCode override
7.2.7. CoS を使用した多値属性の処理
- 複数の CoS が生成する属性をターゲットエントリーにマージするルールを作成。これにより、ターゲットエントリーの値が複数表示されます。
- 競合する CoS 定義の中から 1 つの CoS 値を選択するように優先度を設定。これにより、ターゲットエントリーに 1 つの値が生成されます。
cosPriority
属性をサポートしません。
cosAttribute: attribute override merge-schemes
cosAttribute
に、同じ merge-schemes および override 修飾子を設定する必要があります。それ以外の場合は、1 つの組み合わせが可能なすべての CoS 定義から任意に選択されます。
- 1 つの CoS テンプレートエントリーに管理 CoS 属性のインスタンスが複数含まれるため、ターゲットエントリーに多値が作成されます。以下に例を示します。
dn: cn=server access template,dc=example,dc=com objectclass: top objectclass: extensibleObject objectclass: cosTemplate accessTo: mail.example.com accessTo: irc.example.com
注記このメソッドは、Classic CoS でのみ動作します。 - 複数の CoS 定義が同じターゲット属性にサービスクラスを定義する可能性があるため、複数のテンプレートエントリーがあります。以下に例を示します。
dn: cn=mail template,dc=example,dc=com objectclass: top objectclass: extensibleObject objectclass: cosTemplate accessTo: mail.example.com dn: cn=chat template,dc=example,dc=com objectclass: top objectclass: extensibleObject objectclass: cosTemplate accessTo: irc.example.com
cosSpecifier
属性を使用できます。テンプレートの優先度は、cosPriority
属性を使用して設定します。この属性は、特定のテンプレートのグローバル優先度を表します。0 の優先度が最も優先されます。
dn: cn=data,dc=example,dc=com objectclass: top objectclass: extensibleObject objectclass: cosTemplate departmentNumber: 71776 cosPriority: 0
departmentNumber
属性の値が含まれます。優先度はゼロであるため、このテンプレートは、別の departmentNumber
値を定義する他の競合するテンプレートよりも優先されます。
cosPriority
属性が含まれないテンプレートは、優先度が最も低いとみなされます。2 つ以上のテンプレートが属性値を提供し、優先度が同じ (または優先順位がない) 場合は、値が任意に選択されます。
cosPriority
値の動作は Directory Server では定義されないため、負の値を入力しないでください。
7.2.8. CoS 指定の属性の検索
postalCode
属性を設定できます。ただし、これらの CoS 定義属性に対する検索は、通常のエントリーに対する検索のように動作しません。
- Ted Morris の
postalCode
属性は、CoS によって定義されます。 - Barbara Jensen の
postalCode
属性は、Barbara Jensen 自身のエントリーに設定されます。 postalCode
属性はインデックス化されます。
- Ted Morris の
postalCode
属性は、CoS によって定義されます。 - Barbara Jensen の
postalCode
属性は、Barbara Jensen 自身のエントリーに設定されます。 postalCode
属性はインデックス化 されません。
cosAttribute
属性に指定された ID です。つまり、属性のローカル値は CoS 値を上書きできます。CoS に上書きが設定されていると、エントリーのローカル値があるかぎり、ldapsearch 操作は属性がインデックス化された場合でもエントリーの値を返します。CoS を持ち、ローカル値を持たない他のエントリーは、ldapsearch 操作では返されません。
7.2.9. アクセス制御と CoS
7.2.10. コマンドラインでの CoS の管理
7.2.10.1. コマンドラインでの CoS 定義エントリーの作成
cosTemplateDn
属性で指定されたエントリー DN 値を使用してテンプレートエントリーを識別します。
例7.2 Pointer CoS エントリーの例
dn: cn=pointerCoS,dc=example,dc=com objectclass: top objectclass: cosSuperDefinition objectclass:cosPointerDefinition
cosTemplateDn
:DN_string cosAttribute:list_of_attributes qualifier cn: pointerCoS
cosIndirectSpecifier
属性で指定されているターゲットエントリーの属性のいずれかの値に基づいてテンプレートエントリーを識別します。これは、例7.3「間接的な CoS エントリーの例」 で説明されています。
例7.3 間接的な CoS エントリーの例
dn: cn=indirectCoS,dc=example,dc=com objectclass: top objectclass: cosSuperDefinition objectclass:cosIndirectDefinition
cosIndirectSpecifier
:attribute_name cosAttribute:list_of_attributes qualifier cn: indirectCoS
cosTemplateDn
属性に設定) と、ターゲットエントリーの属性のいずれかの値 (cosSpecifier
属性に設定) の両方を使用してテンプレートエントリーを特定します。これは、例7.4「Classic CoS エントリーの例」 で説明されています。
例7.4 Classic CoS エントリーの例
dn: cn=classicCoS,dc=example,dc=com objectclass: top objectclass: cosSuperDefinition objectclass:cosClassicDefinition
cosTemplateDn
:DN_stringcosSpecifier
:attribute_name cosAttribute:list_of_attributes qualifier cn: classicCoS
cosAttribute
)。CoS の目的は、複数のエントリーに属性値を提供することです。cosAttribute
属性は、CoS が生成する属性を定義します。
7.2.10.2. コマンドラインでの CoS テンプレートエントリーの作成
cosAttribute
属性で指定) によって生成された属性とその属性の値も含まれます。
postalCode
属性の値を提供する CoS テンプレートエントリーは、以下のようになります。
dn:cn=exampleUS,ou=data,dc=example,dc=com objectclass: top objectclass: extensibleObject objectclass: cosTemplate postalCode: 44438
7.2.10.3. Pointer CoS の例
- ldapmodify を使用して、新しい pointer CoS 定義エントリーを dc=example,dc=com 接尾辞に追加します。
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: cn=pointerCoS,dc=example,dc=com changetype: add objectclass: top objectclass: cosSuperDefinition objectclass: cosPointerDefinition cosTemplateDn: cn=exampleUS,ou=data,dc=example,dc=com cosAttribute: postalCode
- テンプレートエントリーを作成します。
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: cn=exampleUS,ou=data,dc=example,dc=com changetype: add objectclass: top objectclass: extensibleObject objectclass: cosTemplate postalCode: 44438
postalCode
属性に保存された値を dc=example,dc=com 接尾辞に置かれているエントリーに提供します。これらのエントリーはターゲットエントリーです。
7.2.10.4. 間接的な CoS の例
manager
属性を使用して CoS テンプレートエントリーを識別します。これは、属性の値によって異なります。
- ldapmodify を使用して、dc=example,dc=com 接尾辞に新しい間接 CoS 定義エントリーを追加します。
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: cn=indirectCoS,dc=example,dc=com changetype: add objectclass: top objectclass: cosSuperDefinition objectclass: cosIndirectDefinition cosIndirectSpecifier: manager cosAttribute: departmentNumber
departmentNumber
属性がすでに含まれる場合は、他の属性をマネージャーエントリーに追加する必要はありません。この属性は定義エントリーの cosIndirectSpecifier
属性に指定されるため、定義エントリーは manager
属性が含まれるエントリーのターゲット接尾辞 (dc=example,dc=com 下のエントリー) を検索します。次に、一覧表示された manager エントリーの departmentNumber
値を確認します。departmentNumber
属性の値は、manager
属性を持つマネージャーの下位すべてに自動的にリレーされます。departmentNumber
の値は、異なるマネージャーのエントリーに記載されている部門番号によって異なります。
7.2.10.5. Classic CoS の例
cosSpecifier
属性で指定された属性の組み合わせを使用して、郵便番号コードを自動的に生成する Classic CoS を作成します。
- ldapmodify を使用して、新しいクラス CoS 定義エントリーを dc=example,dc=com 接尾辞に追加します。
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: cn=classicCoS,dc=example,dc=com changetype: add objectclass: top objectclass: cosSuperDefinition objectclass: cosClassicDefinition cosTemplateDn: cn=classicCoS,dc=example,dc=com cosSpecifier: businessCategory cosAttribute: postalCode override
- 営業部門およびマーケティング部門のテンプレートエントリーを作成します。CoS 属性をテンプレートエントリーに追加します。テンプレートの
cn
は、ターゲットエントリーのbusinessCategory
属性の値を設定し、テンプレートの値に応じて属性を追加または上書きされます。# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: cn=sales,cn=classicCoS,dc=example,dc=com changetype: add objectclass: top objectclass: extensibleObject objectclass: cosTemplate postalCode: 44438 - dn: cn=marketing,cn=classicCoS,dc=example,dc=com changetype: add objectclass: top objectclass: extensibleObject objectclass: cosTemplate postalCode: 99111
businessCategory
属性と cosTemplateDn
の組み合わせによって、2 つのテンプレートのいずれかに到達できます。1 つ目は営業テンプレートで、営業部門に従業員固有の郵便番号コードを提供します。マーケティングテンプレートは、マーケティング部門の従業員固有の郵便番号コードを提供します。
7.2.10.6. CoS エントリーの検索
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: cn=pointerCoS,ou=People,dc=example,dc=com changetype: add objectclass: ldapSubEntry
ldapsearch
ユーティリティーで (objectclass=ldapSubEntry) フィルターを使用して、ldapSubEntry オブジェクトクラスを含むエントリーを検索します。以下に例を示します。
# ldapsearch -x -s sub -b ou=People,dc=example,dc=com "(|(objectclass=*)(objectclass=ldapSubEntry))"
7.2.10.7. costargettree 属性
costargettree
属性は、CoS スキーマが適用されるサブツリーを定義します。スキーマと複数の CoS スキーマの costargettree
の値は、任意にターゲットツリーと重複する可能性があります。
表7.1 costargettree 属性
OID | 2.16.840.1.113730.3.1.552 |
Syntax | DirectoryString |
多値または単一値 | 単一値 |
定義される場所 | Directory Server |
7.2.11. ロールベースの属性の作成
nsRole
属性を cosSpecifier
として使用します。nsRole
属性が多値指定できるため、複数のテンプレートエントリーを持つ CoS スキームを定義できます。使用するテンプレートエントリーの曖昧さを解決するには、CoS テンプレートエントリーに cosPriority
属性を追加します。
dn: cn=ManagerRole,ou=people,dc=example,dc=com objectclass: top objectclass: nsRoleDefinition objectclass: nsComplexRoleDefinition objectclass: nsFilteredRoleDefinition cn: ManagerRole nsRoleFilter: ou=managers Description: filtered role for managers
nsRoleFilter
属性は仮想属性の値を受け付けません。
dn: cn=managerCOS,dc=example,dc=com objectclass: top objectclass: cosSuperDefinition objectclass: cosClassicDefinition cosTemplateDn: cn=managerCOS,dc=example,dc=com cosSpecifier: nsRole cosAttribute: mailboxquota override
cosTemplateDn
属性は、cosSpecifier
属性で指定された属性 (ターゲットエントリーの nsRole
属性) とともに CoS テンプレートエントリーを識別する値を提供します。CoS テンプレートエントリーは、mailboxquota
属性の値を提供します。override の他の修飾子は、ターゲットエントリーの既存の mailboxquota
属性値をオーバーライドするように、CoS に指示します。
dn:cn="cn=ManagerRole,ou=people,dc=example,dc=com",cn=managerCOS,dc=example,dc=com objectclass: top objectclass: extensibleObject objectclass: cosTemplate mailboxquota: 1000000
mailboxquota
属性の値 1000000 を指定します。
7.3. 属性値の管理属性のリンク
7.3.1. リンク元属性の概要
linkType
) およびプラグインによって自動的に維持される 1 つの属性 (managedType
) を設定します。
図7.5 リンク先属性の基本設定

図7.6 リンク先属性プラグインを特定のサブツリーに制限

- 管理属性とリンク先属性の両方で、属性定義で識別名の構文が必要です。リンク先属性は基本的にクロス参照で管理されます。プラグインがこれらの相互参照を処理する方法は、属性値からエントリーの DN をプルすることで行われます。カスタムスキーマ要素のプランニングに関する情報は、12章ディレクトリースキーマの管理を参照してください。
- 各リンク先属性プラグインインスタンスはローカルで、管理 属性は一部レプリケーションを使用してレプリケーションからブロックする必要があります。あるサプライヤーに加えられた変更は、プラグインが自動的に発生し、対応するディレクトリーエントリーの値を管理するため、データはサーバー全体で一貫性を維持します。ただし、リンクされたエントリー間でデータの一貫性を保つには、プラグインインスタンスで管理属性を維持する必要があります。つまり、管理属性値は、マルチサプライヤーレプリケーション環境であっても、レプリケーションプロセスではなく、プラグインプロセスによってのみ維持される必要があります。一部レプリケーションの使用方法は、「一部レプリケーションを使用した属性のサブセットの複製」を参照してください。
7.3.2. リンク元属性プラグイン構文の確認
linkType
属性において、管理者が手動で管理する属性managedType
属性に含まれる、プラグインによって動的に作成される属性- 必要に応じて、プラグインを
linkScope
属性のディレクトリーツリーの特定の部分に制限するスコープ
例7.5 リンク先属性のプラグインインスタンスエントリーの例
dn: cn=Manager Link,cn=Linked Attributes,cn=plugins,cn=config objectClass: top objectClass: extensibleObject cn: Manager Link linkType: directReport managedType: manager linkScope: ou=people,dc=example,dc=com
7.3.3. 属性リンクの設定
- これが有効になっていない場合は、Linked Attributes プラグインを有効にします。詳細については、「プラグインの有効化および無効化」 を参照してください。
- プラグインインスタンスを作成します。
--managed-type
パラメーターおよび--link-type
パラメーターの両方が必要です。以下の例は、dsconf を使用して作成したプラグインインスタンスを示しています。# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin linked-attr config "Manager Link" add --link-type=directReport --managed-type=manager
- インスタンスを再起動します。
# dsctl instance_name restart
7.3.4. 属性リンクのクリーンアップ
7.3.4.1. リンク先属性の再生成
# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin linked-attr fixup
# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin linked-attr fixup "cn=Manager Link,cn=Linked Attributes,cn=plugins,cn=config"
7.3.4.2. ldapmodify を使用したリンク先属性の再生成
dse.ldif
ファイルの cn=tasks 設定エントリーで発生するため、ldapmodify を使用してエントリーを追加してタスクを開始することもできます。タスクが完了すると、エントリーはディレクトリーから削除されます。
cn
のみですが、ttl
属性にはタイムアウト期間を設定できます。ldapmodify の使用:
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: cn=example,cn=fixup linked attributes,cn=tasks,cn=config changetype: add cn:example ttl: 5
dse.ldif
設定から削除されるため、同じタスクエントリーを継続的に再利用できます。
7.4. 一意の数値属性値の割り当ておよび管理
uidNumber
や gidNumber
などの一意の番号が必要です。Directory Server は、DNA (Distributed Numeric Assignment) プラグインを使用して、指定された属性に一意の番号を自動的に生成して提供できます。
7.4.1. 動的番号の割り当ての概要
7.4.1.1. フィルター、検索、およびターゲットエントリー
7.4.1.2. 範囲および割り当て番号
- 最も単純なケースでは、属性がない場合に、unique-number 属性を必要とするオブジェクトクラスを持つディレクトリーにユーザーエントリーが追加されます。管理属性に値を持たないエントリーを追加すると、DNA プラグインによる値の割り当てが発生します。このオプションは、一意の値を 1 つの属性に割り当てるように DNA プラグインが設定されている場合に限り機能します。
- 同様の管理可能なオプションは、マジック番号 を使用することです。このマジックナンバーは、マネージド属性のテンプレート値であり、サーバーの範囲外のもの、数字、または単語でさえあり、プラグインは新しい割り当て値に置き換える必要があると認識します。マジック値でエントリーが追加され、エントリーが設定された DNA プラグインの範囲およびフィルター内にある場合は、プラグインでマジック番号を使用した新しい値の生成が自動的に発生します。下の例では、ldapmodify の使用に基づいて、0 をマジックナンバーとして追加します。
dn: uid=jsmith,ou=people,dc=example,dc=com changetype: add objectClass: top objectClass: person objectClass: posixAccount uid: jsmith cn: John Smith
uidNumber: 0
gidNumber: 0
....DNA プラグインは、新規の一意の値のみを生成します。DNA プラグインが制御する属性に特定の値を使用するためにエントリーを追加または変更した場合には、指定した番号が使用されます。DNA プラグインは、その番号を上書きしません。
7.4.1.3. 同じ範囲の複数の属性
- 一意の番号の 1 つの範囲から、1 つの属性タイプに割り当てられた 1 つの番号。
- 1 つのエントリーの 2 つの属性に割り当てられた同じ一意の番号。
- 2 つの異なる属性は、同じ範囲の一意の数字から 2 つの異なる数字を割り当てていました。
employeeID
を割り当てる際には、各従業員エントリーに一意の employeeID
が割り当てられます。
uidNumber
と gidNumber
を posixAccount エントリーに割り当てると、DNA プラグインは同じ数を両方の属性に割り当てます。これを行うには、マジック値を指定して、両方の管理属性を変更操作に渡します。ldapmodify の使用:
# ldapmodify -D "cn=Directory Manager" -W -x dn: uid=jsmith,ou=people,dc=example,dc=com changetype: modify add: uidNumber uidNumber: 0 - add:gidNumber gidNumber: 0
uidNumber
属性を許可しませんが、gidNumber
を許可します。DNA プラグインが uidNumber
と gidNumber
の両方を管理する場合は、posixGroup エントリーが作成されると、gidNumber
の一意の番号が uidNumber
および gidNumber
属性と同じ範囲から割り当てられます。プラグインが管理するすべての属性に同じプールを使用すると、一意の数字の割り当てを維持し、異なるエントリーの uidNumber
と gidNumber
が異なる範囲から割り当てられ、同じ 一意 の番号になる状況を防ぐことができます。
# ldapmodify -D "cn=Directory Manager" -W -x dn: uid=jsmith,ou=people,dc=example,dc=com changetype: modify add: uidNumber uidNumber: 0 ^D # ldapmodify -D "cn=Directory Manager" -W -x dn: uid=jsmith,ou=people,dc=example,dc=com changetype: modify add: employeeId employeeId: magic
例7.6 DNA および一意の銀行口座番号
primaryAccount
属性および customerID
属性に同じ一意の番号を使用します。銀行の例の管理者は、DNA プラグインが同じ範囲から両方の属性に一意の値を割り当てるよう設定していました。
secondaryAccount
属性を管理するように設定しますが、エントリーの作成、secondaryAccount
属性および primaryAccount
属性の割り当ての後 にのみ customerID
属性を追加します。これにより、primaryAccount
および customerID
は、同じ一意の番号を共有し、secondaryAccount
番号は完全に一意ですが、それでも同じ範囲の番号からのものです。