UserAccountControl jest jednym z ważnych atrybutów kont użytkowników i komputerów Active Directory. Ten atrybut określa status konta w domenie: czy konto jest aktywne czy zablokowane, czy włączona jest opcja zmiany hasła przy następnym logowaniu, czy użytkownik może zmienić swoje hasło itp.). Jednak nie wszyscy administratorzy mają jasne pojęcie o tym, w jaki sposób używany jest atrybut UserAccountControl i dlaczego jest on używany w AD..
Na przykład otwórz właściwości dowolnego konta AD w konsoli ADUC i przejdź do karty Konto (Konto). Zwróć uwagę na grupę atrybutów użytkownika w sekcji Kontrola konta (Ustawienia konta). Dostępne są następujące opcje konta:
- Użytkownik musi zmienić hasło przy następnym logowaniu (Wymagaj zmiany hasła przy następnym logowaniu);
- Użytkownik nie może zmienić hasła;
- Hasło nigdy nie wygasa (hasło nie jest ograniczone);
- Przechowuj hasło przy użyciu szyfrowania odwracalnego (szyfrowanie niepewne) - niebezpieczne;
- Konto jest wyłączone
- Do interaktywnego logowania wymagana jest karta inteligentna (do interaktywnego logowania do sieci wymagana jest karta inteligentna);
- Konto jest wrażliwe i nie można go przekazać (konto jest ważne i nie można go przekazać);
- Używaj typów szyfrowania Kerberos DES dla tego konta (Używaj tylko typów szyfrowania Kerberos DES dla tego konta);
- To konto obsługuje szyfrowanie Kerberos AES 128/256 bitów (To konto obsługuje szyfrowanie 128/256-bitowe Kerberos AES);
- Nie wymagaj wstępnego uwierzytelnienia Kerberos (bez wcześniejszego uwierzytelnienia Kerberos).
Każdy z tych atrybutów konta jest zasadniczo wartością bitową, która może być w stanie 1 (prawda) lub 0 (fałsz). Jednak te wartości nie są przechowywane jako osobne atrybuty AD, zamiast tego używany jest atrybut UserAccountControl.
Treść
- UserAccountControl - atrybut Active Directory
- Skrypt PowerShell do odszyfrowywania wartości UserAccountControl
UserAccountControl - atrybut Active Directory
Łączna wartość wszystkich tych opcji jest przechowywana w wartości atrybutu konta UserAccountControl, tj. zamiast tego pojedynczy atrybut Active Directory służy do przechowywania wszystkich tych opcji w różnych atrybutach. Atrybut UserAccountControl to maska bitowa, z których każdy bit jest osobną flagą, która wyświetla wartość jednej z określonych opcji i może mieć inną wartość (włączoną lub wyłączoną). W związku z tym, w zależności od włączonych opcji konta, użytkownik otrzyma inną wartość atrybutu UserAccountControl. Można wyświetlić bieżącą wartość atrybutu na karcie Edytor atrybutów lub za pomocą następującego polecenia cmdlet Get-ADUser programu PowerShell:
get-aduser użytkownik1-właściwości * | wybierz nazwę, UserAccountControl | ft
W tym przykładzie wartość atrybutu 0x10202 (w zapisie dziesiętnym 66050) Co oznaczają te liczby??
Poniżej znajduje się tabela dostępnych flag kont w AD. Każda z flag odpowiada konkretnemu bitowi atrybutu UserAccountControl, a wartość UserAccountControl jest równa sumie wszystkich flag.
Flaga | Wartość w HEX | Wartość dziesiętna |
SCRIPT (Uruchom skrypt logowania) | 0x0001 | 1 |
ACCOUNTDISABLE (konto wyłączone) | 0x0002 | 2) |
HOMEDIR_REQUIRED (wymagany folder domowy) | 0x0008 | 8 |
LOCKOUT (konto zablokowane) | 0x0010 | 16 |
PASSWD_NOTREQD (hasło nie jest wymagane) | 0x0020 | 32 |
PASSWD_CANT_CHANGE (Odmów zmiany hasła użytkownika) | 0x0040 | 64 |
ENCRYPTED_TEXT_PWD_ALLOWED (Przechowuj hasło przy użyciu szyfrowania odwracalnego) | 0x0080 | 128 |
TEMP_DUPLICATE_ACCOUNT (konto użytkownika, którego główne konto jest przechowywane w innej domenie) | 0x0100 | 256 |
NORMAL_ACCOUNT (konto domyślne. Normalne aktywne konto) | 0x0200 | 512 |
INTERDOMAIN_TRUST_ACCOUNT | 0x0800 | 2048 |
WORKSTATION_TRUST_ACCOUNT | 0x1000 | 4096 |
SERVER_TRUST_ACCOUNT | 0x2000 | 8192 |
DONT_EXPIRE_PASSWORD (Hasło nie wygasło) | 0x10000 | 65536 |
MNS_LOGON_ACCOUNT | 0x20000 | 131072 |
SMARTCARD_REQUIRED (wymagana karta inteligentna do interaktywnego dostępu do sieci) | 0x40000 | 262144 |
TRUSTED_FOR_DELEGATION | 0x80000 | 524288 |
NOT_DELEGATED | 0x100000 | 1048576 |
USE_DES_KEY_ONLY | 0x200000 | 2097152 |
DONT_REQ_PREAUTH (nie wymaga uwierzytelnienia Kerberos) | 0x400000 | 4 194,304 |
PASSWORD_EXPIRED (hasło użytkownika wygasło) | 0x800000 | 8388608 |
TRUSTED_TO_AUTH_FOR_DELEGATION | 0x1000000 | 16777216 |
PARTIAL_SECRETS_ACCOUNT | 0x04000000 | 67108864 |
Na przykład istnieje zwykłe konto, dla którego wymóg zmiany hasła jest wyłączony. Wartość userAccountControl uzyskuje się w następujący sposób
NORMAL_ACCOUNT (512) + DONT_EXPIRE_PASSWORD (65536) = 66048
W związku z tym wartość userAccountControl z mojego przykładu (66050) okazała się następująca:
NORMAL_ACCOUNT (512) + DONT_EXPIRE_PASSWORD (65536) + ACCOUNTDISABLE (2) = 66050
W przypadku zwykłego zablokowanego konta wartość userAccountControl będzie wynosić 514:
(NORMAL_ACCOUNT (512) + ACCOUNTDISABLE (2) = 514
Domyślne wartości UserAccountControl dla typowych obiektów domeny:
- Użytkownik standardowy: 0x200 (512)
- Kontroler domeny: 0x82000 (532480)
- Stacja robocza / serwer: 0x1000 (4096)
Za pomocą filtrów można wybierać spośród obiektów AD z określoną wartością atrybutu useraccountcontrol. Na przykład, aby wyświetlić wszystkie aktywne (zwykłe konta):
Get-ADUser -Properties * -ldapFilter „(useraccountcontrol = 512)”
Wyświetl wszystkie zablokowane konta:
Get-ADUser -Properties * -ldapFilter „(useraccountcontrol = 514)”
Lista kont z nieograniczonym hasłem:
Get-ADUser -Properties * -ldapFilter „(useraccountcontrol = 66048)”
Możesz dodać niezbędne bity z tabeli i wybrać obiekty AD za pomocą następujących poleceń:
$ UserAccountControl_hex = 0x10000 + 0x0080 + 0x200000
Get-ADUser -Filter UserAccountControl -band $ UserAccountControl_hex
Skrypt PowerShell do odszyfrowywania wartości UserAccountControl
Dla wygody chciałbyś mieć pod ręką narzędzie, które automatycznie przekształciłoby wartość maski bitowej UserAccountControl w normalną ludzką postać. Spróbujmy napisać prostą funkcję dla skryptów PowerShell, która pobiera wartość dziesiętną atrybutu UserAccountControl i wyświetla listę uwzględnionych opcji rozliczania. Ponieważ Atrybut UserAccountControl jest maską bitową, do każdego bitu można przypisać opis tekstowy.
Mam taki skrypt PowerShell do konwersji wartości UserAccountControl do postaci czytelnej:
Funkcja ConvertUserAccountControl ([int] $ UAC)
$ UACPropertyFlags = @ (
PISMO,
„ACCOUNTDISABLE”,
„ZASTRZEŻONE”,
„HOMEDIR_REQUIRED”,
„LOCKOUT”,
„PASSWD_NOTREQD”,
„PASSWD_CANT_CHANGE”,
„ENCRYPTED_TEXT_PWD_ALLOWED”,
„TEMP_DUPLICATE_ACCOUNT”,
„NORMAL_ACCOUNT”,
„ZASTRZEŻONE”,
„INTERDOMAIN_TRUST_ACCOUNT”,
„WORKSTATION_TRUST_ACCOUNT”,
„SERVER_TRUST_ACCOUNT”,
„ZASTRZEŻONE”,
„ZASTRZEŻONE”,
„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”,
„ZASTRZEŻONE”,
PARTIAL_SECRETS_ACCOUNT
„ZASTRZEŻONE”
„ZASTRZEŻONE”
„ZASTRZEŻONE”
„ZASTRZEŻONE”
„ZASTRZEŻONE”
)$ Attributes = ""
1 ... ($ UACPropertyFlags.Length) | Where-Object $ UAC -bA [matematyka] :: Pow (2, $ _) | ForEach-Object If ($ Attributes.Length -EQ 0) $ Attributes = $ UACPropertyFlags [$ _] Else $ Attributes = $ Attributes + "|" + $ UACPropertyFlags [$ _]
Zwróć atrybuty $
Sprawdź, jaka jest wartość UserAccountControl 66050:
ConvertUserAccountControl 66050
Jak widać, skrypt zwrócił, że użytkownik ma włączone atrybuty:
ACCOUNTDISABLE + NORMAL_ACCOUNT + DONT_EXPIRE_PASSWORD
Tego samego skryptu można użyć do natychmiastowego odszyfrowania wartości UserAccountControl podczas pobierania informacji o poświadczeniach AD w wygodnej formie za pomocą polecenia cmdlet Get-AdUser lub Get-AdComputer, na przykład:
get-aduser sam-prnt -properties * | select @ n = 'UsrAcCtrl'; e = ConvertUserAccountControl ($ _. userAccountControl)
RACHUNKOWOŚĆ | NORMAL_ACCOUNT | DONT_EXPIRE_PASSWORD
get-adcomputer sam-dc01 -properties * | select @ n = 'UsrAcCtrl'; e = ConvertUserAccountControl ($ _. userAccountControl)
SERVER_TRUST_ACCOUNT | TRUSTED_FOR_DELEGATION