UserAccountControl je eden pomembnih atributov uporabniških računov in računalnikov Active Directory. Ta atribut določa stanje računa v domeni: ali je račun aktiven ali zaklenjen, ali je možnost spremembe gesla ob naslednji prijavi omogočena, ali lahko uporabnik spremeni geslo itd.). Vendar nimajo vsi skrbniki jasne predstave o tem, kako se uporablja atribut UserAccountControl in zakaj se uporablja v AD..
Na primer, odprite lastnosti katerega koli računa AD na konzoli ADUC in pojdite na zavihek Račun (Račun). V razdelku upoštevajte skupino uporabniških atributov Nadzor računa (Nastavitve računa). Tu so na voljo naslednje možnosti računa:
- Uporabnik mora spremeniti geslo ob naslednji prijavi (Zahtevati spremembo gesla ob naslednji prijavi);
- Uporabnik ne more spremeniti gesla;
- Geslo nikoli ne poteče (geslo ni omejeno);
- Shranite geslo z uporabo reverzibilne enkripcije (nezanesljivo šifriranje) - nevarno;
- Račun je onemogočen
- Pametna kartica je potrebna za interaktivno prijavo (pametna kartica je potrebna za interaktivno prijavo v omrežje);
- Račun je občutljiv in ga ni mogoče prenesti (račun je pomemben in ga ni mogoče prenesti);
- Za ta račun uporabite vrste šifriranja Kerberos DES (za ta račun uporabite samo vrste šifriranja Kerberos DES);
- Ta račun podpira Kerberos AES 128/256 bitno šifriranje (Ta račun podpira 128/256-bitno šifriranje Kerberos AES);
- Ne zahtevajte predhodne avtentikacije Kerberos (brez predhodne overitve Kerberos).
Vsak od teh atributov računa je v bistvu bitna vrednost, ki je lahko v stanju 1 (resnično) ali 0 (napačno). Vendar te vrednosti niso shranjene kot ločeni atributi AD, namesto tega se uporablja atribut UserAccountControl.
Vsebina:
- UserAccountControl - atribut Active Directory
- Skript PowerShell za dešifriranje vrednosti UserAccountControl
UserAccountControl - atribut Active Directory
Skupna vrednost vseh teh možnosti je shranjena v vrednosti atributa računa UserAccountControl, t.j. namesto tega se za shranjevanje vseh teh možnosti v različne atribute uporablja en atribut Active Directory. Atribut UserAccountControl je bitna maska, vsak bit je ločena zastava, ki prikazuje vrednost ene od podanih možnosti in ima lahko drugačno vrednost (vklopljen ali izklopljen). V skladu s tem bo uporabnik, odvisno od omogočenih možnosti računa, dobil drugačno vrednost za atribut UserAccountControl. Trenutno vrednost vrednosti atributa si lahko ogledate na zavihku Urejevalnik atributov ali pa uporabite naslednji ukazni program PowerShell Get-ADUser:
get-aduser user1 -properties * | izberite ime, UserAccountControl | ft
V tem primeru vrednost atributa 0x10202 (v decimalnih zapisih) 66050) Kaj pomenijo te številke??
Spodaj je tabela razpoložljivih zastavic računov v AD. Vsaka zastava ustreza določenemu bitju atributa UserAccountControl, vrednost UserAccountControl pa je enaka vsoti vseh zastav.
Zastava | Vrednost v HEX | Decimalna vrednost |
SCRIPT (Run Login Script) | 0x0001 | 1 |
RAČUNOVODSKO (račun onemogočen) | 0x0002 | 2 |
HOMEDIR_REQUIRED (potrebna je domača mapa) | 0x0008 | 8 |
LOCKOUT (račun je zaklenjen) | 0x0010 | 16 |
PASSWD_NOTREQD (geslo ni potrebno) | 0x0020 | 32 |
PASSWD_CANT_CHANGE (Zavrni spremembo uporabniškega gesla) | 0x0040 | 64 |
ENCRYPTED_TEXT_PWD_ALLOWED (Shrani geslo z reverzibilnim šifriranjem) | 0x0080 | 128 |
TEMP_DUPLICATE_ACCOUNT (uporabniški račun, katerega glavni račun je shranjen na drugi domeni) | 0x0100 | 256 |
NORMAL_ACCOUNT (privzeti račun. Običajni aktivni račun) | 0x0200 | 512 |
INTERDOMAIN_TRUST_ACCOUNT | 0x0800 | 2048 |
WORKSTATION_TRUST_ACCOUNT | 0x1000 | 4096 |
SERVER_TRUST_ACCOUNT | 0x2000 | 8192 |
DONT_EXPIRE_PASSWORD (Geslo ni poteklo) | 0x10000 | 65536 |
MNS_LOGON_ACCOUNT | 0x20000 | 131072 |
SMARTCARD_REQUIRED (za interaktivni dostop do omrežja je potrebna pametna kartica) | 0x40000 | 262144 |
TRUSTED_FOR_DELEGATION | 0x80000 | 524288 |
NOT_DELEGATED | 0x100000 | 1048576 |
USE_DES_KEY_ONLY | 0x200000 | 2097152 |
DONT_REQ_PREAUTH (Kerberos overjanje ni potrebno) | 0x400000 | 4,194,304 |
PASSWORD_EXPIRED (Uporabniško geslo je poteklo) | 0x800000 | 8388608 |
TRUSTED_TO_AUTH_FOR_DELEGATION | 0x1000000 | 16777216 |
PARTIAL_SECRETS_ACCOUNT | 0x04000000 | 67108864 |
Na primer, obstaja navaden račun, za katerega je zahteva za spremembo gesla onemogočena. Vrednost userAccountControl dobimo na naslednji način
NORMAL_ACCOUNT (512) + DONT_EXPIRE_PASSWORD (65536) = 66048
V skladu s tem se je vrednost userAccountControl iz mojega primera (66050) izkazala na naslednji način:
NORMAL_ACCOUNT (512) + DONT_EXPIRE_PASSWORD (65536) + RAČUNOVODSKO (2) = 66050
Za običajno zaklenjen račun bo vrednost userAccountControl 514:
(NORMAL_ACCOUNT (512) + RAČUNOVODSKO (2) = 514)
Privzete vrednosti UserAccountControl za značilne objekte domene:
- Standardni uporabnik: 0x200 (512)
- Krmilnik domene: 0x82000 (532480)
- Delovna postaja / strežnik: 0x1000 (4096)
S filtri lahko izbirate med objekti AD z določeno vrednostjo atributa useraccountcontrol. Na primer za prikaz vseh aktivnih (običajni računi):
Get-ADUser -Properties * -ldapFilter "(useraccountcontrol = 512)"
Seznam vseh blokiranih računov:
Get-ADUser -Properties * -ldapFilter "(useraccountcontrol = 514)"
Seznam računov z neomejenim geslom:
Get-ADUser -Properties * -ldapFilter "(useraccountcontrol = 66048)"
Iz tabele lahko dodate potrebne bite in izberete predmete AD s pomočjo naslednjih ukazov:
$ UserAccountControl_hex = 0x10000 + 0x0080 + 0x200000
Get-ADUser -Filter UserAccountControl -band $ UserAccountControl_hex
Skript PowerShell za dešifriranje vrednosti UserAccountControl
Za udobje bi radi imeli pri roki orodje, ki bi vrednost bitčne maske UserAccountControl samodejno pretvorilo v normalno človeško obliko. Poskusimo napisati preprosto funkcijo za skripte PowerShell, ki sprejme decimalno vrednost atributa UserAccountControl in prikaže seznam vključenih računovodskih možnosti. Ker Atribut UserAccountControl je bitna maska, vsakemu bitju lahko dodelite opis besedila.
Dobil sem takšen skript PowerShell za pretvorbo vrednosti UserAccountControl v berljivo obliko:
Funkcija ConvertUserAccountControl ([int] $ UAC)
$ UACPropertyFlags = @ ((
PISMO,
"RAČUNOVODSKO",
"REZERVIRAN",
"HOMEDIR_REQUIRED",
"LOKKOUT",
"PASSWD_NOTREQD",
"PASSWD_CANT_CHANGE",
"ENCRYPTED_TEXT_PWD_ALLOWED",
"TEMP_DUPLICATE_ACCOUNT",
"NORMAL_ACCOUNT",
"REZERVIRAN",
"INTERDOMAIN_TRUST_ACCOUNT",
"WORKSTATION_TRUST_ACCOUNT",
"SERVER_TRUST_ACCOUNT",
"REZERVIRAN",
"REZERVIRAN",
"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",
"REZERVIRAN",
PARTIAL_SECRETS_ACCOUNT
"REZERVIRAN"
"REZERVIRAN"
"REZERVIRAN"
"REZERVIRAN"
"REZERVIRAN"
)$ Atributi = ""
1 ... ($ UACPropertyFlags.Length) | Kjer-objekt $ UAC -bAnd [math] :: Pow (2, $ _) | ForEach-Object If ($ Attributes.Length -EQ 0) $ Attributes = $ UACPropertyFlags [$ _] Drug $ Attributes = $ Attributes + "|" + $ UACPropertyFlags [$ _]
Vrni atribute $
Preverite, koliko je vrednost UserAccountControl 66050:
ConvertUserAccountControl 66050
Kot vidite, je skript vrnil, da ima uporabnik omogočene atribute:
ACCOUNTDISABLE + NORMAL_ACCOUNT + DONT_EXPIRE_PASSWORD
Isti skript je mogoče uporabiti za dešifriranje vrednosti UserAccountControl med letenjem, kadar nalagate informacije o svojih akreditacijah AD v priročni obliki s pomočjo ukaznega okna Get-AdUser ali Get-AdComputer, na primer:
get-aduser sam-prnt -properties * | izberite @ n = 'UsrAcCtrl'; e = ConvertUserAccountControl ($ _. userAccountControl)
RAČUNOVODSKO | NORMAL_ACCOUNT | DONT_EXPIRE_PASSWORD
get-adcomputer sam-dc01 -properties * | izberite @ n = 'UsrAcCtrl'; e = ConvertUserAccountControl ($ _. userAccountControl)
SERVER_TRUST_ACCOUNT | TRUSTED_FOR_DELEGATION