Computer >> Máy Tính >  >> Hệ thống >> máy chủ Windows

Chuyển đổi các giá trị thuộc tính UserAccountControl trong Active Directory

UserAccountControl là một trong những thuộc tính quan trọng nhất của người dùng và các đối tượng máy tính trong Active Directory. Thuộc tính này xác định trạng thái của tài khoản trong miền AD:tài khoản đang hoạt động hay bị khóa, tùy chọn thay đổi mật khẩu ở lần đăng nhập tiếp theo có được bật hay không, người dùng có thể thay đổi mật khẩu của mình hay không, v.v. Tuy nhiên, không phải tất cả quản trị viên đều được nhận thức đầy đủ về cách hoạt động của thuộc tính UserAccountControl và nó được sử dụng để làm gì trong AD

Thuộc tính / Cờ UserAccountControl trong Active Directory

Mở thuộc tính của bất kỳ tài khoản AD nào trong Máy tính và Người dùng Active Directory (ADUC, dsa.msc ) bảng điều khiển và đi tới Tài khoản chuyển hướng. Vui lòng chú ý đến nhóm thuộc tính người dùng trong Tùy chọn tài khoản tiết diện. Tại đây, bạn có thể thấy các tùy chọn sau:

  • Người dùng phải thay đổi mật khẩu ở lần đăng nhập tiếp theo;
  • Người dùng không thể thay đổi mật khẩu;
  • Mật khẩu không bao giờ hết hạn; Theo mặc định, chính sách mật khẩu miền trong AD yêu cầu người dùng thay đổi mật khẩu của họ theo định kỳ.
  • Lưu trữ mật khẩu bằng mã hóa có thể đảo ngược (không an toàn);
  • Tài khoản bị vô hiệu hóa;
  • Cần có thẻ thông minh để đăng nhập tương tác;
  • Tài khoản nhạy cảm và không thể được ủy quyền;
  • Sử dụng các loại mã hóa Kerberos DES cho tài khoản này;
  • Tài khoản này hỗ trợ mã hóa Kerberos AES 128/256-bit;
  • Không yêu cầu xác thực trước Kerberos.

Chuyển đổi các giá trị thuộc tính UserAccountControl trong Active Directory

Mỗi thuộc tính tài khoản người dùng này về cơ bản là một giá trị bit (cờ) có thể là 1 (True ) hoặc 0 (False ). Tuy nhiên, các giá trị này không được lưu trữ dưới dạng các thuộc tính AD riêng biệt, thay vào đó, thuộc tính UserAccountControl được sử dụng.

Tổng giá trị của tất cả các tùy chọn được chỉ định ở trên được lưu trữ trong giá trị của UserAccountControl thuộc tính. Thay vì lưu trữ tất cả các tùy chọn này trong các thuộc tính người dùng khác nhau, một thuộc tính Active Directory sẽ được sử dụng. UserAccountControl là một bitmask, mỗi bit trong số đó là một cờ riêng biệt và có giá trị Bật (Đúng) hoặc Tắt (Sai). Tùy thuộc vào các tùy chọn tài khoản đã bật, người dùng sẽ có các giá trị thuộc tính UserAccountControl khác nhau. Bạn có thể xem giá trị hiện tại của thuộc tính trong tab Trình chỉnh sửa thuộc tính tương ứng hoặc sử dụng lệnh ghép ngắn Get-ADUser trong PowerShell:

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

Chuyển đổi các giá trị thuộc tính UserAccountControl trong Active Directory

Chuyển đổi các giá trị thuộc tính UserAccountControl trong Active Directory

Trong ví dụ này, giá trị của thuộc tính là 0x10202 (giá trị thập phân là 66050 ). Những con số này có ý nghĩa gì?

Bảng các cờ có sẵn của các tài khoản AD được đưa ra dưới đây. Mỗi cờ tương ứng với một bit UserAccountControl nhất định và giá trị UserAccountControl bằng tổng của tất cả các cờ.

Cờ UserAccountControl Giá trị HEX Giá trị thập phân SCRIPT (Chạy tập lệnh đăng nhập) 0x00011ACCOUNTDISABLE (Tài khoản bị vô hiệu hóa) 0x00022HOMEDIR_REQUIRED (Thư mục chính là bắt buộc) 0x00088LOCKOUT (Tài khoản bị khóa) 0x001016PASSWD_NOTREQD (Không yêu cầu mật khẩu) 0x002032PASSWD_CANT_004064ENCRY mã hóa) 0x0080128TEMP_DUPLICATE_ACCOUNT (một tài khoản của người sử dụng, mà tài khoản chính là trong phạm vi khác) 0x0100256NORMAL_ACCOUNT (một tài khoản mặc định, tài khoản hoạt động điển hình) 0x0200512INTERDOMAIN_TRUST_ACCOUNT0x08002048WORKSTATION_TRUST_ACCOUNT0x10004096SERVER_TRUST_ACCOUNT0x20008192DONT_EXPIRE_PASSWORD (tài khoản người dùng với mật khẩu mà không hết hạn) 0x1000065536MNS_LOGON_ACCOUNT0x20000131072SMARTCARD_REQUIRED (để đăng nhập vào mạng, người dùng cần thẻ thông minh) 0x40000262144TRUSTED_FOR_DELEGATION0x80000524288NOT_DELEGATED0x1000001048576USE_DES_KEY_ONLY0x2000002097152DONT_REQ_PREAUTH (không yêu cầu xác thực trước Kerberos) 0x400000 4194304PASSWORD_EXPIRED (Mật khẩu người dùng đã hết hạn) 0x8000008388608TRUSTED_TO_AUTH_FOR_DELEGATION0x100000016777216PARTIAL_SECRETS_ACCOUNT0x0400000067108864

Ví dụ:có một tài khoản thông thường bị vô hiệu hóa yêu cầu thay đổi mật khẩu. Giá trị userAccountControl được tính như sau:

NORMAL_ACCOUNT (512) + DONT_EXPIRE_PASSWORD (65536) = 66048

Theo đó, giá trị của userAccountControl từ ví dụ của tôi (66050) đã thu được như sau:

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

Tài khoản người dùng bị vô hiệu hóa có 514 dưới dạng giá trị userAccountControl:

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

Giá trị UserAccountControl mặc định cho các đối tượng miền điển hình:

  • Người dùng AD thông thường:0x200 (512);
  • Bộ điều khiển miền:0x82000 (532480);
  • Máy trạm / máy chủ:0x1000 (4096).

Bạn có thể sử dụng bộ lọc LDAP để chọn các đối tượng từ các đối tượng AD với một giá trị kiểm soát tài khoản sử dụng nhất định. Ví dụ:để hiển thị tất cả các tài khoản đang hoạt động (bình thường):

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

Hiển thị danh sách tất cả các tài khoản người dùng bị vô hiệu hóa:

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

Danh sách các tài khoản có tùy chọn mật khẩu không hết hạn:

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

Bạn có thể tính tổng các bit cần thiết từ bảng và chọn các đối tượng AD bằng lệnh:

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

Giải mã giá trị UserAccountControl với PowerShell Script

Để thuận tiện hơn, tôi muốn có một công cụ để tự động chuyển đổi giá trị của bitmask UserAccountControl thành dạng người trong suốt. Hãy thử viết một hàm PowerShell đơn giản lấy giá trị thập phân của thuộc tính UserAccountControl và trả về danh sách các tùy chọn tài khoản đã bật. Vì UserAccountControl là một bitmask, bạn có thể gán một mô tả văn bản cho mỗi bit.

Tôi đã viết hàm PowerShell này DecodeUserAccountControl để chuyển đổi giá trị UserAccountControl thành một dạng có thể đọc được:

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 ” | ”
}

Hãy kiểm tra giá trị 66050 của UserAccountControl có nghĩa là gì:

DecodeUserAccountControl 66050

Như bạn có thể thấy, tập lệnh đã trả lại rằng các cờ sau được bật cho người dùng này:

CÓ THỂ KẾ TOÁN | NORMAL_ACCOUNT | DONT_EXPIRE_PASSWORD

Chuyển đổi các giá trị thuộc tính UserAccountControl trong Active Directory

Cùng một tập lệnh có thể được sử dụng để giải mã nhanh các giá trị UserAccountControl khi nhận thông tin về tài khoản AD ở dạng thuận tiện bằng cách sử dụng lệnh ghép ngắn Get-ADUser hoặc Get-ADComputer, ví dụ:

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

CÓ THỂ KẾ TOÁN | NORMAL_ACCOUNT | DONT_EXPIRE_PASSWORD

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

SERVER_TRUST_ACCOUNT | TRUSTED_FOR_DELEGATION

Chuyển đổi các giá trị thuộc tính UserAccountControl trong Active Directory

Cách đặt Thuộc tính UserAccoutControl trong AD bằng PowerShell?

Bạn có thể thay đổi các tùy chọn riêng lẻ của thuộc tính UserAccountControl trong Active Directory bằng cách sử dụng lệnh ghép ngắn Set-ADUser và Set-ADComputer PowerShell. Cả hai lệnh ghép ngắn này đều có các tùy chọn riêng biệt, ví dụ:

  • AccountNotDelerated
  • AllowReversiblePasswordEncryption
  • CannotChangePassword
  • ChangePasswordAtLogon
  • KerberosEncryptionType
  • PasswordNeverExpires
  • PasswordNotRequired
  • PrincipalsAllowedToDelegateToAccount
Mật khẩu tài khoản máy tính trong AD cung cấp mối quan hệ tin cậy giữa máy tính và miền.

Vì vậy, để thay đổi một số tùy chọn người dùng, bạn cần sử dụng lệnh sau:

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

Hoặc bạn có thể sử dụng Set-UserAccountControl chung lệnh ghép ngắn:

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

Chuyển đổi các giá trị thuộc tính UserAccountControl trong Active Directory

Bạn cũng có thể bật trực tiếp cả hai tùy chọn tài khoản người dùng này bằng cách đặt giá trị chính xác thông qua thuộc tính UserAccountControl:

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