# Active Directory

Active Directory (AD) est la mise en œuvre par Microsoft des services d'annuaire LDAP pour les systèmes d'exploitation Windows.
L'objectif principal d'Active Directory est de fournir des services centralisés d'identification et d'authentification à un réseau d'ordinateurs utilisant le système Windows, macOS ou encore Linux. Il permet également l'attribution et l'application de stratégies ainsi que l'installation de mises à jour critiques par les administrateurs. Active Directory répertorie les éléments d'un réseau administré tels que les comptes des utilisateurs, les serveurs, les postes de travail, les dossiers partagés (en), les imprimantes, etc. Un utilisateur peut ainsi facilement trouver des ressources partagées, et les administrateurs peuvent contrôler leur utilisation grâce à des fonctionnalités de distribution, de duplication, de partitionnement et de sécurisation de l’accès aux ressources répertoriées.
Si les administrateurs ont indiqué les attributs convenables, il sera possible d'interroger l'annuaire pour obtenir, par exemple, « toutes les imprimantes couleur à cet étage du bâtiment ».
Le service d'annuaire Active Directory peut être mis en œuvre sur Windows 2000 Server, Windows Server 2003, Windows Server 2008, Windows Server 2012 (voire hors Microsoft par Samba), Windows Server 2016, Windows Server 2019 et Windows Server 2022 il résulte de l'évolution de la base de compte plane SAM. Un serveur informatique hébergeant l'annuaire Active Directory est appelé « contrôleur de domaine ».
Active Directory stocke ses informations et paramètres dans une base de données distribuée sur un ou plusieurs contrôleurs de domaine, la réplication étant prise en charge nativement. La taille d'une base Active Directory peut varier de quelques centaines à plusieurs millions d'objets en fonction de la taille des installations.

## Historique

Dans les premiers documents de Microsoft mentionnant son existence, Active Directory s'est d'abord appelé NTDS (pour NT Directory Services, soit « Services d'annuaire de NT » en français). On peut d'ailleurs encore trouver ce nom dans la littérature couvrant le sujet ainsi que dans certains utilitaires AD comme NTDSUTIL.EXE par exemple, ou le nom du fichier de base de données NTDS.DIT.
Active Directory fut présenté pour la première fois en 1996, mais sa première utilisation remonte à Windows 2000 Server Édition en 1999. Il fut mis à jour dans Windows Server 2003 pour étendre ses fonctionnalités et améliorer son administration. Des améliorations supplémentaires lui ont depuis été adjointes dans Windows Server 2003 R2, Windows Server 2008, Windows Server 2008 R2 et Windows Server 2012.
Active Directory est le résultat de l'évolution de la base de données de comptes de domaine (principaux de sécurité) SAM (Security Account Manager) et une mise en œuvre de LDAP, protocole de hiérarchie. Sa technique de stockage est fondée sur le stockage du registre Windows, la base SAM constituant à elle seule une ruche, ce qui physiquement correspond à un fichier portant le nom sam, tout comme les fichiers system et software.
D'un point de vue sémantique, Active Directory est un annuaire LDAP, tout comme l'annuaire d'Exchange 5.5. Exchange 5.5 n'est pas pour autant le seul antécédent technologique à Active Directory. Citons également l'annuaire Novell NDS, qui dès 1993 a constitué un bond technologique en comparaison avec le précédent système NetWare Bindery.
L'annuaire Novell NDS, offrait la possibilité de visualiser toutes les ressources de l'annuaire sous forme graphique; ce modèle sera ensuite repris par les autres concurrents (ex : Microsoft avec Active Directory en 1996). Active Directory peut donc être considéré comme la réponse technologique aux techniques d'annuaire Novell, les deux systèmes étant dérivés de X.500.
Active Directory revoit complètement le stockage des informations de sécurité du domaine, de la structure de la base jusqu'au niveau sémantique. Tout d'abord, le moteur de base de données retenu pour sa mise en œuvre est le moteur de stockage extensible ESENT, dérivé de ESE98 également connu sous le nom de Jet Blue, pour lever l'ambiguïté avec les bases de données Microsoft Access utilisant le moteur Jet Red. Le prédécesseur d'ESE98, ESE97, était le moteur de base de données utilisé pour l'annuaire Exchange 5.5. La différence principale entre ESENT et ESE98 est la taille des pages utilisées et la taille des journaux de transaction.
Active Directory est également conçu pour garantir un niveau de performance et de sécurité adéquat : la base de données ESENT est journalisée et répond à la contrainte ACID. Le moteur est conçu pour supporter des bases dimensionnées pour stocker des millions d'objets.

## Structure
### Objets

Active Directory est un service d'annuaire utilisé pour stocker des informations relatives aux ressources réseau sur un domaine.
Une structure Active Directory (AD) est une organisation hiérarchisée d'objets. Les objets sont classés en trois grandes catégories : les ressources (par exemple les imprimantes), les services (par exemple le courrier électronique) et les utilisateurs (comptes utilisateurs et groupes). L'AD fournit des informations sur les objets, il les organise et contrôle les accès et la sécurité.
Chaque objet représente une entité unique — utilisateur, ordinateur, imprimante ou groupe — ainsi que ses attributs. Certains objets peuvent également être des conteneurs pour d'autres objets. Un objet est identifié de manière unique dans l'AD par son nom et possède son propre jeu d'attributs — les caractéristiques et les informations que l'objet peut contenir — défini par un schéma, qui détermine également le type d'objets qui peuvent être stockés dans l'AD.
Chaque objet attribut peut être utilisé dans plusieurs classes d'objets de schéma différents. Ces objets de schéma existent pour permettre au schéma d'être étendu ou modifié si nécessaire. Cependant, comme chaque objet de schéma est intégral à la définition des objets de l'AD, la désactivation ou la modification de ces objets peut avoir de graves conséquences car elle entraîne des modifications fondamentales dans la structure de l'AD. Un objet de schéma, lorsqu'il est modifié, est automatiquement propagé dans Active Directory et une fois créé, il ne peut plus être supprimé (il peut seulement être désactivé). Pour cette raison, une modification du schéma doit être mûrement réfléchie et planifiée.
Le nombre de types d'objets disponibles dans un Active Directory n'est pas limité, en voici quelques exemples:
* OU (Organisational Unit): L'unité d'organisation
    Dans l'arborescence, ce sont des conteneurs qui permettent de créer une hiérarchie d'objets au sein d'un domaine. Ces OU sont principalement utilisées pour permettre la délégation de droits et pour l'application de GPO. Les OU sont parfois confondues avec les groupes, qui sont des objets et non des conteneurs.
* Ordinateur
* Utilisateur
* Groupe : il est principalement destiné à établir des listes d'utilisateurs pour leur attribuer des droits ou des services. On distingue trois types de groupes :
** Le groupe local : il peut contenir des utilisateurs de son domaine et ne peut être placé que sur des ressources de son domaine.
** Le groupe global : au sein d'un domaine, il est principalement utilisé pour affecter des droits à des ressources dans un domaine. Il peut comprendre des utilisateurs, des groupes globaux ou universels de tous les domaines de l'annuaire.
** Le groupe universel : disponible depuis la version 2000, permet d'inclure des groupes et utilisateurs d'autres domaines.
Active Directory étant un annuaire objet, la notion de schéma définit les contraintes concernant la dérivation et l'héritage des objets, sensiblement de la même manière qu'en programmation objet. Cela introduit également la notion d'extension, permettant d'ouvrir l'annuaire à toutes sortes d'applications souhaitant stocker des objets personnalisés au niveau du ou des domaines constituant la forêt Active Directory.

### Unité organisationnelle

Une Unité organisationnelle (Organizational Unit ; OU ; UO) est un objet conteneur, de la norme ldap, qui est utilisé pour hiérarchiser Active Directory. L'AD permet une hiérarchisation des domaines. À l'intérieur de ces domaines, il existe maintenant des possibilités de structuration et de hiérarchisation des utilisateurs.
Les OU sont un moyen de créer des structures hiérarchiques dans Active Directory. Outre la structuration d'informations, qui permet notamment d’accroître la clarté dans les annuaires complexes, il est possible d'utiliser les OU comme des frontières pour établir la délégation et l'héritage des autorisations administratives. Ainsi, Il est possible de personnaliser les droits et privilèges des différents objets Active Directory hiérarchiquement, selon l'emplacement logique de cet objet. (droits d'accès ; stratégies de groupes ; délégation d'autorité ; autorisations concernant les installations...).

### Forêts, arborescences et domaines

Active Directory introduit la notion de hiérarchie, inhérente aux annuaires objets dérivés de X.500, sous la forme d'une arborescence dans laquelle les utilisateurs et les ordinateurs sont organisés en groupes et sous groupes afin de faciliter l'administration des droits et restrictions utilisateur. C'est aussi Active Directory qui gère l'authentification des utilisateurs sur le réseau Windows. Active Directory exploite cette notion de hiérarchie intensivement, puisque l'entité de sécurité appelée « domaine » est également hiérarchisée dans un ensemble partageant un espace de nom commun, appelé « arborescence », enfin, l'entité de plus haut niveau regroupant les arborescences de domaines constitue la forêt Active Directory.
Active Directory permet une réplication multi-maître, c'est-à-dire que chaque contrôleur de domaine peut être le siège de modifications (ajout, modification, suppression) de l'annuaire, sous réserve de permission accordée par ACL, qui seront répliquées sur les autres contrôleurs de domaine. SAM ne disposait que d'une seule base en écriture, les autres répliquas étant en lecture seule.
Le mécanisme de réplication de ces modifications peut profiter de RPC (liaisons TCP/IP rapides et disponibles) ou SMTP dans les autres cas. La topologie de réplication est générée automatiquement mais elle peut être personnalisée par l'administrateur, tout comme sa planification.
À noter que les ensembles d'espaces de nom correspondant aux arborescences d'Active Directory formant la forêt Active Directory sont superposables à l'espace de nom formé par les zones DNS. DNS est un service indispensable pour le bon fonctionnement de toute l'architecture Active Directory, localisation des contrôleurs de domaine, réplication, etc.
Une arborescence Active Directory est donc composée de :
* La forêt : structure hiérarchique d'un ou plusieurs domaines indépendants (ensemble de tous les sous domaines Active Directory).
* L'arbre ou l'arborescence : domaine de toutes les ramifications. Par exemple, dans l'arbre domaine.tld, sousdomaine1.domaine.tld, sousdomaine2.domaine.tld et photo.sousdomaine1.domaine.tld sont des sous-domaines de domaine.tld.
* Le domaine : constitue les feuilles de l'arborescence. photo.sousdomaine1.domaine.tld peut-être un domaine au même titre que domaine.tld.
Le modèle de données Active Directory est dérivé du modèle de données de la norme X.500 : l'annuaire contient des objets représentant des éléments de différents types décrits par des attributs. Les stratégies de groupe (GPO) sont des paramètres de configuration appliqués aux ordinateurs ou aux utilisateurs lors de leur initialisation, ils sont également gérés dans Active Directory.
Le protocole principal d'accès aux annuaires est LDAP qui permet d'ajouter, de modifier et de supprimer des données enregistrées dans Active Directory, et qui permet en outre de rechercher et de récupérer ces données. N'importe quelle application cliente conforme à LDAP peut être utilisée pour parcourir et interroger Active Directory ou pour y ajouter, y modifier ou y supprimer des données.

## Attributs des objets utilisateur

| Attribut | Description | Exemple | Remarque |
| distinguishedName | Identifiant Unique dans le schéma | CN=DUPOND Michel, OU=UTILISATEURS, DC=MYCOMPANY, DC=COM | |
| objectGUID | Identifiant Unique dans le schéma | | Codé sur 128 bits, c'est un attribut binaire difficilement exploitable. |
| name | Nom | DUPOND Michel | |
| description | Description | | |
| sAMAccountName (SAM-account-name) | Logon | mdupond | |
| userPrincipalName | Logon UPN | mdupond@mycompany.com | |
| adminCount | Administrateur ? | 1 | 1 = Compte de type Administrateur |
| department | Service | DAF\Compta\Clients | |
| physicalDeliveryOfficeName | Localisation géographique (bureau) | Paris\Tournon\1\101 | |
| title | Fonction | Technicien réseau | |
| mail | Adresse e-mail | mdupond@mycompany.com | |
| telephoneNumber | Téléphone fixe | | |
| mobile | Téléphone portable | | |
| accountExpires | Date d'expiration du compte | 130040605000000000 | Date d'expiration du compte, exprimée en centaines de nanosecondes depuis le 01/01/1601. Une valeur égale à 9223372036854775807 (0x7FFFFFFFFFFFFFFF en hexadécimal) signifie que le compte n'a pas de date d'expiration. |
| manager | Responsable | CN=DURAND Marcel, OU=UTILISATEURS, DC=MYCOMPANY, DC=COM | Cet attribut s'il est indiqué contiendra le distinguishedName d'un autre utilisateur |
| employeeId | Matricule | DX001 | |
| lastLogon | Date dernière connexion | | Même remarque que pour accountExpires |
| userAccountControl | État du compte | 512 | - 512 Compte activé - 514 Compte désactivé - 544 Compte activé, aucun mot de passe requis - 546 Compte désactivé, aucun mot de passe requis - 66048 Compte activé, mot de passe n'expire jamais - 66050 Compte désactivé, mot de passe n'expire jamais - 66080 Compte activé, mot de passe non requis et n'expirant jamais - 66082 Compte désactivé, mot de passe non requis et n'expirant jamais - 262656 Compte activé, carte à puce requise - 262658 Compte désactivé, carte à puce requise - 262688 Compte activé, carte à puce requise, aucun mot de passe requis - 262690 Compte désactivé, carte à puce requise, aucun mot de passe requis - 328192 Compte activé, carte à puce requise, mot de passe n’expirant jamais - 328194 Compte désactivé, carte à puce requise, mot de passe n’expirant jamais - 328224 Compte activé, carte à puce requise, mot de passe non requis et n'expirant jamais - 328226 Compte désactivé, carte à puce requise, mot de passe non requis et n'expirant jamais |

## Rôles uniques

Certaines fonctions - on parle de rôles - ne peuvent être attribués chacun qu'à un seul serveur à la fois, qui devient alors le maître d'opérations (Operations master en anglais) pour un ou plusieurs rôles. L'ensemble de ces rôles, appelés en anglais FSMO (pour Flexible Single Master Operations), peuvent donc être répartis sur un ou plusieurs contrôleurs de domaine. Ils sont au nombre de 5 :
| Nom du rôle | Position | Description |
| Maître de schéma (Schema Master) | 1 par forêt | Contrôle les modifications apportées au schéma de données Active Directory. |
| Maître d'attribution de noms de domaine (Domain Naming Master) | 1 par forêt | Contrôle l'ajout et la suppression des noms de domaines dans une forêt afin de garantir leur unicité. |
| Émulateur de PDC (PDC Emulator) | 1 par domaine | Se comporte comme un contrôleur de domaine NT4 pour permettre le support de clients NT4 (par exemple pour gérer les changements de mots de passe), ce contrôleur fournit également l'horloge de référence du domaine. |
| Maître RID (RID Master) | 1 par domaine | Fournit des tranches d'identifiants uniques aux autres contrôleurs de domaine. |
| Maître d'infrastructure (Infrastructure Master) | 1 par domaine | Synchronise les changements inter-domaines. |

## Nomenclature

Active Directory prend en charge l'utilisation de noms UNC (\), URL (/), et LDAP pour l'accès aux objets. En interne, AD utilise la version LDAP de la structure de noms de X.500.
Chaque objet possède un identifiant unique, le nom unique (DN pour Distinguished name), ainsi un objet imprimante appelé HPLaser3 dans l'OU Marketing et faisant partie du domaine foo.org aura comme DN : CN=HPLaser3,OU=Marketing, DC=foo, DC=org où CN est le nom commun (Common Name en anglais) et DC un composant de domaine. Un DN peut être constitué de bien plus de quatre éléments. L'objet peut ainsi également posséder un nom canonique (Canonical name), généralement le DN inversé, sans identifiants, et utilisant la barre oblique (slash) comme séparateur : foo.org/Marketing/HPLaser3. Afin d'identifier l'objet à l'intérieur de son conteneur, AD utilise un nom unique relatif (RDN pour Relative distinguished name) : CN=HPLaser3. Chaque objet possède également un identifiant global unique (GUID, pour Globally Unique Identifier) qui est une chaîne de caractères de 128 bits unique et non modifiable, utilisé par AD pour les opérations de recherche et de réplication. Certains objets possèdent également un nom utilisateur principal (UPN, pour User principal name), se présentant sous la forme nom_objet@nom_domaine.

## Relations d'approbation

Afin de permettre aux utilisateurs d'un domaine d'accéder aux ressources d'un autre domaine, AD utilise un mécanisme de relations d'approbation.
Les relations d'approbation au sein d'une même forêt sont automatiquement créées au moment de la création des domaines. Les limites par défaut des relations d'approbation sont fixées au niveau de la forêt, et non du domaine, elles sont implicites, et automatiquement transitives pour tous les domaines d'une même forêt. Toutes les relations d'approbation au sein d'une forêt sont bidirectionnelles et transitives. Cependant, afin de se connecter à d'autres forêts ou à des domaines non-AD, AD met en œuvre d'autres types de relations d'approbation : les approbations de type raccourci (shortcut) (jointures de deux domaines appartenant à des arborescences différentes, transitives, uni ou bidirectionnelles), forêt (forest) (transitives, uni ou bidirectionnelles), royaume (realm) (transitives ou intransitives, uni ou bidirectionnelles) ou externe (intransitives, uni ou bidirectionnelles).

### Approbations dans Windows 2000 (mode natif)

* Unidirectionnelle - Lorsqu'un domaine permet aux utilisateurs d'un autre domaine d'y accéder, mais que cet autre domaine n'autorise pas l'accès aux utilisateurs du premier domaine.
* Bidirectionnelle - Lorsque deux domaines permettent à leurs utilisateurs l'accès à l'autre domaine.
* Domaine d'approbation - Le domaine qui autorise l'accès aux utilisateurs d'un domaine approuvé.
* Domaine approuvé - Le domaine qui est approuvé, dont les utilisateurs ont accès au domaine d'approbation.
* Approbation transitive - Approbation qui peut s'étendre au-delà des deux domaines aux autres domaines approuvés de la même arborescence.
* Approbation non transitive - Approbation unidirectionnelle non étendue au-delà des deux domaines.
* Approbation explicite - Approbation créée par un administrateur. Non transitive et unidirectionnelle uniquement.
* Approbation croisée - Approbation explicite entre domaines de différentes arborescences ou faisant partie de la même arborescence lorsqu'aucune relation descendant/ancêtre (enfant/parent) n'existe entre les deux domaines.
Windows 2000 - prend en charge les types d'approbation suivants:
* Approbations transitives bidirectionnelles.
* Approbations non transitives unidirectionnelles.
D'autres types d'approbations peuvent être créés par les administrateurs. Ces approbations peuvent être de type:
* Raccourci

### Approbation supplémentaire dans Windows 2003 (mode natif)

Windows Server 2003 introduit un nouveau type d'approbation appelé approbation de forêt. Ce type d'approbation permet à tous les domaines d'une forêt d'approuver de manière transitive tous les domaines d’une autre forêt. Pour que cette nouvelle fonctionnalité soit disponible, il faut absolument que les deux forêts mises en relations aient au moins un niveau fonctionnel Windows Server 2003. L'authentification à travers ce type d'approbation doit être basée sur Kerberos (et non NTLM). Les approbations de forêt sont transitives pour tous les domaines appartenant aux forêts approuvées.

## AD LDS (anciennement ADAM)

AD LDS (pour Active Directory Lightweight Directory Services), anciennement nommé ADAM (pour Active Directory Application Mode), est une version plus légère d'Active Directory spécifiquement destinée à une utilisation au niveau applicatif. Développé sur la même base de code qu'Active Directory, AD LDS fournit les mêmes fonctionnalités qu'AD, ainsi qu'une API identique, mais il ne requiert pas la création de domaines et ne nécessite pas de contrôleur de domaine pour fonctionner.
Tout comme Active Directory, AD LDS fournit un espace de stockage utilisé pour stocker les données d'annuaire (le Data Store) ainsi qu'un service d'annuaire muni d'une interface de service d'annuaire LDAP. À la différence d'Active Directory, plusieurs instances d'AD LDS peuvent être exécutées simultanément sur le même serveur, chaque instance étant spécifiquement adaptée aux besoins des applications auxquelles elle est destinée et utilisant le service d'annuaire AD LDS.

## Utilisation en entreprise

À partir d'une certaine taille de l'entreprise on observe généralement que chaque service gère son propre annuaire des employés. Mais il manque souvent l'information que l'autre service possède, si bien que dans un souci d'homogénéisation, la DSI se trouve obligée de concevoir un système complexe de passerelles ascendantes et descendantes entre les annuaires.
Beaucoup sont tentés de mettre enfin en place un système de référence auquel auraient accès tous les services intéressés, en consultation comme en modification. Cette volonté survient notamment au moment de la mise en place d'une solution d'ITSM.
L'Active Directory est généralement pressenti car il est largement répandu quelle que soit la taille de l'organisation.
Mais des obstacles majeurs viennent contrecarrer cette intention.
* Peut-on confier un outil d'administration à des mains non qualifiées ?
* Comment maintenir un annuaire propre alors que les champs localisation, service, fonction, etc. sont des champs de saisie libre ?
* Comment guider les personnes qui saisissent les données essentielles, nom, login, email, matricule selon une charte que vous avez définie ; quel séparateur entre le nom et le prénom ? Accents ou pas ? Majuscule sur le nom ? quelle forme doit avoir le logon, et l'Email ? Quel était le dernier matricule ?
* Des référentiels de type localisations, services, fonctions sont souvent bien maintenus par les services concernés. Ne pourrait-on pas s'appuyer sur ces données pour renseigner l'Active Directory ?
* Peut-on limiter les accès et les droits pour chaque service concerné ?
* Comment visualiser les incohérences de l'Active Directory, absence de renseignements, utilisateurs ayant quitté l'entreprise mais dont le compte est toujours actif, etc. ?
* Comment exporter facilement une liste précise de comptes utilisateurs à destination d'autres annuaires ?

## Intégration d'Unix dans Active Directory

De nombreux éditeurs proposent des solutions d'intégration à Active Directory pour les plates-formes Unix (UNIX, GNU/Linux, Mac OS X, ainsi que nombre d'applications Java et UNIX). On peut citer ADmitMac de Thursby Software Systems, Vintela Authentication Services de Quest Software, DirectControl de Centrify et Likewise de Centeris Software. Microsoft propose également un produit gratuit, les Windows Services for UNIX. Les versions récentes des systèmes d'exploitation Linux et Unix fournissent des niveaux d'interopérabilité variés avec Active Directory comme la prise en charge des stratégies de groupe. Une alternative possible est d'utiliser un autre service d'annuaire comme 389 Directory Server (ex-Netscape Directory Server) capable d'effectuer une synchronisation bidirectionnelle avec Active Directory et fournir ainsi une intégration "déviée" consistant à faire s'authentifier sur 389DS les machines Unix et Linux tout en conservant l'authentification Active Directory native pour les machines Windows.