Menguraikan nilai atribut userAccountControl di Active Directory

UserAccountControl adalah salah satu atribut penting dari akun pengguna dan komputer Active Directory. Atribut ini menentukan status akun di domain: apakah akun itu aktif atau terkunci, apakah opsi untuk mengubah kata sandi saat login berikutnya diaktifkan, apakah pengguna dapat mengubah kata sandi, dll.). Namun, tidak semua administrator memiliki gagasan yang jelas tentang bagaimana atribut UserAccountControl digunakan dan mengapa atribut itu digunakan dalam AD..

Misalnya, buka properti akun AD apa saja di konsol ADUC dan buka tab Akun (Akun). Perhatikan grup atribut pengguna di bagian ini Kontrol akun (Pengaturan Akun). Opsi akun berikut tersedia di sini:

  • Pengguna harus mengubah kata sandi saat masuk berikutnya (Membutuhkan perubahan kata sandi saat masuk berikutnya);
  • Pengguna tidak dapat mengubah kata sandi;
  • Kata sandi tidak pernah kedaluwarsa (Kata sandi tidak terbatas);
  • Simpan kata sandi menggunakan enkripsi yang dapat dibalik (enkripsi tidak aman) - tidak aman;
  • Akun dinonaktifkan
  • Kartu pintar diperlukan untuk masuk interaktif (Kartu pintar diperlukan untuk masuk interaktif ke jaringan);
  • Akun sensitif dan tidak dapat didelegasikan (Akun penting dan tidak dapat didelegasikan);
  • Gunakan tipe enkripsi DES Kerberos untuk akun ini (Gunakan hanya tipe enkripsi DES Kerberos untuk akun ini);
  • Akun ini mendukung enkripsi AES 128/256 bit Kerberos (Akun ini mendukung enkripsi AES 128/256-bit Kerberos);
  • Tidak memerlukan praauthentikasi Kerberos (Tanpa otentikasi Kerberos sebelumnya).

Setiap atribut akun ini pada dasarnya adalah nilai bit yang bisa dalam status 1 (Benar) atau 0 (Salah). Namun, nilai-nilai ini tidak disimpan sebagai atribut AD yang terpisah, melainkan, atribut UserAccountControl digunakan.

Konten:

  • UserAccountControl - Atribut Direktori Aktif
  • Skrip PowerShell untuk mendekripsi nilai UserAccountControl

UserAccountControl - Atribut Direktori Aktif

Nilai total dari semua opsi ini disimpan dalam nilai atribut akun UserAccountControl, yaitu sebaliknya, atribut Active Directory tunggal digunakan untuk menyimpan semua opsi ini dalam atribut yang berbeda. Atribut UserAccountControl adalah topeng bit, setiap bit di antaranya adalah flag terpisah yang menampilkan nilai salah satu opsi yang ditentukan dan mungkin memiliki nilai yang berbeda (hidup atau mati). Dengan demikian, tergantung pada opsi akun yang diaktifkan, pengguna akan mendapatkan nilai yang berbeda untuk atribut UserAccountControl. Anda dapat melihat nilai atribut saat ini pada tab Editor Atribut atau menggunakan cmdlet PowerShell Get-ADUser berikut:

get-aduser user1 -properties * | pilih nama, UserAccountControl | ft

Dalam contoh ini, nilai atribut 0x10202 (dalam notasi desimal 66050) Apa arti angka-angka ini??

Di bawah ini adalah tabel dari flag akun yang tersedia di AD. Masing-masing flag sesuai dengan bit tertentu dari atribut UserAccountControl, dan nilai UserAccountControl sama dengan jumlah semua flag.

BenderaNilai dalam HEX Nilai desimal
SCRIPT (Run Script Masuk)0x00011
ACCOUNTDISABLE (Akun Dinonaktifkan)0x00022
HOMEDIR_REQUIRED (Diperlukan folder Home)0x00088
LOCKOUT (Akun Dikunci)0x001016
PASSWD_NOTREQD (Tidak perlu kata sandi)0x002032
PASSWD_CANT_CHANGE (Tolak perubahan kata sandi pengguna)0x004064
ENCRYPTED_TEXT_PWD_ALLOWED (Simpan kata sandi menggunakan enkripsi yang dapat dibalik)0x0080128
TEMP_DUPLICATE_ACCOUNT (akun pengguna yang akun utamanya disimpan di domain lain)0x0100256
NORMAL_ACCOUNT (Akun default. Akun aktif aktif)0x0200512
INTERDOMAIN_TRUST_ACCOUNT0x08002048
WORKSTATION_TRUST_ACCOUNT0x10004096
SERVER_TRUST_ACCOUNT0x20008192
DONT_EXPIRE_PASSWORD (Kata sandi tidak kedaluwarsa)0x1000065536
MNS_LOGON_ACCOUNT0x20000131072
SMARTCARD_REQUIRED (Kartu pintar diperlukan untuk akses jaringan interaktif)0x40000262144
TRUSTED_FOR_DELEGATION0x80000524288
NOT_DELEGATED0x1000001048576
USE_DES_KEY_ONLY0x2000002097152
DONT_REQ_PREAUTH (Tidak Diperlukan Otentikasi Kerberos)0x4000004.194.304
PASSWORD_EXPIRED (Kata sandi pengguna telah kedaluwarsa)0x8000008388608
TRUSTED_TO_AUTH_FOR_DELEGATION0x100000016777216
PARTIAL_SECRETS_ACCOUNT0x0400000067108864

Misalnya, ada akun reguler yang persyaratan perubahan kata sandinya dinonaktifkan. Nilai userAccountControl diperoleh sebagai berikut

NORMAL_ACCOUNT (512) + DONT_EXPIRE_PASSWORD (65536) = 66048

Dengan demikian, nilai userAccountControl dari contoh saya (66050) ternyata sebagai berikut:

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

Untuk akun terkunci normal, nilai userAccountControl akan menjadi 514:

(NORMAL_ACCOUNT (512) + ACCOUNTDISABLE (2) = 514

Nilai UserAccountControl default untuk objek domain khas:

  • Pengguna standar: 0x200 (512)
  • Pengontrol domain: 0x82000 (532480)
  • Workstation / Server: 0x1000 (4096)

Menggunakan filter, Anda dapat memilih dari objek AD dengan nilai atribut tertentu yang dikontrol pengguna. Misalnya, untuk menampilkan semua akun aktif (normal):

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

Daftar semua akun yang diblokir:

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

Daftar akun yang memiliki kata sandi tak terbatas:

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

Anda dapat menambahkan bit yang diperlukan dari tabel dan memilih objek AD menggunakan perintah berikut:

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

Skrip PowerShell untuk mendekripsi nilai UserAccountControl

Untuk kenyamanan, Anda ingin memiliki alat yang dapat secara otomatis mengubah nilai bitmask UserAccountControl menjadi bentuk manusia normal. Mari kita coba menulis fungsi sederhana untuk skrip PowerShell, yang mengambil nilai desimal atribut UserAccountControl dan menampilkan daftar opsi akuntansi yang disertakan. Karena Atribut UserAccountControl adalah bitmask, Anda dapat menetapkan deskripsi teks untuk setiap bit.

Saya mendapatkan skrip PowerShell untuk mengubah nilai UserAccountControl menjadi bentuk yang dapat dibaca:

Fungsi ConvertUserAccountControl ([int] $ UAC)

$ UACPropertyFlags = @ (
SCRIPT,
"AKUNTANDISISI",
"DILINDUNGI",
"HOMEDIR_REQUIRED",
"LOCKOUT",
"PASSWD_NOTREQD",
"PASSWD_CANT_CHANGE",
"ENCRYPTED_TEXT_PWD_ALLOWED",
"TEMP_DUPLICATE_ACCOUNT",
"NORMAL_ACCOUNT",
"DILINDUNGI",
"INTERDOMAIN_TRUST_ACCOUNT",
"WORKSTATION_TRUST_ACCOUNT",
"SERVER_TRUST_ACCOUNT",
"DILINDUNGI",
"DILINDUNGI",
"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",
"DILINDUNGI",
PARTIAL_SECRETS_ACCOUNT
"DILINDUNGI"
"DILINDUNGI"
"DILINDUNGI"
"DILINDUNGI"
"DILINDUNGI"
)

$ Atribut = ""
1 ... ($ UACPropertyFlags.Length) | Where-Object $ UAC -bAnd [math] :: Pow (2, $ _) | ForEach-Object If ($ Attributes.Length -EQ 0) $ Attributes = $ UACPropertyFlags [$ _] Lain-lain $ Attributes = $ Attributes + "|" + $ UACPropertyFlags [$ _]
Kembalikan $ Atribut

Periksa apa nilai UserAccountControl adalah 66050:

ConvertUserAccountControl 66050

Seperti yang Anda lihat, skrip mengembalikan bahwa pengguna memiliki atribut yang diaktifkan:

ACCOUNTDISABLE + NORMAL_ACCOUNT + DONT_EXPIRE_PASSWORD

Skrip yang sama dapat digunakan untuk mendekripsi nilai UserAccountControl on the fly, saat mengunduh informasi tentang kredensial AD mereka dalam bentuk yang mudah menggunakan cmdlet Get-AdUser atau Get-AdComputer, misalnya:

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

AKUNTANSI | NORMAL_ACCOUNT | DONT_EXPIRE_PASSWORD

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

SERVER_TRUST_ACCOUNT | TRUSTED_FOR_DELEGATION