Windows Server 2003 Service Pack 1 で属性を機密としてマークする

この記事では、Windows Server 2003 Service Pack 1 で属性を機密としてマークする方法について説明します。

適用対象: Windows Server 2003
元の KB 番号: 922836

概要

Microsoft Windows Server 2000 および Microsoft Windows Server 2003 の Active Directory ディレクトリ サービスでは、認証されたユーザーが属性を読み取らないようにすることは困難です。 一般に、ユーザーが属性またはそのプロパティ セットREAD_PROPERTYアクセス許可を要求した場合、読み取りアクセス権が付与されます。 Active Directory の既定のセキュリティは、認証されたユーザーがすべての属性に対する読み取りアクセス権を持つよう設定されています。 この記事では、Windows Server 2003 Service Pack 1 (SP1) の属性の読み取りアクセスを禁止する方法について説明します。

詳細

Windows Server 2003 SP1 では、属性を機密としてマークする方法が導入されています。 これを行うには、スキーマの searchFlags 属性の値を変更します。 searchFlags 属性値には、属性のさまざまなプロパティを表す複数のビットが含まれています。 たとえば、ビット 1 が設定されている場合、属性のインデックスが作成されます。 ビット 7 (128) は、属性を機密として指定します。

要件と制約

Windows Server 2003 SP1 以降のバージョンを実行しているドメイン コントローラーのみが、機密属性の読み取りアクセス チェックを適用します。 機密属性機能は、Windows Server 2003 SP1 以降のバージョンのインストールに関連付けられています。 この機能は、ドメインまたはフォレストの機能レベルが有効になっているかどうかに依存しません。

次の条件が満たされていない限り、機密属性機能を使用しないでください。

  • すべての Windows Server 2003 ベースのドメイン コントローラーには、Windows Server 2003 SP1 以降のバージョンがインストールされています。

  • すべての Windows 2000 ベースのドメイン コントローラーがアップグレードまたは削除されました。 ドメインに、Windows 2000 Server、Windows Server 2003 の元のリリース バージョン、および Windows Server 2003 SP1 を実行しているドメイン コントローラーが混在している場合、次のシナリオが発生する可能性があります。

  • 未承認のクライアントが Windows 2000 Server ベースおよび Windows Server 2003 ベースのドメイン コントローラーに機密属性データを照会する場合、クライアントはデータを読み取ることができます。

  • 未承認のクライアントが Windows Server 2003 SP1 ベースのドメイン コントローラーに機密属性データを照会した場合、クライアントはデータを読み取ることができません。 基本スキーマ属性を機密としてマークすることはできません。 従業員 ID は、基本スキーマ属性の例です。 この属性は、systemsFlags 属性値が 0x10 (基本スキーマ) に設定されているため、機密としてマークすることはできません。 詳細については、「属性が基本スキーマ属性であるかどうかを判断する方法」セクションと「既存の属性を使用するときに searchFlags 属性値を決定する方法」セクションを参照してください。

テスト

Active Directory とスキーマ拡張機能に対する変更をテストする場合と同様に、運用フォレストを反映するラボで属性の変更を徹底的にテストすることをお勧めします。 テストは、プロシージャがスムーズに動作し、問題が検出されることを保証するのに役立ちます。

アクセス制御チェック

Windows Server 2003 SP1 がインストールされ、Active Directory が読み取りアクセス チェックを実行した後、Active Directory によって機密属性がチェックされます。 機密属性が存在し、これらの属性READ_PROPERTYアクセス許可が設定されている場合、Active Directory には属性またはプロパティ セットに対するCONTROL_ACCESSアクセス許可も必要になります。

注:

フル コントロールのアクセス許可設定には、CONTROL_ACCESSアクセス許可が含まれます。

Active Directory は、次の場合にオブジェクトに対して読み取りアクセス チェックを実行します。

  • オブジェクトが検索フィルターと一致するかどうかを評価する場合。
  • 検索フィルターに一致するオブジェクトの属性を返す場合。 既定では、すべてのオブジェクトに対するCONTROL_ACCESSアクセス許可を持つのは管理者だけです。 そのため、管理者のみが機密属性を読み取ることができます。 管理者は、これらのアクセス許可を任意のユーザーまたは任意のグループに委任できます。

汎用およびオブジェクト固有のアクセス制御エントリ

Active Directory 内のすべてのオブジェクトには、それに関連付けられているアクセス制御情報があります。 この情報は、セキュリティ記述子と呼ばれます。 セキュリティ記述子は、ユーザーとグループが使用できるアクセスの種類を制御します。 セキュリティ記述子は、オブジェクトの作成時に自動的に作成されます。

セキュリティ記述子のアクセス許可エントリのセットは、随意アクセス制御リスト (DACL) と呼ばれます。 DACL 内の各アクセス許可エントリは、アクセス制御エントリ (ACE) と呼ばれます。

オブジェクトに対するアクセス許可を付与するか、オブジェクトのジェネリックまたはオブジェクト固有のアクセス制御エントリを使用して、機密属性にCONTROL_ACCESSアクセス許可を付与できます。 オブジェクトに明示的にスタンプするか、継承を使用してアクセス許可を付与できます。 継承とは、コンテナー階層の上位にあるコンテナーに継承可能なアクセス制御エントリを設定することを意味します。

ジェネリックとオブジェクト固有のアクセス制御エントリは、基本的に同じです。 それらを区別するのは、アクセス制御エントリが継承とオブジェクト アクセスに対して提供する制御の程度です。 汎用アクセス制御エントリは、オブジェクト全体に適用されます。 オブジェクト固有のアクセス制御エントリでは、アクセス制御エントリを継承するオブジェクトをより詳細に制御できます。 オブジェクト固有のアクセス制御エントリを使用する場合は、アクセス制御エントリを継承するオブジェクトの属性またはプロパティ セットを指定できます。

機密属性機能を使用する場合、CONTROL_ACCESSアクセス許可は、汎用アクセス制御エントリをユーザーに割り当てることによって付与されます。 オブジェクト固有のアクセス制御エントリを割り当てることでCONTROL_ACCESSアクセス許可が付与された場合、ユーザーには機密属性に対するCONTROL_ACCESSアクセス許可のみが付与されます。

汎用アクセス制御エントリを使用すると、次のアクセス許可が付与されます。

  • すべての拡張された権利
  • 認証を許可
  • パスワードの変更
  • 受信者
  • パスワードのリセット
  • メールボックス所有者として送信する

汎用アクセス制御エントリを使用するときに付与されるアクセス許可は、オブジェクト全体で必要以上に多くのアクセス権を提供する場合があります。 これが懸念される場合は、オブジェクトにオブジェクト固有のアクセス制御エントリを設定して、アクセス制御エントリが機密属性にのみ適用されるようにすることができます。 オブジェクト固有のアクセス制御エントリを使用する場合は、アクセス制御エントリが適用されるプロパティまたはプロパティ セットを制御できます。

Windows Server 2003 のユーザー インターフェイスでは、Control_Accessアクセス許可は公開されません。 Dsacls.exe ツールを使用して、汎用アクセス制御エントリを割り当てることで、Control_Accessアクセス許可を設定できます。 ただし、このツールを使用してオブジェクト固有のアクセス制御エントリを割り当てることはできません。 オブジェクト固有のアクセス制御エントリを割り当てることでControl_Accessアクセス許可を設定できる唯一のツールは、Ldp.exe ツールです。

注:

アクセス制御の詳細については、この記事の範囲外です。 アクセス制御の詳細については、次の Microsoft Web サイトを参照してください。
Access Control (承認)
ID 管理とAccess Control

継承の使用方法

大規模なドメインでは、機密属性を持つすべてのオブジェクトに対して制御アクセスをユーザーまたはグループに手動で割り当てることは実用的ではありません。 解決策は、継承を使用して、コンテナー階層の上位にある継承可能なアクセス制御エントリを設定することです。 このアクセス制御エントリは、そのコンテナーのすべての子オブジェクトに適用されます。

既定では、組み込みの管理者アカウントを除く、すべての組織単位 (OU) とすべてのユーザー アカウントに対して継承が有効になります。 継承が無効になっているユーザー アカウントを作成する場合、または組み込みの管理者アカウントをコピーして管理アカウントを作成する場合は、これらのアカウントの継承を有効にする必要があります。 それ以外の場合、継承モデルはこれらのアカウントには適用されません。

機密属性を作成する方法

  1. 機密としてマークする属性を決定するか、機密にする属性を追加します。
  2. 適切なユーザーにControl_Accessアクセス許可を付与して、ユーザーが属性データを表示できるようにします。

Ldp.exe ツールや Adsiedit.msc ツールなどのツールを使用して、機密属性を作成できます。 .ldf ファイルは、通常、スキーマを拡張するために使用されます。 これらのファイルを使用して、属性を機密としてマークすることもできます。 実装用に作成するファイルは、運用環境にロールアウトするときにスキーマに追加する内容を正確に把握できるように、テスト フェーズ中に調整する必要があります。 .ldf ファイルは、エラーを防ぐのに役立ちます。

次のサンプル .ldf ファイルを使用して、次の操作を行うことができます。

  • スキーマに属性を追加する
  • 属性を機密としてマークする
  • 属性をユーザー クラスに追加する

注:

.ldf ファイルを使用する前に、スキーマにオブジェクトと属性を追加する方法に関する重要な情報については、「オブジェクト識別子」と「属性構文」セクションを必ず読んでください。

サンプル .ldf ファイル

次のコードでは、スキーマに属性を追加し、属性を機密としてマークします。

dn: CN=ConfidentialAttribute-LDF,CN=Schema,Cn=Configuration,DC=domain,DC=com
changetype: add
objectClass: attributeSchema
lDAPDisplayName: ConfidentialAttribute
adminDescription: この属性は、ユーザーの機密データを格納します
attributeID: 1.2.840.113556.1.xxxx.xxxx.1.x
attributeSyntax: 2.5.5.12
oMSyntax: 64
isSingleValued: TRUE
showInAdvancedViewOnly: TRUE
searchFlags: 128

Dn:
changeType: modify
add: schemaupdatenow
schemaupdatenow: 1
-

次のコードでは、新しい属性をユーザー クラスに追加します。

dn: CN=User,CN=Schema,CN=Configuration,DC=domain,DC=com
changetype: modify
add:mayContain
mayContain: ConfidentialAttribute
-

Dn:
changeType: modify
add: schemaupdatenow
schemaupdatenow: 1
-

管理者以外のユーザーに属性データを表示させる方法

注:

次の手順では、Windows Server 2003 R2 Active Directory アプリケーション モード (ADAM) に含まれる Ldp.exe ツールを使用する必要があります。 Ldp.exe ツールの他のバージョンでは、アクセス許可を設定できません。

ユーザー アカウントControl_Accessアクセス許可を手動で設定する方法

  1. Windows Server 2003 R2 ADAM に含まれている Ldp.exe ツールを開きます。
  2. ディレクトリに接続してバインドします。
  3. ユーザー アカウントを選択し、アカウントを右クリックし、[ 詳細設定] をクリックし、[ セキュリティ記述子] をクリックして、[OK] をクリック します
  4. [ DACL ] ボックスで、[ ACE の追加] をクリックします。
  5. [ トラスティ ] ボックスに、アクセス許可を付与するグループ名またはユーザー名を入力します。
  6. [ アクセスの制御 ] ボックスで、手順 5 で行った変更を確認します。

継承を使用してアクセス許可を割り当てる方法Control_Access

継承を使用するには、機密属性を持つオブジェクトよりもコンテナー階層の上位にある目的のユーザーまたはグループにControl_Accessアクセス許可を付与するアクセス制御エントリを作成します。 このアクセス制御エントリは、ドメイン レベルまたはコンテナー階層内の任意の時点で設定できます。これは、企業に適しています。 機密属性を持つ子オブジェクトでは、継承が有効になっている必要があります。

Control_Accessアクセス許可を割り当てるには、次の手順に従います。

  1. Windows Server 2003 R2 ADAM に含まれている Ldp.exe ファイルを開きます。

  2. ディレクトリに接続してバインドします。

  3. 機密属性を持つオブジェクトよりもコンテナー階層の上位にある OU またはコンテナーを選択し、OU またはコンテナーを右クリックし、[ 詳細設定] をクリックし、[ セキュリティ記述子] をクリックして、[OK] をクリック します

  4. [ DACL ] ボックスで、[ ACE の追加] をクリックします。

  5. [ トラスティ ] ボックスに、アクセス許可を付与するグループ名またはユーザー名を入力します。

  6. [ アクセスの制御 ] ボックスで、手順 5 で行った変更を確認します。

  7. [ オブジェクトの種類 ] ボックスで、追加した機密属性をクリックします。

  8. ターゲット オブジェクトで継承が有効になっていることを確認します。

既存の属性を使用するときに systemFlags 属性値を確認する方法

既存のオブジェクトを使用する場合は、現在の searchFlags 属性値が何であるかを確認する必要があります。 オブジェクトを追加する場合は、オブジェクトを追加するときに値を定義できます。 searchFlags 属性値を取得する方法は多数あります。 最適なメソッドを使用します。

Ldp.exe ツールを使用して searchFlags 属性値を取得するには、次の手順に従います。

  1. [ スタート] をクリックし、[ 実行] をクリックし、「LDP」と入力して、[OK] をクリック します

  2. [ 接続] をクリックし、[ バインド] をクリックします。

  3. ルート ドメインの管理者としてバインドするか、エンタープライズ管理者であるアカウントとしてバインドします。

  4. [ 表示] をクリックし、[ ツリー] をクリックします。

  5. [ CN=schema,cn=configuration,dc=rootdomain] をクリックし、[OK] をクリック します

  6. 左側のウィンドウで、[ CN=schema]、[cn=configuration]、[dc=rootdomain] の順に展開します。

  7. 機密としてマークする属性のドメイン名を見つけて、展開します。

  8. オブジェクトに設定される属性の一覧で searchFlags を見つけて、そのオブジェクトの現在の searchFlags 属性値を確認します。

注:

新しい searchFlags 属性値を確認するには、次の式を使用します。
128 + currentsearchFlagsattribute 値 = newsearchFlagsattribute 値

属性が基本スキーマ属性であるかどうかを判断する方法

属性が基本スキーマ属性であるかどうかを判断するには、Ldp.exe ツールを使用して systemFlags 属性値を調べます。

EMPLOYEE-ID - systemFlags の LDP 出力: 0x10 = (FLAG_SCHEMA_BASE_OBJECT)

次の出力 Ldp.exe 例では、Ldp.exe は systemFlags 属性値を0x10として、基本スキーマ属性として識別します。 そのため、この属性を機密としてマークすることはできません。

>> Dn: CN=Employee-ID,CN=Schema,CN=Configuration,DC=domain,DC=com
2> objectClass: top; attributeSchema;
1> cn: Employee-ID;
1> distinguishedName: CN=Employee-ID,CN=Schema,CN=Configuration,DC=domain,DC=com;
1> instanceType: 0x4 = ( IT_WRITE );
1> whenCreated: <DateTime>;
1> whenChanged: <DateTime>;
1> uSNCreated: 220;
1> attributeID: 1.2.840.113556.1.4.35;
1> 属性Syntax: 2.5.5.12 = ( SYNTAX_UNICODE_TYPE );
1> isSingleValued: TRUE;
1> rangeLower: 0;
1> rangeUpper: 16;
1> uSNChanged: 220;
1> showInAdvancedViewOnly: TRUE;
1> adminDisplayName: Employee-ID;
1> adminDescription: Employee-ID;
1> oMSyntax: 64 = ( OM_S_UNICODE_STRING );
1> searchFlags: 0x0 = ( );
1> lDAPDisplayName: employeeID;
1> 名: Employee-ID。
1> objectGUID: 64fb3ed1-338f-466e-a879-595bd3940ab7;
1> schemaIDGUID: bf967962-0de6-11d0-a285-00aa003049e2;
1> systemOnly: FALSE;
1> systemFlags: 0x10 = ( FLAG_SCHEMA_BASE_OBJECT );
1> objectCategory: CN=Attribute-Schema,CN=Schema,CN=Configuration,DC=domain,DC=com;

Employee-Number systemFlags の LDP 出力: 0x0 = ( )

出力 Ldp.exe 次の例では、Ldp.exe は systemFlags 属性値を 0 として識別します。 この属性は機密としてマークできます。

>> Dn: CN=Employee-Number,CN=Schema,CN=Configuration,DC=warrenw,DC=com
2> objectClass: top; attributeSchema;
1> cn: Employee-Number;
1> distinguishedName: CN=Employee-Number,CN=Schema,CN=Configuration,DC=warrenw,DC=com;
1> instanceType: 0x4 = ( IT_WRITE );
1> whenCreated: <DateTime>;
1> whenChanged: <DateTime>;
1> uSNCreated: 221;
1> attributeID: 1.2.840.113556.1.2.610;
1> 属性Syntax: 2.5.5.12 = ( SYNTAX_UNICODE_TYPE );
1> isSingleValued: TRUE;
1> rangeLower: 1;
1> rangeUpper: 512;
1> mAPIID: 35943;
1> uSNChanged: 221;
1> showInAdvancedViewOnly: TRUE;
1> adminDisplayName: Employee-Number;
1> adminDescription: Employee-Number;
1> oMSyntax: 64 = ( OM_S_UNICODE_STRING );
1> searchFlags: 0x0 = ( );
1> lDAPDisplayName: employeeNumber;
1> 名: Employee-Number;
1> objectGUID: 2446d04d-b8b6-46c7-abbf-4d8e7e1bb6ec;
1> schemaIDGUID: a8df73ef-c5ea-11d1-bbcb-0080c76670c0;
1> systemOnly: FALSE;
1> systemFlags: 0x0 = ( );
1> objectCategory: CN=Attribute-Schema,CN=Schema,CN=Configuration,DC=warrenw,DC=com;

オブジェクト識別子

属性またはクラス オブジェクトをスキーマに追加する場合、必要な属性の 1 つはオブジェクト識別子 (OID とも呼ばれます) です。 オブジェクト識別子は、オブジェクト クラスと属性を一意に定義するために使用されます。 会社が属性を識別するために一意のオブジェクト識別子を取得していることを確認します。 Oidgen.exe ツールなど、オブジェクト識別子を生成するツールはサポートされていません。 Microsoft からオブジェクト識別子を取得するには、次の Microsoft Web サイトにアクセスします。
Microsoft からオブジェクト識別子を取得する

属性構文

新しいオブジェクトをスキーマに追加するには、attributeSyntax 属性も必要です。 この属性は、プロパティ型の比較のためのストレージ表現、バイト順序、照合ルールを定義します。 構文では、属性値が文字列、数値、または時間単位である必要があるかどうかを定義します。 すべてのオブジェクトの各属性は、正確に 1 つの構文に関連付けられています。 必ず、新しい属性の正しい属性構文を選択してください。 これは、ライトウェイト ディレクトリ アクセス プロトコル (LDAP) ディレクトリを別の LDAP ディレクトリと同期する場合に特に重要です。 属性をスキーマに追加した後、その属性の構文を変更することはできません。

attributeSyntax 属性の詳細については、「 Attribute-Syntax 属性」を参照してください。

詳細については、 Search-Flags 属性 を参照してください。