Rozdělení hodnoty atributu userAccountControl ve službě Active Directory

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

VlajkaHodnota v HEXu Desetinná hodnota
SCRIPT (Spustit přihlašovací skript)0x00011
ACCOUNTDISABLE (účet deaktivován)0x00022
HOMEDIR_REQUIRED (vyžadována domovská složka)0x00088
LOCKOUT (účet zablokován)0x001016
PASSWD_NOTREQD (není vyžadováno heslo)0x002032
PASSWD_CANT_CHANGE (Odepřít změnu hesla uživatele)0x004064
ENCRYPTED_TEXT_PWD_ALLOWED (Uložit heslo pomocí reverzibilního šifrování)0x0080128
TEMP_DUPLICATE_ACCOUNT (uživatelský účet, jehož hlavní účet je uložen v jiné doméně)0x0100256
NORMAL_ACCOUNT (výchozí účet. Normální aktivní účet)0x0200512
INTERDOMAIN_TRUST_ACCOUNT0x08002048
WORKSTATION_TRUST_ACCOUNT0x10004096
SERVER_TRUST_ACCOUNT0x20008192
DONT_EXPIRE_PASSWORD (Heslo nevyprší)0x1000065536
MNS_LOGON_ACCOUNT0x20000131072
SMARTCARD_REQUIRED (pro interaktivní přístup k síti je vyžadována čipová karta)0x40000262144
TRUSTED_FOR_DELEGATION0x80000524288
NOT_DELEGATED0x1000001048576
USE_DES_KEY_ONLY0x2000002097152
DONT_REQ_PREAUTH (nevyžaduje se ověření Kerberos)0x4000004,194,304
PASSWORD_EXPIRED (Platnost hesla uživatele vypršela)0x8000008388608
TRUSTED_TO_AUTH_FOR_DELEGATION0x100000016777216
PARTIAL_SECRETS_ACCOUNT0x0400000067108864

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