Marquer un attribut comme confidentiel dans Windows Server 2003 Service Pack 1

Cet article explique comment marquer un attribut comme confidentiel dans Windows Server 2003 Service Pack 1.

Produit concerné : Windows Server 2003
Numéro de la base de connaissances d’origine : 922836

Résumé

Dans le service d’annuaire Active Directory pour Microsoft Windows Server 2000 et pour Microsoft Windows Server 2003, il est difficile d’empêcher un utilisateur authentifié de lire un attribut. En règle générale, si l’utilisateur demande des autorisations READ_PROPERTY pour un attribut ou pour son jeu de propriétés, l’accès en lecture est accordé. La sécurité par défaut dans Active Directory est définie afin que les utilisateurs authentifiés disposent d’un accès en lecture à tous les attributs. Cet article explique comment empêcher l’accès en lecture pour un attribut dans Windows Server 2003 Service Pack 1 (SP1).

Plus d’informations

Windows Server 2003 SP1 introduit un moyen de marquer un attribut comme confidentiel. Pour ce faire, vous modifiez la valeur de l’attribut searchFlags dans le schéma. La valeur de l’attribut searchFlags contient plusieurs bits qui représentent différentes propriétés d’un attribut. Par exemple, si bit 1 est défini, l’attribut est indexé. Bit 7 (128) désigne l’attribut comme confidentiel.

Exigences et contraintes

Seuls les contrôleurs de domaine qui exécutent Windows Server 2003 SP1 ou une version ultérieure appliquent les case activée d’accès en lecture pour les attributs confidentiels. La fonctionnalité d’attributs confidentiels est liée à l’installation de Windows Server 2003 SP1 ou d’une version ultérieure. Cette fonctionnalité ne dépend pas de l’activation ou non d’un niveau fonctionnel de domaine ou de forêt.

N’utilisez pas la fonctionnalité d’attributs confidentiels, sauf si les conditions suivantes sont remplies :

  • Windows Server 2003 SP1 ou une version ultérieure est installé dans tous les contrôleurs de domaine Windows Server 2003.

  • Tous les contrôleurs de domaine Windows 2000 ont été mis à niveau ou supprimés. Si un domaine contient une combinaison de contrôleurs de domaine exécutant Windows 2000 Server, la version d’origine de Windows Server 2003 et Windows Server 2003 SP1, le scénario suivant peut se produire :

  • Si un client non autorisé interroge les contrôleurs de domaine Windows 2000 Server et Windows Server 2003 pour obtenir des données d’attribut confidentiel, le client peut lire les données.

  • Si un client non autorisé interroge le contrôleur de domaine Windows Server 2003 SP1 pour obtenir des données d’attributs confidentiels, le client ne peut pas lire les données. Vous ne pouvez pas marquer un attribut de schéma de base comme confidentiel. Un ID d’employé est un exemple d’attribut de schéma de base. Cet attribut ne peut pas être marqué comme confidentiel, car sa valeur d’attribut systemsFlags est définie sur 0x10 (schéma de base). Pour plus d’informations, consultez la section « Comment déterminer si un attribut est un attribut de schéma de base » et la section « Comment déterminer la valeur de l’attribut searchFlags lorsque vous utilisez un attribut existant ».

Tests

Comme vous pouvez tester toute modification apportée à Active Directory et toute extension de schéma, nous vous recommandons de tester minutieusement les modifications d’attribut dans un labo qui reflète votre forêt de production. Les tests permettent de garantir que la procédure fonctionne correctement et que des problèmes sont détectés.

Vérifications du contrôle d’accès

Une fois Windows Server 2003 SP1 installé et une fois qu’Active Directory a effectué une case activée d’accès en lecture, Active Directory recherche les attributs confidentiels. S’il existe des attributs confidentiels et si READ_PROPERTY autorisations sont définies pour ces attributs, Active Directory a également besoin d’autorisations CONTROL_ACCESS pour les attributs ou pour leurs jeux de propriétés.

Remarque

Le paramètre d’autorisation Contrôle total inclut l’autorisation CONTROL_ACCESS.

Active Directory effectue une case activée d’accès en lecture sur un objet dans les cas suivants :

  • Lorsque vous évaluez si l’objet correspond au filtre de recherche.
  • Lorsque vous retournez des attributs d’un objet qui correspondent au filtre de recherche. Par défaut, seuls les administrateurs disposent d’autorisations CONTROL_ACCESS sur tous les objets. Par conséquent, seuls les administrateurs peuvent lire les attributs confidentiels. Les administrateurs peuvent déléguer ces autorisations à n’importe quel utilisateur ou à n’importe quel groupe.

Entrées de contrôle d’accès génériques et spécifiques à l’objet

Chaque objet dans Active Directory a des informations de contrôle d’accès qui lui sont associées. Ces informations sont appelées descripteurs de sécurité. Le descripteur de sécurité contrôle le type d’accès disponible pour les utilisateurs et les groupes. Le descripteur de sécurité est créé automatiquement lors de la création de l’objet.

Le jeu d’entrées d’autorisation dans un descripteur de sécurité est appelé liste de contrôle d’accès discrétionnaire (DACL). Chaque entrée d’autorisation dans la liste DACL est appelée entrée de contrôle d’accès (ACE).

Vous pouvez accorder des autorisations à l’objet ou accorder des autorisations CONTROL_ACCESS à des attributs confidentiels à l’aide d’une entrée de contrôle d’accès générique ou spécifique à l’objet sur l’objet. Vous pouvez accorder des autorisations en les tamponnant explicitement sur l’objet ou en utilisant l’héritage. L’héritage signifie que vous définissez une entrée de contrôle d’accès pouvant être héritée sur un conteneur plus élevé dans la hiérarchie de conteneurs.

Les entrées de contrôle d’accès génériques et spécifiques à l’objet sont fondamentalement identiques. Ce qui les distingue, c’est le degré de contrôle qu’offrent les entrées de contrôle d’accès sur l’héritage et sur l’accès aux objets. Les entrées de contrôle d’accès génériques s’appliquent à l’objet entier. Les entrées de contrôle d’accès spécifiques aux objets offrent davantage de contrôle sur les objets qui héritent de l’entrée de contrôle d’accès. Lorsque vous utilisez une entrée de contrôle d’accès spécifique à l’objet, vous pouvez spécifier l’attribut ou le jeu de propriétés de l’objet qui héritera de l’entrée de contrôle d’accès.

Lorsque vous utilisez la fonctionnalité d’attributs confidentiels, CONTROL_ACCESS autorisation est accordée en affectant une entrée de contrôle d’accès générique à un utilisateur. Si CONTROL_ACCESS autorisation est accordée en affectant une entrée de contrôle d’accès spécifique à l’objet, l’utilisateur n’aura qu’CONTROL_ACCESS autorisation sur l’attribut confidentiel.

Les autorisations suivantes sont accordées lorsque vous utilisez une entrée de contrôle d’accès générique :

  • Tous les droits étendus
  • Autorisé à s’authentifier
  • Changer le mot de passe
  • Recevoir en tant que
  • Réinitialiser le mot de passe
  • Envoyer en tant que

Les autorisations accordées lorsque vous utilisez une entrée de contrôle d’accès générique peuvent fournir plus d’accès que ce que vous souhaitez sur l’ensemble de l’objet. S’il s’agit d’un problème, vous pouvez définir une entrée de contrôle d’accès spécifique à l’objet afin que l’entrée de contrôle d’accès s’applique uniquement à l’attribut confidentiel. Lorsque vous utilisez des entrées de contrôle d’accès spécifiques à l’objet, vous pouvez contrôler la propriété ou la propriété définie à laquelle s’applique l’entrée de contrôle d’accès.

L’interface utilisateur dans Windows Server 2003 n’expose pas les autorisations Control_Access. Vous pouvez utiliser l’outil Dsacls.exe pour définir des autorisations Control_Access en affectant une entrée de contrôle d’accès générique. Toutefois, vous ne pouvez pas utiliser cet outil pour affecter une entrée de contrôle d’accès spécifique à l’objet. Le seul outil qui peut définir des autorisations Control_Access en affectant une entrée de contrôle d’accès spécifique à l’objet est l’outil Ldp.exe.

Remarque

Une discussion approfondie sur le contrôle d’accès dépasse le cadre de cet article. Pour plus d’informations sur le contrôle d’accès, visitez les sites Web Microsoft suivants :
Access Control (autorisation)
Gestion des identités et Access Control

Comment utiliser l’héritage

Dans un domaine volumineux, il n’est pas pratique d’attribuer manuellement un contrôle d’accès à un utilisateur ou à un groupe pour chaque objet qui a un attribut confidentiel. La solution consiste à utiliser l’héritage pour définir une entrée de contrôle d’accès pouvant être héritée plus élevée dans la hiérarchie de conteneurs. Cette entrée de contrôle d’accès s’applique à tous les objets enfants de ce conteneur.

Par défaut, l’héritage est activé pour toutes les unités d’organisation (UO) et pour tous les comptes d’utilisateur, à l’exception du compte d’administrateur intégré. Si vous créez des comptes d’utilisateur dont l’héritage est désactivé ou si vous créez des comptes d’administration en copiant le compte d’administrateur intégré, vous devez activer l’héritage pour ces comptes. Sinon, le modèle d’héritage ne s’applique pas à ces comptes.

Comment créer un attribut confidentiel

  1. Déterminez l’attribut à marquer comme confidentiel ou ajoutez un attribut que vous souhaitez rendre confidentiel.
  2. Accordez aux utilisateurs appropriés des autorisations Control_Access afin qu’ils puissent afficher les données d’attribut.

Des outils tels que l’outil Ldp.exe et l’outil Adsiedit.msc peuvent être utilisés pour créer un attribut confidentiel. Les fichiers .ldf sont généralement utilisés pour étendre le schéma. Ces fichiers peuvent également être utilisés pour marquer un attribut comme confidentiel. Les fichiers que vous créez pour une implémentation doivent être paramétrés pendant la phase de test afin que vous sachiez exactement ce que vous ajoutez au schéma lors du déploiement en production. Les fichiers .ldf permettent d’éviter les erreurs.

Les exemples de fichiers .ldf suivants peuvent être utilisés pour effectuer les opérations suivantes :

  • Ajouter un attribut au schéma
  • Marquer l’attribut comme confidentiel
  • Ajouter l’attribut à la classe utilisateur

Remarque

Avant d’utiliser des fichiers .ldf, veillez à lire les sections « Identificateurs d’objet » et « Syntaxe d’attribut » pour obtenir des informations importantes sur la façon d’ajouter des objets et des attributs au schéma.

Exemples de fichiers .ldf

Le code suivant ajoute un attribut au schéma, puis marque l’attribut comme confidentiel.

dn : CN=ConfidentialAttribute-LDF,CN=Schema,Cn=Configuration,DC=domain,DC=com
changetype : add
objectClass : attributeSchema
lDAPDisplayName : ConfidentialAttribute
adminDescription : cet attribut stocke les données confidentielles de l’utilisateur
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
-

Le code suivant ajoute le nouvel attribut à la classe utilisateur.

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

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

Comment permettre aux utilisateurs non administratifs de voir les données d’attribut

Remarque

Les procédures suivantes nécessitent l’utilisation de l’outil Ldp.exe inclus dans le mode d’application Active Directory (ADAM) Windows Server 2003 R2. Les autres versions de l’outil Ldp.exe ne peuvent pas définir d’autorisations.

Comment définir manuellement des autorisations Control_Access sur un compte d’utilisateur

  1. Ouvrez l’outil Ldp.exe fourni avec Windows Server 2003 R2 ADAM.
  2. Connectez-vous au répertoire et établissez une liaison.
  3. Sélectionnez un compte d’utilisateur, cliquez avec le bouton droit sur le compte, cliquez sur Avancé, cliquez sur Descripteur de sécurité, puis cliquez sur OK.
  4. Dans la zone DACL , cliquez sur Ajouter ACE.
  5. Dans la zone Fiduciaire , tapez le nom du groupe ou le nom d’utilisateur auquel vous souhaitez accorder des autorisations.
  6. Dans la zone Contrôler l’accès , vérifiez les modifications que vous avez apportées à l’étape 5.

Comment utiliser l’héritage pour attribuer des autorisations Control_Access

Pour utiliser l’héritage, créez une entrée de contrôle d’accès qui accorde des autorisations Control_Access aux utilisateurs ou groupes souhaités qui sont plus élevés dans la hiérarchie de conteneurs que les objets qui ont des attributs confidentiels. Vous pouvez définir cette entrée de contrôle d’accès au niveau du domaine ou à n’importe quel point de la hiérarchie de conteneurs qui fonctionne bien pour une entreprise. L’héritage doit être activé pour les objets enfants qui ont des attributs confidentiels.

Pour attribuer des autorisations Control_Access, procédez comme suit :

  1. Ouvrez le fichier Ldp.exe inclus dans Windows Server 2003 R2 ADAM.

  2. Connectez-vous à un répertoire et établissez une liaison.

  3. Sélectionnez une unité d’organisation ou un conteneur qui est le plus élevé dans la hiérarchie de conteneurs que les objets qui ont des attributs confidentiels, cliquez avec le bouton droit sur l’unité d’organisation ou le conteneur, cliquez sur Avancé, cliquez sur Descripteur de sécurité, puis cliquez sur OK.

  4. Dans la zone DACL , cliquez sur Ajouter ACE.

  5. Dans la zone Fiduciaire , tapez le nom du groupe ou le nom d’utilisateur auquel vous souhaitez accorder des autorisations.

  6. Dans la zone Contrôler l’accès , vérifiez les modifications que vous avez apportées à l’étape 5.

  7. Dans la zone Type d’objet , cliquez sur l’attribut confidentiel que vous avez ajouté.

  8. Assurez-vous que l’héritage est activé sur les objets cibles.

Comment déterminer la valeur de l’attribut systemFlags lorsque vous utilisez un attribut existant

Si vous utilisez un objet existant, vous devez vérifier la valeur de l’attribut searchFlags actuelle. Si vous ajoutez un objet, vous pouvez définir la valeur lorsque vous ajoutez l’objet . Il existe de nombreuses façons d’obtenir la valeur de l’attribut searchFlags. Utilisez la méthode qui vous convient le mieux.

Pour utiliser l’outil Ldp.exe afin d’obtenir la valeur de l’attribut searchFlags, procédez comme suit :

  1. Cliquez sur Démarrer, sur Exécuter, tapez LDP, puis cliquez sur OK.

  2. Cliquez sur Connexion, puis sur Lier.

  3. Lier en tant qu’administrateur du domaine racine, ou lier en tant que compte administrateur d’entreprise.

  4. Cliquez sur Affichage, puis sur Arborescence.

  5. Cliquez sur CN=schema, cn=configuration,dc=rootdomain, puis cliquez sur OK.

  6. Dans le volet gauche, développez CN=schema,cn=configuration,dc=rootdomain.

  7. Recherchez le nom de domaine de l’attribut que vous souhaitez marquer comme confidentiel, puis développez-le.

  8. Dans la liste des attributs remplis pour l’objet, recherchez searchFlags pour déterminer la valeur d’attribut searchFlags actuelle pour cet objet.

Remarque

Pour déterminer la nouvelle valeur de l’attribut searchFlags, utilisez la formule suivante :
128 + currentsearchFlagsattribute value = newsearchFlagsattribute value.

Comment déterminer si un attribut est un attribut de schéma de base

Pour déterminer si un attribut est un attribut de schéma de base, utilisez l’outil Ldp.exe pour examiner la valeur de l’attribut systemFlags.

Sortie LDP de Employee-ID - systemFlags : 0x10 = (FLAG_SCHEMA_BASE_OBJECT)

Dans l’exemple de sortie Ldp.exe suivant, Ldp.exe identifie la valeur de l’attribut systemFlags comme 0x10 et comme attribut de schéma de base. Par conséquent, vous ne pouvez pas marquer cet attribut comme confidentiel.

>> 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> attributeSyntax : 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> oMSyntaxe : 64 = ( OM_S_UNICODE_STRING) ;
1> searchFlags : 0x0 = ( ) ;
1> lDAPDisplayName : employeeID ;
1> nom : 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 ;

Sortie LDP de Employee-Number systemFlags : 0x0 = ( )

Dans l’exemple de sortie Ldp.exe suivant, Ldp.exe identifie la valeur de l’attribut systemFlags comme étant 0. Cet attribut peut être marqué comme confidentiel.

>> 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> attributeSyntax : 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> oMSyntaxe : 64 = ( OM_S_UNICODE_STRING) ;
1> searchFlags : 0x0 = ( ) ;
1> lDAPDisplayName : employeeNumber ;
1> nom : 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 ;

Identificateurs d’objets

Lorsque vous ajoutez un attribut ou un objet de classe au schéma, l’un des attributs requis est l’identificateur d’objet (également appelé OID). Les identificateurs d’objet sont utilisés pour définir de façon unique des classes et des attributs d’objets. Assurez-vous que votre entreprise obtient un identificateur d’objet unique pour identifier son attribut. Les outils qui génèrent des identificateurs d’objet, tels que l’outil Oidgen.exe, ne sont pas pris en charge. Pour obtenir un identificateur d’objet auprès de Microsoft, visitez le site web Microsoft suivant :
Obtention d’un identificateur d’objet auprès de Microsoft

Syntaxe d’attribut

L’attribut attributeSyntax est également requis pour ajouter de nouveaux objets au schéma. Cet attribut définit la représentation du stockage, l’ordre des octets et les règles de correspondance pour les comparaisons de types de propriétés. La syntaxe définit si la valeur d’attribut doit être une chaîne, un nombre ou une unité de temps. Chaque attribut de chaque objet est associé à exactement une syntaxe. Veillez à sélectionner la syntaxe d’attribut correcte pour le nouvel attribut. Cela est particulièrement important si vous synchronisez un répertoire LDAP (Lightweight Directory Access Protocol) avec un autre annuaire LDAP. Une fois l’attribut ajouté au schéma, sa syntaxe d’attribut ne peut pas être modifiée.

Pour plus d’informations sur l’attribut attributeSyntax, consultez Attribute-Syntax attribute.

Pour plus d’informations, consultez l’attribut Search-Flags .