Дешифриране на стойността на атрибута userAccountControl в Active Directory

UserAccountControl е един от важните атрибути на потребителските акаунти и компютрите с Active Directory. Този атрибут определя състоянието на акаунта в домейна: дали акаунтът е активен или заключен, дали е активирана възможността за промяна на паролата при следващото влизане, дали потребителят може да промени паролата си и т.н.). Не всички администратори обаче имат ясна представа за това как се използва атрибута UserAccountControl и защо се използва в AD..

Например, отворете свойствата на всеки акаунт на AD в конзолата ADUC и отидете на раздела сметка (Профил). Забележете групата атрибути на потребителя в секцията Контрол на акаунта (Настройки на акаунта). Тук са достъпни следните опции за акаунт:

  • Потребителят трябва да промени паролата при следващо влизане (Изисква промяна на паролата при следващо влизане);
  • Потребителят не може да промени паролата;
  • Паролата никога не изтича (Паролата не е ограничена);
  • Съхранявайте паролата, използвайки обратимо криптиране (несигурно криптиране) - опасно;
  • Профилът е деактивиран
  • За интерактивно влизане е необходима интелигентна карта (за интерактивно влизане е необходима интелигентна карта);
  • Сметката е чувствителна и не може да бъде делегирана (Сметката е важна и не може да бъде делегирана);
  • Използвайте типове криптиране на Kerberos DES за този акаунт (Използвайте само типове шифроване на Kerberos DES за този акаунт);
  • Този акаунт поддържа Kerberos AES 128/256 битово криптиране (Този акаунт поддържа 128/256-битово Kerberos AES криптиране);
  • Не се изисква предварителна проверка на Kerberos (без предварително Kerberos удостоверяване).

Всеки от тези атрибути на акаунта е по същество битова стойност, която може да бъде в състояние 1 (True) или 0 (False). Тези стойности обаче не се съхраняват като отделни атрибути на AD, вместо това се използва атрибутът UserAccountControl.

Съдържание:

  • UserAccountControl - атрибут Active Directory
  • PowerShell скрипт за дешифриране на стойност UserAccountControl

UserAccountControl - атрибут Active Directory

Общата стойност на всички тези опции се съхранява в стойността на атрибута на акаунта UserAccountControl, т.е. вместо това се използва един атрибут Active Directory, който съхранява всички тези опции в различни атрибути. Атрибутът UserAccountControl е битова маска, всеки бит от които е отделен флаг, който показва стойността на една от посочените опции и може да има различна стойност (включена или изключена). Съответно, в зависимост от активираните опции за акаунта, потребителят ще получи различна стойност за атрибута UserAccountControl. Можете да видите текущата стойност на атрибута в раздела Редактор на атрибути или като използвате следния командлет PowerShell Get-ADUser:

get-aduser user1 -properties * | изберете име, UserAccountControl | фута

В този пример стойността на атрибута 0x10202 (в десетична нотация 66050). Какво означават тези числа??

По-долу е представена таблица с наличните флагове на акаунта в AD. Всеки от флаговете съответства на конкретен бит от атрибута UserAccountControl и стойността на UserAccountControl е равна на сумата от всички флагове.

флагСтойност в HEX Десетична стойност
SCRIPT (Изпълнете скрипт за влизане)0x00011
СМЕТКА (Акаунтът е деактивиран)0x00022
HOMEDIR_REQUIRED (задължителна домашна папка)0x00088
LOCKOUT (акаунтът е заключен)0x001016
PASSWD_NOTREQD (не се изисква парола)0x002032
PASSWD_CANT_CHANGE (Отказ промяна на паролата на потребителя)0x004064
ENCRYPTED_TEXT_PWD_ALLOWED (Запазване на паролата чрез обратимо криптиране)0x0080128
TEMP_DUPLICATE_ACCOUNT (потребителски акаунт, чийто основен акаунт се съхранява в друг домейн)0x0100256
NORMAL_ACCOUNT (акаунт по подразбиране. Нормален активен акаунт)0x0200512
INTERDOMAIN_TRUST_ACCOUNT0x08002048
WORKSTATION_TRUST_ACCOUNT0x10004096
SERVER_TRUST_ACCOUNT0x20008192
DONT_EXPIRE_PASSWORD (Паролата не е изтекла)0x1000065536
MNS_LOGON_ACCOUNT0x20000131072
SMARTCARD_REQUIRED (Смарт карта е необходима за интерактивен достъп до мрежата)0x40000262144
TRUSTED_FOR_DELEGATION0x80000524288
NOT_DELEGATED0x1000001048576
USE_DES_KEY_ONLY0x2000002097152
DONT_REQ_PREAUTH (не се изисква удостоверяване на Kerberos)0x4000004194304
PASSWORD_EXPIRED (Потребителската парола е изтекла)0x8000008388608
TRUSTED_TO_AUTH_FOR_DELEGATION0x100000016777216
PARTIAL_SECRETS_ACCOUNT0x0400000067108864

Например, има редовен акаунт, за който изискването за промяна на паролата е деактивирано. Стойността на userAccountControl се получава, както следва

NORMAL_ACCOUNT (512) + DONT_EXPIRE_PASSWORD (65536) = 66048

Съответно стойността на userAccountControl от моя пример (66050) се оказа, както следва:

NORMAL_ACCOUNT (512) + DONT_EXPIRE_PASSWORD (65536) + ACCOUNTDISABLE (2) = 66050

За нормално заключен акаунт стойността на userAccountControl ще бъде 514:

(NORMAL_ACCOUNT (512) + СМЕТКА, РАЗЛИЧНА (2) = 514)

Стойности по подразбиране UserAccountControl за типични обекти на домейна:

  • Стандартен потребител: 0x200 (512)
  • Контролер на домейн: 0x82000 (532480)
  • Работна станция / сървър: 0x1000 (4096)

С помощта на филтри можете да избирате от AD обекти с определена стойност на атрибут useraccountcontrol. Например за показване на всички активни (нормални акаунти):

Get-ADUser -Properties * -ldapFilter "(useraccountcontrol = 512)"

Списък на всички блокирани акаунти:

Get-ADUser -Properties * -ldapFilter "(useraccountcontrol = 514)"

Списък на акаунти с неограничена парола:

Get-ADUser -Properties * -ldapFilter "(useraccountcontrol = 66048)"

Можете да добавите необходимите битове от таблицата и да изберете AD обекти, като използвате следните команди:

$ UserAccountControl_hex = 0x10000 + 0x0080 + 0x200000
Get-ADUser -Filter UserAccountControl -band $ UserAccountControl_hex

PowerShell скрипт за дешифриране на стойност UserAccountControl

За удобство бихте искали да имате под ръка инструмент, който автоматично да преобразува стойността на битмаската на UserAccountControl в нормална човешка форма. Нека се опитаме да напишем проста функция за скриптове на PowerShell, която приема десетичната стойност на атрибута UserAccountControl и показва списък с включени счетоводни опции. защото Атрибутът UserAccountControl е битова маска, можете да зададете текстово описание на всеки бит.

Получих такъв скрипт на PowerShell за преобразуване на стойност на UserAccountControl в четена форма:

Функция ConvertUserAccountControl ([int] $ UAC)

$ UACPropertyFlags = @ ((
"SCRIPT",
"ACCOUNTDISABLE",
"Запазени",
"HOMEDIR_REQUIRED",
"СПИРАНЕ",
"PASSWD_NOTREQD",
"PASSWD_CANT_CHANGE",
"ENCRYPTED_TEXT_PWD_ALLOWED",
"TEMP_DUPLICATE_ACCOUNT",
"NORMAL_ACCOUNT",
"Запазени",
"INTERDOMAIN_TRUST_ACCOUNT",
"WORKSTATION_TRUST_ACCOUNT",
"SERVER_TRUST_ACCOUNT",
"Запазени",
"Запазени",
"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",
"Запазени",
"PARTIAL_SECRETS_ACCOUNT"
"Запазени"
"Запазени"
"Запазени"
"Запазени"
"Запазени"
)

$ Attributes = ""
1 ... ($ UACPropertyFlags.Length) | Къде-обект $ UAC -bAnd [математика] :: Pow (2, $ _) | ForEach-Object If ($ Attributes.Length -EQ 0) $ Attributes = $ UACPropertyFlags [$ _] Друго $ Attributes = $ Attributes + "|" + $ UACPropertyFlags [$ _]
Върнете $ Атрибути

Проверете каква е стойността на UserAccountControl 66050:

ConvertUserAccountControl 66050

Както можете да видите, скриптът върна, че потребителят има активирани атрибути:

ACCOUNTDISABLE + NORMAL_ACCOUNT + DONT_EXPIRE_PASSWORD

Същият скрипт може да се използва за дешифриране на стойностите на UserAccountControl в движение, при изтегляне на информация за техните идентификационни данни в удобна форма, използвайки командлета Get-AdUser или Get-AdComputer, например:

get-aduser sam-prnt -properties * | select @ n = 'UsrAcCtrl'; e = ConvertUserAccountControl ($ _. userAccountControl)

СМЕТКА | NORMAL_ACCOUNT | DONT_EXPIRE_PASSWORD

get-adcomputer sam-dc01 -properties * | select @ n = 'UsrAcCtrl'; e = ConvertUserAccountControl ($ _. userAccountControl)

SERVER_TRUST_ACCOUNT | TRUSTED_FOR_DELEGATION