UserAccountControl je jedním z důležitých atributů uživatelských účtů a počítačů služby Active Directory. Tento atribut určuje stav účtu v doméně: zda je účet aktivní nebo zamčený, zda je povolena možnost změnit heslo při příštím přihlášení, zda uživatel může změnit své heslo atd. Ne všichni správci však mají jasnou představu o tom, jak se používá atribut UserAccountControl a proč se používá v AD..
Například otevřete vlastnosti libovolného účtu AD v konzole ADUC a přejděte na kartu Účet (Účet). Všimněte si skupiny atributů uživatelů v sekci Kontrola účtu (Nastavení účtu). K dispozici jsou následující možnosti účtu:
- Uživatel musí změnit heslo při příštím přihlášení (vyžadovat změnu hesla při příštím přihlášení);
- Uživatel nemůže změnit heslo;
- Heslo nikdy nevyprší (Heslo není omezeno);
- Uložte heslo pomocí reverzibilního šifrování (nezabezpečené šifrování) - nebezpečné;
- Účet je deaktivován
- Smart karta je vyžadována pro interaktivní přihlášení (Smart karta je vyžadována pro interaktivní přihlášení do sítě);
- Účet je citlivý a nelze jej delegovat (Účet je důležitý a nelze jej delegovat);
- Použít pro tento účet typy šifrování Kerberos DES (pro tento účet použít pouze typy šifrování Kerberos DES);
- Tento účet podporuje šifrování 128/256 bitů Kerberos AES (Tento účet podporuje 128 / 256bitové šifrování AES Kerberos);
- Vyžadovat předběžné ověření Kerberos (bez předchozího ověření Kerberos).
Každý z těchto atributů účtu je v podstatě bitová hodnota, která může být ve stavu 1 (True) nebo 0 (False). Tyto hodnoty však nejsou uloženy jako samostatné atributy AD, místo toho se používá atribut UserAccountControl.
Obsah:
- UserAccountControl - atribut Active Directory
- Skript PowerShell pro dešifrování hodnoty UserAccountControl
UserAccountControl - atribut Active Directory
Celková hodnota všech těchto možností je uložena v hodnotě atributu účtu UserAccountControl, tj. místo toho se jediný atribut služby Active Directory používá k uložení všech těchto možností do různých atributů. Atribut UserAccountControl je bitová maska, přičemž každý bit je samostatným příznakem, který zobrazuje hodnotu jedné ze zadaných možností a může mít jinou hodnotu (zapnuto nebo vypnuto). Proto v závislosti na povolených možnostech účtu získá uživatel jinou hodnotu pro atribut UserAccountControl. Aktuální hodnotu atributu můžete zobrazit na kartě Editor atributů nebo pomocí následující rutiny PowerShell Get-ADUser:
get-aduser user1 -properties * | select name, UserAccountControl | ft
V tomto příkladu hodnota atributu 0x10202 (v desetinné notaci 66050) Co tato čísla znamenají??
Níže je tabulka dostupných příznaků účtu v AD. Každý z příznaků odpovídá určitému bitu atributu UserAccountControl a hodnota UserAccountControl je rovna součtu všech příznaků.
Vlajka | Hodnota v HEXu | Desetinná hodnota |
SCRIPT (Spustit přihlašovací skript) | 0x0001 | 1 |
ACCOUNTDISABLE (účet deaktivován) | 0x0002 | 2 |
HOMEDIR_REQUIRED (vyžadována domovská složka) | 0x0008 | 8 |
LOCKOUT (účet zablokován) | 0x0010 | 16 |
PASSWD_NOTREQD (není vyžadováno heslo) | 0x0020 | 32 |
PASSWD_CANT_CHANGE (Odepřít změnu hesla uživatele) | 0x0040 | 64 |
ENCRYPTED_TEXT_PWD_ALLOWED (Uložit heslo pomocí reverzibilního šifrování) | 0x0080 | 128 |
TEMP_DUPLICATE_ACCOUNT (uživatelský účet, jehož hlavní účet je uložen v jiné doméně) | 0x0100 | 256 |
NORMAL_ACCOUNT (výchozí účet. Normální aktivní účet) | 0x0200 | 512 |
INTERDOMAIN_TRUST_ACCOUNT | 0x0800 | 2048 |
WORKSTATION_TRUST_ACCOUNT | 0x1000 | 4096 |
SERVER_TRUST_ACCOUNT | 0x2000 | 8192 |
DONT_EXPIRE_PASSWORD (Heslo nevyprší) | 0x10000 | 65536 |
MNS_LOGON_ACCOUNT | 0x20000 | 131072 |
SMARTCARD_REQUIRED (pro interaktivní přístup k síti je vyžadována čipová karta) | 0x40000 | 262144 |
TRUSTED_FOR_DELEGATION | 0x80000 | 524288 |
NOT_DELEGATED | 0x100000 | 1048576 |
USE_DES_KEY_ONLY | 0x200000 | 2097152 |
DONT_REQ_PREAUTH (nevyžaduje se ověření Kerberos) | 0x400000 | 4,194,304 |
PASSWORD_EXPIRED (Platnost hesla uživatele vypršela) | 0x800000 | 8388608 |
TRUSTED_TO_AUTH_FOR_DELEGATION | 0x1000000 | 16777216 |
PARTIAL_SECRETS_ACCOUNT | 0x04000000 | 67108864 |
Například existuje běžný účet, pro který je požadavek na změnu hesla deaktivován. Hodnota userAccountControl se získá následujícím způsobem
NORMAL_ACCOUNT (512) + DONT_EXPIRE_PASSWORD (65536) = 66048
Hodnota userAccountControl z mého příkladu (66050) se tedy ukázala takto:
NORMAL_ACCOUNT (512) + DONT_EXPIRE_PASSWORD (65536) + ÚČETDISABLE (2) = 66050
U běžného uzamčeného účtu bude hodnota userAccountControl 514:
(NORMAL_ACCOUNT (512) + ACCOUNTDISABLE (2) = 514
Výchozí hodnoty UserAccountControl pro typické objekty domény:
- Standardní uživatel: 0x200 (512)
- Řadič domény: 0x82000 (532480)
- Pracovní stanice / server: 0x1000 (4096)
Pomocí filtrů si můžete vybrat z objektů AD s konkrétní hodnotou atributu useraccountcontrol. Například pro zobrazení všech aktivních (normální účty):
Get-ADUser - Vlastnosti * -ldapFilter "(useraccountcontrol = 512)"
Seznam všech blokovaných účtů:
Get-ADUser -Properties * -ldapFilter "(useraccountcontrol = 514)"
Seznam účtů, které mají neomezené heslo:
Get-ADUser -Properties * -ldapFilter "(useraccountcontrol = 66048)"
Z tabulky můžete přidat potřebné bity a vybrat objekty AD pomocí následujících příkazů:
$ UserAccountControl_hex = 0x10000 + 0x0080 + 0x200000
Get-ADUser -Filter UserAccountControl -band $ UserAccountControl_hex
Skript PowerShell pro dešifrování hodnoty UserAccountControl
Pro větší pohodlí byste chtěli mít k dispozici nástroj, který automaticky převede hodnotu bitové masky UserAccountControl na normální lidskou formu. Zkusme napsat jednoduchou funkci pro skripty PowerShell, která vezme desítkovou hodnotu atributu UserAccountControl a zobrazí seznam zahrnutých možností účtování. Protože Atribut UserAccountControl je bitmask, každému bitu můžete přiřadit textový popis.
Dostal jsem takový skript PowerShell, abych převedl hodnotu UserAccountControl do čitelné podoby:
Funkce ConvertUserAccountControl ([int] $ UAC)
$ UACPropertyFlags = @ (
SCRIPT,
„ÚČET“,
„VYHRADENO“,
"HOMEDIR_REQUIRED",
"LOCKOUT",
"PASSWD_NOTREQD",
"PASSWD_CANT_CHANGE",
"ENCRYPTED_TEXT_PWD_ALLOWED",
„TEMP_DUPLICATE_ACCOUNT“,
„NORMAL_ACCOUNT“,
„VYHRADENO“,
„INTERDOMAIN_TRUST_ACCOUNT“,
„WORKSTATION_TRUST_ACCOUNT“,
„SERVER_TRUST_ACCOUNT“,
„VYHRADENO“,
„VYHRADENO“,
"DONT_EXPIRE_PASSWORD",
"MNS_LOGON_ACCOUNT",
„SMARTCARD_REQUIRED“,
"TRUSTED_FOR_DELEGATION",
„NOT_DELEGATED“,
„USE_DES_KEY_ONLY“,
"DONT_REQ_PREAUTH",
"PASSWORD_EXPIRED",
"TRUSTED_TO_AUTH_FOR_DELEGATION",
„VYHRADENO“,
PARTIAL_SECRETS_ACCOUNT
„VYHRADENO“
„VYHRADENO“
„VYHRADENO“
„VYHRADENO“
„VYHRADENO“
)$ Attributes = ""
1 ... ($ UACPropertyFlags.Length) | Where-Object $ UAC -bAnd [math] :: Pow (2, $ _) | ForEach-Object If ($ Attributes.Length -EQ 0) $ Attributes = $ UACPropertyFlags [$ _] Else $ Attributes = $ Attributes + "|" + $ UACPropertyFlags [$ _]
Návrat $ Atributy
Zkontrolujte, co je hodnota UserAccountControl 66050:
ConvertUserAccountControl 66050
Jak vidíte, skript se vrátil, že uživatel má povoleny atributy:
ACCOUNTDISABLE + NORMAL_ACCOUNT + DONT_EXPIRE_PASSWORD
Stejný skript lze použít k dešifrování hodnot UserAccountControl za běhu, když stahujete informace o jejich pověřeních AD ve vhodné formě pomocí rutiny Get-AdUser nebo Get-AdComputer, například:
get-aduser sam-prnt -properties * | select @ n = 'UsrAcCtrl'; e = ConvertUserAccountControl ($ _. userAccountControl)
ÚČET DOSTUPNÝ | NORMAL_ACCOUNT | DONT_EXPIRE_PASSWORD
get-adcomputer sam-dc01 - vlastnosti * | select @ n = 'UsrAcCtrl'; e = ConvertUserAccountControl ($ _. userAccountControl)
SERVER_TRUST_ACCOUNT | TRUSTED_FOR_DELEGATION