12.12. 構文の検証の使用

構文の検証では、Directory Server は、属性の値が、その属性の定義に指定された構文のルールに従うことを確認します。たとえば、構文の検証では、新しい telephoneNumber 属性に、実際にその値に有効な電話番号が指定されていることを確認します。
重要
Red Hat は、構文の検証を無効にしないことを推奨します。

12.12.1. 構文の検証の概要

スキーマチェックと同様に、検証によりディレクトリーの変更がレビューされ、構文に違反する変更を拒否します。オプションとして追加の設定を行い、構文検証により構文違反に関する警告メッセージをログに記録し、変更を拒否したり、変更プロセスを正常に実行できるようにしたりすることもできます。
この機能は、バイナリー構文 (検証できない) および標準以外の構文 (定義された必要な形式がない) を除き、すべての属性構文を検証します。構文は RFC 4514 に対して検証されます。

12.12.2. 構文の検証およびその他の Directory Server 操作

構文の検証は、エントリーの作成 (add) や属性の編集 (modify) などの標準の LDAP 操作に主に関係します。ただし、属性の構文の検証は他の Directory Server 操作に影響を及ぼす可能性があります。

データベース暗号化

通常の LDAP 操作では、値がデータベースに書き込まれる直前に属性は暗号化されます。これは、属性構文の検証 後に 暗号化が実行されることを意味します。

暗号化されたデータベース (10章属性暗号化の設定 で説明されているように) をエクスポートおよびインポートすることができます。通常、これらのエクスポート操作およびインポート操作は db2ldif および ldif2db とともに -E フラグを使用して行うことが強く推奨されます。これにより、インポート操作で構文の検証が問題になる可能性もあります。ただし、-E フラグを使用せずに暗号化されたデータベースをエクスポートする場合は (サポートされていない)、暗号化された値で LDIF が作成されます。この LDIF をインポートすると、暗号化された属性を検証できず、警告がログに記録され、インポートされたエントリーで属性検証はスキップされます。

同期

Windows Active Directory エントリーと Red Hat Directory Server エントリーでは、属性の許容構文または強制構文に違いがある場合があります。この場合、構文の検証により Directory Server エントリーの RFC 標準が強制されるため、Active Directory の値を適切に同期できませんでした。

レプリケーション

Directory Server 11 インスタンスがコンシューマーに変更を複製するサプライヤーである場合は、構文検証の使用に問題はありません。ただし、レプリケーションのサプライヤーが古いバージョンの Directory Server であったり、構文の検証が無効になっていたりする場合は、Directory Server 11 コンシューマーは、サプライヤーが許可する属性値を拒否する可能性があるため、構文の検証をコンシューマーで使用しないでください。

12.12.2.1. コマンドラインを使用した構文検証のオンおよびオフを切り替え

構文の検証をオンまたはオフにするには、nsslapd-syntaxcheck パラメーターの値を設定します。構文の検証を無効にするには、次のコマンドを実行します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com config replace nsslapd-syntaxcheck=off
Successfully replaced "nsslapd-syntaxcheck"
nsslapd-syntaxcheck パラメーターの詳細は、Red Hat Directory Server の設定、コマンド、およびファイルリファレンス で、パラメーターの説明を参照してください。

12.12.2.2. Web コンソールを使用した構文検証のオンおよびオフの切り替え

Web コンソールを使用して構文の検証を有効または無効にするには、以下を実行します。
  1. Web コンソールで Directory Server ユーザーインターフェイスを開きます。「Web コンソールを使用した Directory Server へのログイン」を参照してください。
  2. インスタンスを選択します。
  3. Server Settings を開き、Server Settings エントリーを選択します。
  4. Advanced Settings タブを開きます。
  5. 属性構文の確認を有効にするには、Enable Attribute Syntax Checking チェックボックスを選択します。この機能を無効にするには、チェックボックスの選択を解除します。
  6. Save をクリックします。

12.12.3. DN の厳格な構文検証の有効化または無効化

構文の検証が有効な場合は、RFC 4514 のセクション 3 で説明されているように、識別名 (DN) が検証されます。DN 構文の検証は、後の標準の厳格さが異なる構文を持つ古い DN、つまりディレクトリーツリーを無効にする可能性があるため、個別に有効になります。
注記
厳格な DN 検証が有効になり、DN 値が必要な構文に準拠しない場合は、LDAP の結果コード 34INVALID_DN_SYNTAX で操作は失敗します。

12.12.3.1. コマンドラインを使用した DN の厳格な構文の検証の有効化または無効化

DN のオンおよびオフの構文検証を厳格にするには、nsslapd-dn-validate-strict パラメーターの値を設定します。たとえば、DN の厳格な構文検証を無効にするには、次のコマンドを実行します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com config replace nsslapd-dn-validate-strict=off
Successfully replaced "nsslapd-dn-validate-strict"
nsslapd-syntaxcheck パラメーターの詳細は、Red Hat Directory Server の設定、コマンド、およびファイルリファレンス で、パラメーターの説明を参照してください。

12.12.3.2. Web コンソールを使用した DN の厳格な構文検証の有効化または無効化

Web コンソールを使用した DN の厳格な構文検証を有効または無効にするには、以下を実行します。
  1. Web コンソールで Directory Server ユーザーインターフェイスを開きます。「Web コンソールを使用した Directory Server へのログイン」を参照してください。
  2. インスタンスを選択します。
  3. Server Settings を開き、Server Settings エントリーを選択します。
  4. Advanced Settings タブを開きます。
  5. 機能を有効または無効にするかどうかに応じて、Strict DN Syntax Validation オプションを選択または選択解除します。
  6. Save をクリックします。

12.12.4. 構文検証ロギングの有効化

デフォルトでは、構文の検証は、属性値が必要な構文に違反する追加または変更の操作を拒否します。ただし、違反自体は、デフォルトでは errors ログに記録されません。nsslapd-syntaxlogging 属性は、構文違反のエラーロギングを有効にします。
注記
構文検証スクリプトおよびタスクによって検出された構文違反は、Directory Server エラーログに記録されます。
nsslapd-syntaxlogging パラメーターおよび nsslapd-syntaxcheck パラメーターの両方が有効な場合には、無効な属性の変更が拒否され、メッセージがログに書き込まれます。nsslapd-syntaxlogging が有効、nsslapd-syntaxcheck が無効の場合、操作は成功できますが、警告メッセージがエラーログに書き込まれます。

12.12.4.1. コマンドラインを使用した構文検証ロギングの有効化

構文検証ログを有効にするには、nsslapd-syntaxlogging パラメーターの値を on に設定します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com config replace nsslapd-syntaxlogging=on
Successfully replaced "nsslapd-syntaxlogging"
nsslapd-syntaxlogging パラメーターの詳細は、Red Hat Directory Server の設定、コマンド、およびファイルリファレンス で、パラメーターの説明を参照してください。

12.12.4.2. Web コンソールを使用した構文検証ロギングの有効化

Web コンソールを使用して検証ロギングを有効にするには、以下を実行します。
  1. Web コンソールで Directory Server ユーザーインターフェイスを開きます。「Web コンソールを使用した Directory Server へのログイン」を参照してください。
  2. インスタンスを選択します。
  3. Server Settings を開き、Server Settings エントリーを選択します。
  4. Advanced Settings タブを開きます。
  5. Enable Attribute Syntax Logging オプションを選択します。
  6. Save をクリックします。

12.12.5. 既存の属性値の構文の検証

特定の状況では、既存の値の構文を手動で検証したい場合があります。以下に例を示します。
  • nsslapd-syntaxcheck パラメーターで構文の検証が無効になっている場合。詳細については、「構文の検証およびその他の Directory Server 操作」 を参照してください。
    重要
    Red Hat は、構文の検証を無効にしないことを推奨します。
  • 構文検証なしまたは無効化されたサーバーからデータを移行する場合。
Directory Server は、構文検証タスクの結果を /var/log/dirsrv/slapd-instance_name/errors ファイルに記録します。以下に例を示します。
  • 検証済みの値がすべて有効であれば、以下を実行します。
    [28/Jun/2017:12:52:43.669867966 +0200] - ERR - syntax-plugin - syntax_validate_task_thread - Starting (base: "dc=example,dc=com", filter: "(objectclass=*)") ...
    [28/Jun/2017:12:52:43.696850129 +0200] - ERR - syntax-plugin - syntax_validate_task_thread - Complete.  Found 0 invalid entries.
  • 無効なエントリーが見つかった場合は、以下を行います。
    [28/Jun/2017:12:54:05.736087520 +0200] - ERR - syntax-plugin - syntax_validate_task_thread - Starting (base: "dc=example,dc=com", filter: "(objectclass=*)") ...
    [28/Jun/2017:12:54:05.754195607 +0200] - ERR - syntax-plugin - syntax_validate_task_callback - Entry "cn=user,ou=People,dc=example,dc=com" violates syntax.
    description: value #0 invalid per syntax
    [28/Jun/2017:12:54:05.759905671 +0200] - ERR - syntax-plugin - syntax_validate_task_thread - Complete.  Found 1 invalid entries.
    注記
    構文検証タスクは、構文違反のみを識別します。誤った値を手動で修正する必要があります。

12.12.5.1. dsconf スキーマの validate-syntax コマンドを使用した構文検証タスクの作成

dsconf schema validate-syntax コマンドを使用して、構文検証タスクを作成します。たとえば、(objectclass=inetorgperson) フィルターに一致する ou=People,dc=example,dc=com サブツリーのすべての値の構文を検証するタスクを作成するには、次のコマンドを実行します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com schema validate-syntax -f '(objectclass=inetorgperson)' ou=People,dc=example,dc=com

12.12.5.2. cn=tasks エントリーを使用した構文検証タスクの作成

Directory Server 設定の cn=tasks,cn=config エントリーは、サーバーがタスクの管理に使用する一時的なエントリー用のコンテナーエントリーです。構文の検証操作を開始するには、cn=syntax validate,cn=tasks,cn=config エントリーにタスクを作成します。
たとえば、(objectclass=inetorgperson) フィルターに一致する ou=People,dc=example,dc=com サブツリーのすべての値の構文を検証するタスクを作成するには、次のコマンドを実行します。
# ldapadd -D "cn=Directory Manager" -W -p 389 -h server.example.com -x

dn: cn=example_syntax_validate,cn=syntax validate,cn=tasks,cn=config
objectclass: extensibleObject
cn: cn=example_syntax_validate
basedn: ou=People,dc=example,dc=com
filter: (objectclass=inetorgperson)
タスクが完了すると、エントリーはディレクトリー設定から削除されます。
cn=syntax validate,cn=tasks,cn=config エントリーの詳細は、『Red Hat Directory Server の設定、コマンド、およびファイルリファレンス』 の cn=schema 再読み込みタスク を参照してください。