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.
Bendera | Nilai dalam HEX | Nilai desimal |
SCRIPT (Run Script Masuk) | 0x0001 | 1 |
ACCOUNTDISABLE (Akun Dinonaktifkan) | 0x0002 | 2 |
HOMEDIR_REQUIRED (Diperlukan folder Home) | 0x0008 | 8 |
LOCKOUT (Akun Dikunci) | 0x0010 | 16 |
PASSWD_NOTREQD (Tidak perlu kata sandi) | 0x0020 | 32 |
PASSWD_CANT_CHANGE (Tolak perubahan kata sandi pengguna) | 0x0040 | 64 |
ENCRYPTED_TEXT_PWD_ALLOWED (Simpan kata sandi menggunakan enkripsi yang dapat dibalik) | 0x0080 | 128 |
TEMP_DUPLICATE_ACCOUNT (akun pengguna yang akun utamanya disimpan di domain lain) | 0x0100 | 256 |
NORMAL_ACCOUNT (Akun default. Akun aktif aktif) | 0x0200 | 512 |
INTERDOMAIN_TRUST_ACCOUNT | 0x0800 | 2048 |
WORKSTATION_TRUST_ACCOUNT | 0x1000 | 4096 |
SERVER_TRUST_ACCOUNT | 0x2000 | 8192 |
DONT_EXPIRE_PASSWORD (Kata sandi tidak kedaluwarsa) | 0x10000 | 65536 |
MNS_LOGON_ACCOUNT | 0x20000 | 131072 |
SMARTCARD_REQUIRED (Kartu pintar diperlukan untuk akses jaringan interaktif) | 0x40000 | 262144 |
TRUSTED_FOR_DELEGATION | 0x80000 | 524288 |
NOT_DELEGATED | 0x100000 | 1048576 |
USE_DES_KEY_ONLY | 0x200000 | 2097152 |
DONT_REQ_PREAUTH (Tidak Diperlukan Otentikasi Kerberos) | 0x400000 | 4.194.304 |
PASSWORD_EXPIRED (Kata sandi pengguna telah kedaluwarsa) | 0x800000 | 8388608 |
TRUSTED_TO_AUTH_FOR_DELEGATION | 0x1000000 | 16777216 |
PARTIAL_SECRETS_ACCOUNT | 0x04000000 | 67108864 |
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