Le problème : ms-DS-MachineAccountQuota
Par défaut, n’importe quel utilisateur authentifié dans un domaine Active Directory peut joindre jusqu’à 10 postes au domaine. Ce comportement est contrôlé par l’attribut ms-DS-MachineAccountQuota défini au niveau du domaine.
C’est un paramètre hérité des premières versions d’Active Directory, pensé pour simplifier les déploiements. En pratique, c’est un risque de sécurité : un utilisateur standard peut créer des comptes machines dans le domaine sans validation, ce qui ouvre la porte à des attaques (rogue computer, relais NTLM, etc.).
Vérifier la valeur actuelle
En PowerShell
PS> Get-ADObject -Identity (Get-ADDomain).DistinguishedName -Properties ms-DS-MachineAccountQuota | Select-Object ms-DS-MachineAccountQuota
Résultat par défaut :
ms-DS-MachineAccountQuota
-------------------------
10
En ADSI Edit
- Ouvrir
adsiedit.msc - Se connecter au contexte de nommage par défaut
- Clic droit sur la racine du domaine → Propriétés
- Chercher l’attribut
ms-DS-MachineAccountQuota
Méthode 1 : Passer le quota à 0
La méthode la plus directe. On interdit tout simplement aux utilisateurs standard de joindre des machines au domaine.
PS> Set-ADDomain -Identity (Get-ADDomain) -Replace @{"ms-DS-MachineAccountQuota"=0}
Vérification :
PS> Get-ADObject -Identity (Get-ADDomain).DistinguishedName -Properties ms-DS-MachineAccountQuota | Select-Object ms-DS-MachineAccountQuota
À partir de là, seuls les comptes ayant explicitement le droit de joindre des machines pourront le faire (admins du domaine, comptes délégués, etc.).
Méthode 2 : Déléguer le droit à un groupe spécifique
Plutôt que de laisser le quota ouvert, on le passe à 0 (voir méthode 1) et on délègue le droit de jonction à un groupe dédié.
Créer le groupe
PS> New-ADGroup -Name "GG_JonctionDomaine" -GroupScope Global -GroupCategory Security -Path "OU=Groupes,DC=domaine,DC=local"
Déléguer via GPO
- Ouvrir la GPO Default Domain Controllers Policy (ou une GPO liée à l’OU des contrôleurs de domaine)
- Aller dans Configuration ordinateur → Stratégies → Paramètres Windows → Paramètres de sécurité → Attribution des droits utilisateur
- Modifier Ajouter des stations de travail au domaine
- Ajouter le groupe
GG_JonctionDomaine - Retirer
Utilisateurs authentifiéss’il est présent
Seuls les membres de ce groupe pourront désormais joindre des postes au domaine.
Méthode 3 : Pré-créer les comptes machines
Une approche complémentaire consiste à pré-créer les comptes d’ordinateur dans l’AD avant la jonction. L’utilisateur qui effectue la jonction doit alors disposer des droits sur l’objet ordinateur déjà existant.
PS> New-ADComputer -Name "PC-COMPTA-01" -Path "OU=Postes,DC=domaine,DC=local"
On peut ensuite déléguer le droit de jonction sur l’OU :
- Clic droit sur l’OU → Délégation de contrôle
- Sélectionner le groupe ou l’utilisateur
- Choisir Joindre un ordinateur au domaine
L’avantage de cette méthode est que les machines atterrissent directement dans la bonne OU, et non dans le conteneur Computers par défaut.
Vérifier qui a joint quels postes
Pour auditer les machines jointes par des utilisateurs non-admin, on peut interroger l’attribut ms-DS-CreatorSID des comptes machines :
PS> Get-ADComputer -Filter * -Properties ms-DS-CreatorSID | Where-Object { $_."ms-DS-CreatorSID" -ne $null } | Select-Object Name, @{N="Createur";E={(New-Object System.Security.Principal.SecurityIdentifier($_."ms-DS-CreatorSID")).Translate([System.Security.Principal.NTAccount]).Value}}
Cette commande liste les machines qui ont été jointes par un utilisateur standard (et non par un admin) ainsi que le compte qui a effectué la jonction.
Recommandation
La bonne pratique est de combiner les approches :
- Passer
ms-DS-MachineAccountQuotaà 0 - Déléguer le droit de jonction à un groupe dédié via GPO
- Pré-créer les comptes machines dans les bonnes OU quand c’est possible
Cela garantit un contrôle strict sur ce qui rejoint le domaine, tout en restant souple pour les équipes qui déploient les postes.