UserAccountControl je jedným z dôležitých atribútov používateľských účtov a počítačov služby Active Directory. Tento atribút určuje stav účtu v doméne: či je účet aktívny alebo zamknutý, či je povolená možnosť zmeniť heslo pri nasledujúcom prihlásení, či používateľ môže zmeniť svoje heslo, atď.). Nie všetci správcovia však majú jasnú predstavu o tom, ako sa používa atribút UserAccountControl a prečo sa používa v AD..
Napríklad otvorte vlastnosti ľubovoľného účtu AD v konzole ADUC a prejdite na kartu účet (Účet). Všimnite si skupinu atribútov používateľa v tejto časti Kontrola účtu (Nastavenia účtu). K dispozícii sú nasledujúce možnosti účtu:
- Užívateľ musí zmeniť heslo pri najbližšom prihlásení (požadovať zmenu hesla pri ďalšom prihlásení);
- Užívateľ nemôže zmeniť heslo;
- Heslo nikdy nevyprší (Heslo nie je obmedzené);
- Uložte heslo pomocou reverzibilného šifrovania (nezabezpečené šifrovanie) - nebezpečné;
- Účet je zakázaný
- Smart karta je potrebná pre interaktívne prihlásenie (Smart karta je vyžadovaná pre interaktívne prihlásenie do siete);
- Účet je citlivý a nemožno ho delegovať (účet je dôležitý a nedá sa ním delegovať).
- Pre tento účet použite typy šifrovania Kerberos DES (pre tento účet používajte iba typy šifrovania Kerberos DES);
- Tento účet podporuje šifrovanie 128/256 bitov Kerberos AES (Tento účet podporuje 128/256-bitové šifrovanie AES Kerberos);
- Nevyžadujú predbežné overenie Kerberos (bez predchádzajúcej autentifikácie Kerberos).
Každý z týchto atribútov účtu je v podstate bitová hodnota, ktorá môže byť v stave 1 (True) alebo 0 (False). Tieto hodnoty sa však neukladajú ako samostatné atribúty AD, namiesto toho sa používa atribút UserAccountControl.
obsah:
- UserAccountControl - Atribút Active Directory
- Skript PowerShell na dešifrovanie hodnoty UserAccountControl
UserAccountControl - Atribút Active Directory
Celková hodnota všetkých týchto volieb je uložená v hodnote atribútu účtu UserAccountControl, tj Namiesto toho sa na uloženie všetkých týchto možností do rôznych atribútov používa jediný atribút služby Active Directory. Atribút UserAccountControl je bitová maska, z ktorých každý bit predstavuje samostatný príznak, ktorý zobrazuje hodnotu jednej zo špecifikovaných možností a môže mať inú hodnotu (zapnuté alebo vypnuté). Preto v závislosti od povolených možností účtu získa užívateľ inú hodnotu pre atribút UserAccountControl. Aktuálnu hodnotu atribútu môžete zobraziť na karte Editor atribútov alebo pomocou nasledujúcej rutiny PowerShell Get-ADUser:
get-aduser user1 -properties * | select name, UserAccountControl | ft
V tomto príklade hodnota atribútu 0x10202 (v desatinnom zápise 66050). Čo znamenajú tieto čísla??
Nižšie je uvedená tabuľka dostupných príznakov účtu v službe AD. Každá z príznakov zodpovedá špecifickému bitu atribútu UserAccountControl a hodnota UserAccountControl sa rovná súčtu všetkých príznakov..
vlajka | Hodnota v HEX | Desatinná hodnota |
SCRIPT (Spustiť prihlasovací skript) | 0x0001 | 1 |
ACCOUNTDISABLE (Account Disabled) | 0x0002 | 2 |
HOMEDIR_REQUIRED (Vyžaduje sa domáci priečinok) | 0x0008 | 8 |
LOCKOUT (účet zablokovaný) | 0x0010 | 16 |
PASSWD_NOTREQD (nevyžaduje sa žiadne heslo) | 0x0020 | 32 |
PASSWD_CANT_CHANGE (Odmietnuť zmenu hesla používateľa) | 0x0040 | 64 |
ENCRYPTED_TEXT_PWD_ALLOWED (Uložiť heslo pomocou reverzibilného šifrovania) | 0x0080 | 128 |
TEMP_DUPLICATE_ACCOUNT (používateľský účet, ktorého hlavný účet je uložený v inej doméne) | 0x0100 | 256 |
NORMAL_ACCOUNT (Predvolený účet. Normálny aktívny úč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 (na interaktívny prístup do siete je potrebná smart karta) | 0x40000 | 262144 |
TRUSTED_FOR_DELEGATION | 0x80000 | 524288 |
NOT_DELEGATED | 0X100000 | 1048576 |
USE_DES_KEY_ONLY | 0x200000 | 2097152 |
DONT_REQ_PREAUTH (nevyžaduje sa overenie Kerberos) | 0x400000 | 4194304 |
PASSWORD_EXPIRED (Platnosť hesla používateľa vypršala) | 0x800000 | 8388608 |
TRUSTED_TO_AUTH_FOR_DELEGATION | 0x1000000 | 16777216 |
PARTIAL_SECRETS_ACCOUNT | 0x04000000 | 67108864 |
Napríklad existuje bežný účet, pre ktorý je požiadavka na zmenu hesla zakázaná. Hodnota userAccountControl sa získa nasledovne
NORMAL_ACCOUNT (512) + DONT_EXPIRE_PASSWORD (65536) = 66048
Preto sa hodnota userAccountControl z môjho príkladu (66050) ukázala takto:
NORMAL_ACCOUNT (512) + DONT_EXPIRE_PASSWORD (65536) + ÚČETDISABLE (2) = 66050
Pre bežný uzamknutý účet bude hodnota userAccountControl 514:
(NORMAL_ACCOUNT (512) + ACCOUNTDISABLE (2) = 514
Predvolené hodnoty UserAccountControl pre typické objekty domény:
- Štandardný užívateľ: 0x200 (512)
- Radič domény: 0x82000 (532480)
- Pracovná stanica / server: 0x1000 (4096)
Pomocou filtrov si môžete vybrať z objektov AD so špecifickou hodnotou atribútu useraccountcontrol. Napríklad na zobrazenie všetkých aktívnych (bežné účty):
Get-ADUser - Vlastnosti * -ldapFilter "(useraccountcontrol = 512)"
Zoznam všetkých blokovaných účtov:
Get-ADUser - Vlastnosti * -ldapFilter "(useraccountcontrol = 514)"
Zoznam účtov, ktoré majú neobmedzené heslo:
Get-ADUser - Vlastnosti * -ldapFilter "(useraccountcontrol = 66048)"
Z tabuľky môžete pridať potrebné bity a vybrať objekty AD pomocou nasledujúcich príkazov:
$ UserAccountControl_hex = 0x10000 + 0x0080 + 0x200000
Get-ADUser -Filter UserAccountControl -band $ UserAccountControl_hex
Skript PowerShell na dešifrovanie hodnoty UserAccountControl
Kvôli pohodliu by ste chceli mať k dispozícii nástroj, ktorý by automaticky premieňal hodnotu bitovej masky UserAccountControl na normálnu ľudskú formu. Skúsme napísať jednoduchú funkciu pre skripty PowerShell, ktorá preberá desatinnú hodnotu atribútu UserAccountControl a zobrazuje zoznam zahrnutých možností účtovania. pretože Atribút UserAccountControl je bitmask, každému bitu môžete priradiť textový popis.
Dostal som taký skript PowerShell, aby som premenil hodnotu UserAccountControl na čitateľnú formu:
Funkcia ConvertUserAccountControl ([int] $ UAC)
$ UACPropertyFlags = @ (
"SCRIPT",
"ACCOUNTDISABLE",
"Vyhradené",
"HOMEDIR_REQUIRED",
"LOCKOUT",
"PASSWD_NOTREQD",
"PASSWD_CANT_CHANGE",
"ENCRYPTED_TEXT_PWD_ALLOWED",
"TEMP_DUPLICATE_ACCOUNT",
"NORMAL_ACCOUNT",
"Vyhradené",
"INTERDOMAIN_TRUST_ACCOUNT",
"WORKSTATION_TRUST_ACCOUNT",
"SERVER_TRUST_ACCOUNT",
"Vyhradené",
"Vyhradené",
"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",
"Vyhradené",
"PARTIAL_SECRETS_ACCOUNT"
"Vyhradené"
"Vyhradené"
"Vyhradené"
"Vyhradené"
"Vyhradené"
)$ Attributes = ""
1 ... ($ UACPropertyFlags.Length) | Where-Object $ UAC-baA [math] :: Pow (2, $ _) | ForEach-Object If ($ Attributes.Length -EQ 0) $ Attributes = $ UACPropertyFlags [$ _] Else $ Attributes = $ Attributes + "|" + $ UACPropertyFlags [$ _]
Vrátiť $ Atribúty
Skontrolujte, čo je hodnota UserAccountControl 66050:
ConvertUserAccountControl 66050
Ako vidíte, skript vrátil, že používateľ má povolené atribúty:
ACCOUNTDISABLE + NORMAL_ACCOUNT + DONT_EXPIRE_PASSWORD
Rovnaký skript sa môže použiť na dešifrovanie hodnôt UserAccountControl za behu, keď sa sťahujú informácie o ich povereniach AD vo vhodnej forme pomocou rutiny Get-AdUser alebo Get-AdComputer, napríklad:
get-aduser sam-prnt -properties * | select @ n = 'UsrAcCtrl'; e = ConvertUserAccountControl ($ _. userAccountControl)
ÚČTOVNÍCTVO | NORMAL_ACCOUNT | DONT_EXPIRE_PASSWORD
get-adcomputer sam-dc01 -processties * | select @ n = 'UsrAcCtrl'; e = ConvertUserAccountControl ($ _. userAccountControl)
SERVER_TRUST_ACCOUNT | TRUSTED_FOR_DELEGATION