Omezení přidávání počítačů do domény běžnými uživateli
Omezení přidávání počítačů do domény běžnými uživateli
Ve výchozím nastavení může ověřený uživatel vytvořit v doméně až deset počítačových účtů. Nastavením ms-DS-MachineAccountQuota na 0 tuto výchozí možnost vypneme a přidávání zařízení přesuneme na řízený provisioning.
⚠️ Změna kvóty sama o sobě neruší explicitně delegovaná práva. Účet s oprávněním Create Computer objects na konkrétní OU může počítačový účet vytvořit i při kvótě 0.
1. Jak oprávnění k domain join funguje
Je potřeba rozlišit tři situace:
- Vytvoření nového účtu přes výchozí kvótu. Uživatel využije právo
SeMachineAccountPrivilege(Add workstations to domain) a omezuje homs-DS-MachineAccountQuota, ve výchozím stavu10. - Vytvoření nového účtu pomocí delegace na OU. Oprávnění na kontejneru se řídí ACL a kvótu obchází.
- Opětovné použití předem vytvořeného účtu. Vedle práv k objektu se uplatňuje kontrola vlastníka zavedená aktualizacemi KB5020276.
📌 Možnost vytvořit doménový počítač není sama o sobě automatickou eskalací na správce domény, ale poskytuje útočníkovi další doménovou identitu a rozšiřuje prostor pro zneužití chybných delegací a Kerberos konfigurace.
2. Kontrola současného stavu
Spustíme jako účet s právem číst doménový objekt:
Import-Module ActiveDirectory
$Domain = Get-ADDomain
Get-ADObject `
-Identity $Domain.DistinguishedName `
-Properties 'ms-DS-MachineAccountQuota' |
Select-Object DistinguishedName, 'ms-DS-MachineAccountQuota'
Také zkontrolujeme, komu jsou na OU pro počítače delegována práva, a GPO pro řadiče domény:
Computer Configuration > Policies > Windows Settings > Security Settings > Local Policies > User Rights Assignment > Add workstations to domain
Kvóta a SeMachineAccountPrivilege tvoří jednu cestu. Explicitní delegace na OU je samostatná cesta.
2.1 Přehled účtů vytvořených přes kvótu
mS-DS-CreatorSID pomáhá dohledat počítačové účty, u nichž AD eviduje tvůrce:
Get-ADComputer -LDAPFilter '(mS-DS-CreatorSID=*)' -Properties mS-DS-CreatorSID |
ForEach-Object {
$Sid = [System.Security.Principal.SecurityIdentifier]::new(
$_.'mS-DS-CreatorSID', 0
)
try {
$Creator = $Sid.Translate(
[System.Security.Principal.NTAccount]
).Value
}
catch {
$Creator = $Sid.Value
}
[pscustomobject]@{
Computer = $_.Name
Creator = $Creator
DN = $_.DistinguishedName
}
} |
Sort-Object Creator, Computer
⚠️ Výsledek před změnou projdeme a neznámé nebo nepoužívané účty ověříme; nemažeme je automaticky.
3. Nastavení kvóty na nulu
Import-Module ActiveDirectory
$Domain = Get-ADDomain
Set-ADDomain `
-Identity $Domain.DistinguishedName `
-Replace @{'ms-DS-MachineAccountQuota' = 0}
Hodnotu ověříme na PDC Emulatoru a po replikaci také na ostatních DC:
$Domain = Get-ADDomain
Get-ADObject `
-Server $Domain.PDCEmulator `
-Identity $Domain.DistinguishedName `
-Properties 'ms-DS-MachineAccountQuota' |
Select-Object -ExpandProperty 'ms-DS-MachineAccountQuota'
repadmin /replsummary
✅ Očekávaný výsledek je 0. Existující počítačové účty se změnou neodstraní a již připojené počítače z domény nevypadnou.
4. Řízený způsob přidávání počítačů
Vytvoříme například skupinu GG-DomainJoin-Workstations a delegujeme jí práva pouze na OU OU=Workstations.
❌ Provisioning účtu nedáváme členství v Domain Admins.
Preferované varianty jsou:
- provisioning systém vytvoří účet počítače ve správné OU a provede join,
- stejný důvěryhodný účet počítačový objekt vytvoří i použije,
- použijeme offline domain join (
djoin.exe), který na cílovém zařízení nevyžaduje oprávnění vytvářet objekt v AD.
Při ruční delegaci se řídíme požadovanými právy pro vytvoření nebo opětovné použití účtu z dokumentace Microsoftu. Samotné Create Computer objects nemusí stačit pro rejoin existujícího objektu; ten může vyžadovat mimo jiné reset hesla, validované zápisy DNS hostname a SPN a zápis account restrictions.
4.1 Opětovné použití existujícího účtu
Aktualizované systémy blokují reuse účtu, pokud jeho vlastník není považován za důvěryhodného. Typická chyba je:
0xaac (2732): NERR_AccountReuseBlockedByPolicy
An account with the same name exists in Active Directory.
Re-using the account was blocked by security policy.
Pokud provisioning účty předem vytváří jiná důvěryhodná služba, nastavíme na všech DC GPO:
Computer Configuration > Policies > Windows Settings > Security Settings > Local Policies > Security Options > Domain controller: Allow computer account re-use during domain join
⚠️ Do allowlistu přidáme jen skupiny důvěryhodných vlastníků/tvůrců počítačových účtů, nikoli účet, který pouze provádí join, a nikdy Authenticated Users nebo Everyone. Registr ComputerAccountReuseAllowList ručně neupravujeme.
5. Test a troubleshooting
Po replikaci provedeme dva testy:
- Běžný uživatel bez delegace se pokusí přidat počítač s novým názvem. Vytvoření musí selhat.
- Schválený provisioning postup vytvoří účet ve správné OU a join musí projít.
Při chybě zkontrolujeme na klientovi:
C:\Windows\debug\NetSetup.log
Události povoleného nebo blokovaného reuse jsou v systémovém logu klienta jako Netjoin 4100 a 4101; související kontroly allowlistu se zapisují také do systémového logu řadiče domény.
Shrnutí
✅ ms-DS-MachineAccountQuota = 0 vypne výchozí možnost běžných uživatelů vytvářet počítačové účty.
✅ Explicitní delegace na určené OU zůstává funkční a používáme ji pro řízený provisioning.
✅ Před změnou zkontrolujeme mS-DS-CreatorSID, delegace na OU a právo Add workstations to domain.
✅ Po změně otestujeme zamítnutý join běžného uživatele i schválený provisioning.
⚠️ Reuse existujícího účtu nastavujeme podle KB5020276 a allowlist nikdy neotevíráme všem uživatelům.