Jak jste si jistě všimli od Windows 2008 R2 v jeho Active Directory Users and Computers konzoli (neboli Uživatelé a počítače služby Active Directory) je možné chránit objekty proti náhodnému smazání. Jedná se o zaškrtávátko ve vlastnostech uživatelského účtu nazvané Protect object from accidental deletion.
Tohle je automaticky zapínáno na organizačních jednotkách (organization unit) při jejich vytváření přes GUI. Pokud to děláte skriptem, tak se to nenastaví.
Na uživatelích a skupinách a jiných objektech to nastaveno ve výchozím stavu není. Nehledě na to, že to možná chcete nastavit na více objektů později.
Pomocí skriptu PowerShell to jde úplně snadno:
DSQUERY * 'OU=people,DC=gopas,DC=virtual' -filter '(|(objectClass=user)(objectClass=group)(objectClass=organizationalUnit))' | % {
DSACLS ($_.Trim().Trim('"').Trim()) /D Everyone:SDDTDC
}
Předchozí skript pozapíná zákazy mazání na uživatelích (user), skupinách (group) i organizačních jednotkách (organizationalUnit).
Upravit si nejspíš dokážete, pokud ne, dejte vědět :-)
Proč to nejde jednoduše zdědit?
Zděděná oprávnění jsou slabší, než nezděděná explicitní oprávnění z nižší úrovně hierarchie. Takže i zděděné zakazovací (deny) oprávnění je možné přebít nezděděným povolením. Ta klasická hláška, že deny je vždycky silnější je kec. Deny není vždycky silnější ani na NTFS ani nidke jinde. Všude je možné zděděné deny přerazit pomocí explicitní nezděděné povolovací položky allow.
No a ony objekty v Active Directory (ADDS) mají mnoho explicitních nezděděných položek oprávnění (permissions). Dostávají je při svém vzniku z default security descriptor, který je pro jejich typ definován ve schematu. To obsahuje například full control pro Domain Admins, nebo pro Account Operators.
Takže pro Domain Admins a Account Operators je potřeba udělat právě skriptem explicitní deny položky na každém objektu samostatně.