Computer >> คอมพิวเตอร์ >  >> ระบบ >> Windows Server

การแปลงค่าแอตทริบิวต์ UserAccountControl ใน Active Directory

UserAccountControl เป็นหนึ่งในคุณลักษณะที่สำคัญที่สุดของผู้ใช้และวัตถุคอมพิวเตอร์ใน Active Directory คุณลักษณะนี้กำหนดสถานะของบัญชีในโดเมน AD:บัญชีมีการใช้งานหรือถูกล็อก ไม่ว่าจะเปิดใช้งานตัวเลือกในการเปลี่ยนรหัสผ่านเมื่อเข้าสู่ระบบครั้งถัดไป ผู้ใช้สามารถเปลี่ยนรหัสผ่านได้หรือไม่ ฯลฯ อย่างไรก็ตาม ไม่ใช่ผู้ดูแลระบบทั้งหมด ตระหนักดีถึงวิธีการทำงานของแอตทริบิวต์ UserAccountControl และสิ่งที่ใช้สำหรับโฆษณา

แอตทริบิวต์/การตั้งค่าสถานะ UserAccountControl ใน Active Directory

เปิดคุณสมบัติของบัญชี AD ใน Active Directory Users and Computers (ADUC, dsa.msc ) คอนโซลและไปที่ บัญชี แท็บ โปรดให้ความสนใจกับกลุ่มแอตทริบิวต์ผู้ใช้ใน ตัวเลือกบัญชี ส่วน. คุณจะเห็นตัวเลือกต่อไปนี้:

  • ผู้ใช้ต้องเปลี่ยนรหัสผ่านเมื่อเข้าสู่ระบบครั้งถัดไป
  • ผู้ใช้ไม่สามารถเปลี่ยนรหัสผ่านได้
  • รหัสผ่านไม่มีวันหมดอายุ โดยค่าเริ่มต้น นโยบายรหัสผ่านโดเมนใน AD กำหนดให้ผู้ใช้เปลี่ยนรหัสผ่านเป็นระยะ
  • จัดเก็บรหัสผ่านโดยใช้การเข้ารหัสแบบย้อนกลับได้ (ไม่ปลอดภัย);
  • บัญชีถูกปิดใช้งาน
  • ต้องใช้สมาร์ทการ์ดสำหรับการเข้าสู่ระบบแบบโต้ตอบ
  • บัญชีมีความละเอียดอ่อนและไม่สามารถมอบหมายได้
  • ใช้ประเภทการเข้ารหัส Kerberos DES สำหรับบัญชีนี้
  • บัญชีนี้รองรับการเข้ารหัส Kerberos AES 128/256 บิต
  • ไม่ต้องมีการตรวจสอบสิทธิ์ล่วงหน้าของ Kerberos

การแปลงค่าแอตทริบิวต์ UserAccountControl ใน Active Directory

แต่ละแอตทริบิวต์ของบัญชีผู้ใช้เหล่านี้โดยพื้นฐานแล้วเป็นค่าบิต (แฟล็ก) ที่สามารถเป็น 1 (True ) หรือ 0 (False ). อย่างไรก็ตาม ค่าเหล่านี้จะไม่ถูกจัดเก็บเป็นแอตทริบิวต์ AD แยกต่างหาก แต่จะใช้แอตทริบิวต์ UserAccountControl แทน

มูลค่ารวมของตัวเลือกทั้งหมดที่ระบุข้างต้นถูกเก็บไว้ในค่าของ UserAccountControl คุณลักษณะ. แทนที่จะเก็บตัวเลือกเหล่านี้ไว้ในแอตทริบิวต์ผู้ใช้ที่แตกต่างกัน จะมีการใช้แอตทริบิวต์ Active Directory รายการเดียว UserAccountControl เป็น บิตมาสก์ แต่ละบิตเป็นแฟล็กแยกต่างหากและมีค่า เปิด (จริง) หรือ ปิด (เท็จ). ผู้ใช้จะมีค่าแอตทริบิวต์ UserAccountControl ที่แตกต่างกัน ทั้งนี้ขึ้นอยู่กับตัวเลือกบัญชีที่เปิดใช้งาน คุณสามารถดูค่าปัจจุบันของแอตทริบิวต์ได้ในแท็บ Attribute Editor ที่เกี่ยวข้องหรือใช้ Get-ADUser cmdlet ใน PowerShell:

get-aduser jkelly -properties *|select name,UserAccountControl | ft

การแปลงค่าแอตทริบิวต์ UserAccountControl ใน Active Directory

การแปลงค่าแอตทริบิวต์ UserAccountControl ใน Active Directory

ในตัวอย่างนี้ ค่าของแอตทริบิวต์คือ 0x10202 (ค่าทศนิยมคือ 66050 ). ตัวเลขเหล่านี้หมายความว่าอย่างไร

ตารางแฟล็กที่มีอยู่ของบัญชี AD แสดงไว้ด้านล่าง แต่ละแฟล็กสอดคล้องกับบิต UserAccountControl และค่า UserAccountControl จะเท่ากับผลรวมของแฟล็กทั้งหมด

การตั้งค่าสถานะ UserAccountControl ค่า HEX ค่าทศนิยม SCRIPT (เรียกใช้สคริปต์การเข้าสู่ระบบ)0x00011ACCOUNTDISABLE (บัญชีถูกปิดใช้งาน)0x00022HOMEDIR_REQUIRED (ต้องมีโฟลเดอร์หลัก)0x00088LOCKOUT (บัญชีถูกล็อก)0x001016PASSWD_NOTREQD (ไม่ต้องใช้รหัสผ่าน)0x002032PASSWD_CANT_CHANGE0x001016PASSWD_NOTREQD (ไม่ต้องใช้รหัสผ่าน)0x002032PASSWD_CANT_CHANGE0ป้องกันผู้ใช้จากการเปลี่ยนรหัสผ่านTTED64_Pย้อนกลับได้ การเข้ารหัส) 0x0080128TEMP_DUPLICATE_ACCOUNT (บัญชีของผู้ใช้ที่มีบัญชีหลักอยู่ในโดเมนอื่น) 0x0100256NORMAL_ACCOUNT (บัญชีเริ่มต้นเป็นบัญชีที่ใช้งานทั่วไป) 0x0200512INTERDOMAIN_TRUST_ACCOUNT0x08002048WORKSTATION_TRUST_ACCOUNT0x10004096SERVER_TRUST_ACCOUNT0x20008192DONT_EXPIRE_PASSWORD (บัญชีผู้ใช้ที่มีรหัสผ่านที่ไม่หมดอายุ) 0x1000065536MNS_LOGON_ACCOUNT0x20000131072SMARTCARD_REQUIRED (ในการเข้าสู่ระบบเครือข่าย ผู้ใช้ต้องการสมาร์ทการ์ด)0x40000262144TRUSTED_FOR_DELEGATION0x80000524288NOT_DELEGATED0x1000001048576USE_DES_KEY_ONLY0x200002097152DONT_REQ_PREAUTH (ไม่จำเป็นต้องมีการตรวจสอบสิทธิ์ล่วงหน้าของ Kerberos)0x400000 4194304PASSWORD_EXPIRED (รหัสผ่านผู้ใช้หมดอายุ)0x80000008388608TRUSTED_TO_AUTH_FOR_DELEGATION0x100000016777216PARTIAL_SECRETS_ACCOUNT0x0400000067108864

ตัวอย่างเช่น มีบัญชีปกติที่ข้อกำหนดในการเปลี่ยนรหัสผ่านถูกปิดใช้งาน ค่า userAccountControl คำนวณดังนี้:

NORMAL_ACCOUNT (512) + DONT_EXPIRE_PASSWORD (65536) = 66048

ดังนั้น ค่าของ userAccountControl จากตัวอย่างของฉัน (66050) ได้มาดังนี้:

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

บัญชีผู้ใช้ที่ถูกปิดใช้งานมี 514 เป็นค่า userAccountControl:

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

ค่าเริ่มต้น UserAccountControl ค่าสำหรับวัตถุโดเมนทั่วไป:

  • ผู้ใช้ AD ปกติ:0x200 (512);
  • ตัวควบคุมโดเมน:0x82000 (532480);
  • เวิร์กสเตชัน/เซิร์ฟเวอร์:0x1000 (4096)

คุณสามารถใช้ตัวกรอง LDAP เพื่อเลือกออบเจ็กต์จากออบเจ็กต์ 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}

ถอดรหัสค่า UserAccountControl ด้วยสคริปต์ PowerShell

เพื่อให้สะดวกยิ่งขึ้น ฉันต้องการมีเครื่องมือในการแปลงค่าบิตมาสก์ UserAccountControl ให้อยู่ในรูปแบบที่โปร่งใสของมนุษย์โดยอัตโนมัติ มาลองเขียนฟังก์ชัน PowerShell อย่างง่ายที่ใช้ค่าทศนิยมของแอตทริบิวต์ UserAccountControl และส่งคืนรายการตัวเลือกบัญชีที่เปิดใช้งาน เนื่องจาก UserAccountControl เป็นบิตมาสก์ คุณจึงสามารถกำหนดคำอธิบายข้อความให้กับแต่ละบิตได้

ฉันเขียนฟังก์ชัน PowerShell นี้ DecodeUserAccountControl เพื่อแปลงค่า UserAccountControl ให้อยู่ในรูปแบบที่อ่านได้:

Function DecodeUserAccountControl ([int]$UAC)
{
$UACPropertyFlags = @(
"SCRIPT",
"ACCOUNTDISABLE",
"RESERVED",
"HOMEDIR_REQUIRED",
"LOCKOUT",
"PASSWD_NOTREQD",
"PASSWD_CANT_CHANGE",
"ENCRYPTED_TEXT_PWD_ALLOWED",
"TEMP_DUPLICATE_ACCOUNT",
"NORMAL_ACCOUNT",
"RESERVED",
"INTERDOMAIN_TRUST_ACCOUNT",
"WORKSTATION_TRUST_ACCOUNT",
"SERVER_TRUST_ACCOUNT",
"RESERVED",
"RESERVED",
"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",
"RESERVED",
"PARTIAL_SECRETS_ACCOUNT"
"RESERVED"
"RESERVED"
"RESERVED"
"RESERVED"
"RESERVED"
)
return (0..($UACPropertyFlags.Length) | ?{$UAC -bAnd [math]::Pow(2,$_)} | %{$UACPropertyFlags[$_]}) -join ” | ”
}

มาดูกันว่าค่า 66050 ของ UserAccountControl หมายถึงอะไร:

DecodeUserAccountControl 66050

อย่างที่คุณเห็น สคริปต์ได้ส่งคืนว่าแฟล็กต่อไปนี้ถูกเปิดใช้งานสำหรับผู้ใช้รายนี้:

ปิดบัญชี | NORMAL_ACCOUNT | DONT_EXPIRE_PASSWORD

การแปลงค่าแอตทริบิวต์ UserAccountControl ใน Active Directory

สามารถใช้สคริปต์เดียวกันเพื่อถอดรหัสค่า UserAccountControl ได้ทันทีเมื่อรับข้อมูลเกี่ยวกับบัญชี AD ในรูปแบบที่สะดวกโดยใช้ cmdlet ของ Get-ADUser หรือ Get-ADComputer ตัวอย่างเช่น:

get-aduser ms-pam -properties *|select @{n='UsrAcCtrl';e={DecodeUserAccountControl($_.userAccountControl)}}

ปิดบัญชี | NORMAL_ACCOUNT | DONT_EXPIRE_PASSWORD

get-adcomputer rome-dc01 -properties *|select @{n='UsrAcCtrl';e={DecodeUserAccountControl($_.userAccountControl)}}

SERVER_TRUST_ACCOUNT | TRUSTED_FOR_DELEGATION

การแปลงค่าแอตทริบิวต์ UserAccountControl ใน Active Directory

จะตั้งค่าแอตทริบิวต์ UserAccoutControl ใน AD ด้วย PowerShell ได้อย่างไร

คุณสามารถเปลี่ยนแต่ละตัวเลือกของแอตทริบิวต์ UserAccountControl ใน Active Directory โดยใช้ Set-ADUser และ Set-ADComputer PowerShell cmdlet cmdlet ทั้งสองนี้มีตัวเลือกแยกกัน เช่น:

  • AccountNotDelegated
  • AllowReversiblePasswordEncryption
  • ไม่สามารถเปลี่ยนรหัสผ่านได้
  • เปลี่ยนรหัสผ่าน AtLogon
  • KerberosEncryptionType
  • รหัสผ่านไม่มีวันหมดอายุ
  • ไม่ต้องใช้รหัสผ่าน
  • PrincipalsAllowedToDelegateToAccount
รหัสผ่านบัญชีคอมพิวเตอร์ใน AD ให้ความสัมพันธ์ที่เชื่อถือได้ระหว่างคอมพิวเตอร์และโดเมน

ดังนั้น ในการเปลี่ยนตัวเลือกผู้ใช้บางอย่าง คุณต้องใช้คำสั่งต่อไปนี้:

Set-ADUser jkelly –CannotChangePassword:$true -PasswordNeverExpires:$true

หรือคุณสามารถใช้ Set-UserAccountControl . ทั่วไป cmdlet:

Set-ADAccountControl -Identity jkelly -CannotChangePassword $True -PasswordNeverExpires $True

การแปลงค่าแอตทริบิวต์ UserAccountControl ใน Active Directory

คุณยังสามารถเปิดใช้งานตัวเลือกบัญชีผู้ใช้ทั้งสองนี้ได้โดยตรงโดยการตั้งค่าที่แน่นอนผ่านแอตทริบิวต์ UserAccountControl:

Set-ADUser jkelly -Replace @{UserAccountControl= 66048}