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 (Изпълнете скрипт за влизане) | 0x0001 | 1 |
СМЕТКА (Акаунтът е деактивиран) | 0x0002 | 2 |
HOMEDIR_REQUIRED (задължителна домашна папка) | 0x0008 | 8 |
LOCKOUT (акаунтът е заключен) | 0x0010 | 16 |
PASSWD_NOTREQD (не се изисква парола) | 0x0020 | 32 |
PASSWD_CANT_CHANGE (Отказ промяна на паролата на потребителя) | 0x0040 | 64 |
ENCRYPTED_TEXT_PWD_ALLOWED (Запазване на паролата чрез обратимо криптиране) | 0x0080 | 128 |
TEMP_DUPLICATE_ACCOUNT (потребителски акаунт, чийто основен акаунт се съхранява в друг домейн) | 0x0100 | 256 |
NORMAL_ACCOUNT (акаунт по подразбиране. Нормален активен акаунт) | 0x0200 | 512 |
INTERDOMAIN_TRUST_ACCOUNT | 0x0800 | 2048 |
WORKSTATION_TRUST_ACCOUNT | 0x1000 | 4096 |
SERVER_TRUST_ACCOUNT | 0x2000 | 8192 |
DONT_EXPIRE_PASSWORD (Паролата не е изтекла) | 0x10000 | 65536 |
MNS_LOGON_ACCOUNT | 0x20000 | 131072 |
SMARTCARD_REQUIRED (Смарт карта е необходима за интерактивен достъп до мрежата) | 0x40000 | 262144 |
TRUSTED_FOR_DELEGATION | 0x80000 | 524288 |
NOT_DELEGATED | 0x100000 | 1048576 |
USE_DES_KEY_ONLY | 0x200000 | 2097152 |
DONT_REQ_PREAUTH (не се изисква удостоверяване на Kerberos) | 0x400000 | 4194304 |
PASSWORD_EXPIRED (Потребителската парола е изтекла) | 0x800000 | 8388608 |
TRUSTED_TO_AUTH_FOR_DELEGATION | 0x1000000 | 16777216 |
PARTIAL_SECRETS_ACCOUNT | 0x04000000 | 67108864 |
Например, има редовен акаунт, за който изискването за промяна на паролата е деактивирано. Стойността на 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