Rozdelenie hodnoty atribútu userAccountControl v službe Active Directory

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..

vlajkaHodnota v HEX Desatinná hodnota
SCRIPT (Spustiť prihlasovací skript)0x00011
ACCOUNTDISABLE (Account Disabled)0x00022
HOMEDIR_REQUIRED (Vyžaduje sa domáci priečinok)0x00088
LOCKOUT (účet zablokovaný)0x001016
PASSWD_NOTREQD (nevyžaduje sa žiadne heslo)0x002032
PASSWD_CANT_CHANGE (Odmietnuť zmenu hesla používateľa)0x004064
ENCRYPTED_TEXT_PWD_ALLOWED (Uložiť heslo pomocou reverzibilného šifrovania)0x0080128
TEMP_DUPLICATE_ACCOUNT (používateľský účet, ktorého hlavný účet je uložený v inej doméne)0x0100256
NORMAL_ACCOUNT (Predvolený účet. Normálny aktívny účet)0x0200512
INTERDOMAIN_TRUST_ACCOUNT0x08002048
WORKSTATION_TRUST_ACCOUNT0x10004096
SERVER_TRUST_ACCOUNT0x20008192
DONT_EXPIRE_PASSWORD (Heslo nevyprší)0x1000065536
MNS_LOGON_ACCOUNT0x20000131072
SMARTCARD_REQUIRED (na interaktívny prístup do siete je potrebná smart karta)0x40000262144
TRUSTED_FOR_DELEGATION0x80000524288
NOT_DELEGATED0X1000001048576
USE_DES_KEY_ONLY0x2000002097152
DONT_REQ_PREAUTH (nevyžaduje sa overenie Kerberos)0x4000004194304
PASSWORD_EXPIRED (Platnosť hesla používateľa vypršala)0x8000008388608
TRUSTED_TO_AUTH_FOR_DELEGATION0x100000016777216
PARTIAL_SECRETS_ACCOUNT0x0400000067108864

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