কম্পিউটার টিউটোরিয়াল

এক্টিভ ডিরেক্টরিতে UserAccountControl অ্যাট্রিবিউট মান রূপান্তর করা

UserAccountControl এক্টিভ ডিরেক্টরিতে ব্যবহারকারী এবং কম্পিউটার অবজেক্টের সবচেয়ে গুরুত্বপূর্ণ অ্যাট্রিবিউটের একটি। এই অ্যাট্রিবিউট AD ডোমেইনে অ্যাকাউন্টের অবস্থা নির্ধারণ করে: অ্যাকাউন্ট সক্রিয় কিনা বা লক করা আছে, পরবর্তী লগ-ইনে পাসওয়ার্ড পরিবর্তন বাধ্যতামূলক কিনা, ব্যবহারকারীরা পাসওয়ার্ড পরিবর্তন করতে পারবেন কিনা, ইত্যাদি। তবে সব অ্যাডমিনিস্ট্রেটর UserAccountControl অ্যাট্রিবিউট কীভাবে কাজ করে এবং AD-তে এর ব্যবহার সম্পর্কে সম্পূর্ণভাবে অবগত নন।

এক্টিভ ডিরেক্টরিতে UserAccountControl অ্যাট্রিবিউট/ফ্ল্যাগ

ADUC (dsa.msc) কনসোলে যেকোনো AD অ্যাকাউন্টের প্রপার্টি খুলুন এবং Account ট্যাবে যান। Account Options সেকশনে ব্যবহারকারীর অ্যাট্রিবিউটের গ্রুপে নিচের অপশনগুলো দেখবেন:

  • User must change password at next logon (পরবর্তী লগ-ইনে পাসওয়ার্ড পরিবর্তন বাধ্যতামূলক);
  • User cannot change password (ব্যবহারকারী পাসওয়ার্ড পরিবর্তন করতে পারবেন না);
  • Password never expires (পাসওয়ার্ড কখনো মেয়াদোত্তীর্ণ হবে না); ডিফল্টভাবে AD-তে ডোমেইন পাসওয়ার্ড পলিসি ব্যবহারকারীকে время-सময়ে পাসওয়ার্ড পরিবর্তন করতে বাধ্য করে।
  • Store password using reversible encryption (নিরাপদ নয়);
  • Account is disabled (অ্যাকাউন্ট নিষ্ক্রিয়);
  • Smart card is required for interactive logon (ইন্টারেক্টিভ লগ-ইনের জন্য স্মার্ট কার্ড বাধ্যতামূলক);
  • Account is sensitive and cannot be delegated (অ্যাকাউন্ট সংবেদনশীল এবং ডেলিগেট করা যাবে না);
  • Use Kerberos DES encryption types for this account (এই অ্যাকাউন্টের জন্য কেরবেরোস DES এনক্রিপশন টাইপ ব্যবহার করুন);
  • This account supports Kerberos AES 128/256-bit encryption (এই অ্যাকাউন্ট কেরবেরোস AES 128/256-বিট এনক্রিপশন সমর্থন করে);
  • Do not require Kerberos Pre-authentication (কেরবেরোস প্রি-অথেন্টিকেশন প্রয়োজন নেই)।

এক্টিভ ডিরেক্টরিতে UserAccountControl অ্যাট্রিবিউট মান রূপান্তর করা

উপরোক্ত ব্যবহারকারী অ্যাকাউন্ট অ্যাট্রিবিউটের প্রতিটি মূলত একটি বিট মান (ফ্ল্যাগ) যা ১ (True) বা ০ (False) হতে পারে। তবে এই মানগুলো আলাদা AD অ্যাট্রিবিউট হিসেবে সংরক্ষিত হয় না, বরং UserAccountControl অ্যাট্রিবিউট ব্যবহার করা হয়।

উপরোক্ত সব অপশনের মোট মান UserAccountControl অ্যাট্রিবিউটের ভ্যালুতে সংরক্ষিত থাকে। এই সব অপশন আলাদা আলাদা ব্যবহারকারী অ্যাট্রিবিউটে না রাখে একক এক্টিভ ডিরেক্টরি অ্যাট্রিবিউট ব্যবহার করা হয়। UserAccountControl একটি বিটমাস্ক, যার প্রতিটি বিট একটি পৃথক ফ্ল্যাগ এবং এর মান On (True) বা Off (False)। সক্রিয় অ্যাকাউন্ট অপশনের উপর ভিত্তি করে ব্যবহারকারীর UserAccountControl অ্যাট্রিবিউট মান ভিন্ন হবে। আপনি Attribute Editor ট্যাবে বা পাওয়ারশেলে Get-ADUser কমান্ডলেট ব্যবহার করে বর্তমান মান দেখতে পারেন:

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

এক্টিভ ডিরেক্টরিতে UserAccountControl অ্যাট্রিবিউট মান রূপান্তর করা

এক্টিভ ডিরেক্টরিতে UserAccountControl অ্যাট্রিবিউট মান রূপান্তর করা

এই উদাহরণে অ্যাট্রিবিউটের মান 0x10202 (দশমিক মান 66050)। এই সংখ্যাগুলোর অর্থ কী?

নিচে AD অ্যাকাউন্টের উপলব্ধ ফ্ল্যাগের টেবিল দেওয়া হল। প্রতিটি ফ্ল্যাগ UserAccountControl-এর নির্দিষ্ট বিটের সাথে মিলে যায়, এবং UserAccountControl মান সমস্ত ফ্ল্যাগের যোগফল।

UserAccountControl ফ্ল্যাগHEX মানদশমিক মান
SCRIPT (লগ-অন স্ক্রিপ্ট চালানো)0x00011
ACCOUNTDISABLE (অ্যাকাউন্ট নিষ্ক্রিয়)0x00022
HOMEDIR_REQUIRED (হোম ফোল্ডার প্রয়োজন)0x00088
LOCKOUT (অ্যাকাউন্ট লক করা আছে)0x001016
PASSWD_NOTREQD (পাসওয়ার্ড প্রয়োজন নেই)0x002032
PASSWD_CANT_CHANGE (ব্যবহারকারীকে পাসওয়ার্ড পরিবর্তন থেকে বিরত রাখা)0x004064
ENCRYPTED_TEXT_PWD_ALLOWED (রিভার্সিবল এনক্রিপশনে পাসওয়ার্ড সংরক্ষণ)0x0080128
TEMP_DUPLICATE_ACCOUNT (অন্য ডোমেইনে প্রাইমারি অ্যাকাউন্ট থাকা ব্যবহারকারীর অ্যাকাউন্ট)0x0100256
NORMAL_ACCOUNT (ডিফল্ট অ্যাকাউন্ট, সাধারণ সক্রিয় অ্যাকাউন্ট)0x0200512
INTERDOMAIN_TRUST_ACCOUNT0x08002048
WORKSTATION_TRUST_ACCOUNT0x10004096
SERVER_TRUST_ACCOUNT0x20008192
DONT_EXPIRE_PASSWORD (মেয়াদোত্তীর্ণ ন হওয়া পাসওয়ার্ডওয়ালা ব্যবহারকারী অ্যাকাউন্ট)0x1000065536
MNS_LOGON_ACCOUNT0x20000131072
SMARTCARD_REQUIRED (নেটওয়ার্কে লগ-ইনের জন্য স্মার্ট কার্ড প্রয়োজন)0x40000262144
TRUSTED_FOR_DELEGATION0x80000524288
NOT_DELEGATED0x1000001048576
USE_DES_KEY_ONLY0x2000002097152
DONT_REQ_PREAUTH (কেরবেরোস প্রি-অথেন্টিকেশন প্রয়োজন নেই)0x4000004194304
PASSWORD_EXPIRED (ব্যবহারকারীর পাসওয়ার্ড মেয়াদোত্তীর্ণ)0x8000008388608
TRUSTED_TO_AUTH_FOR_DELEGATION0x100000016777216
PARTIAL_SECRETS_ACCOUNT0x0400000067108864

উদাহরণস্বরূপ, একটি সাধারণ অ্যাকাউন্টের জন্য পাসওয়ার্ড পরিবর্তন বাধ্যতামূলকতা নিষ্ক্রিয় করা আছে। userAccountControl মান নিচের মতো হিসাব করা হয়:

NORMAL_ACCOUNT (512) + DONT_EXPIRE_PASSWORD (65536) = 66048

অনুযায়ী, আমার উদাহরণের userAccountControl মান (66050) নিচেরভাবে প্রাপ্ত:

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

একটি নিষ্ক্রিয় ব্যবহারকারী অ্যাকাউন্টের userAccountControl মান ৫১৪:

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

ডোমেইন অবজেক্টের জন্য টিপিক্যাল ডিফল্ট UserAccountControl মান:

  • সাধারণ AD ব্যবহারকারী: 0x200 (512);
  • ডোমেইন কন্ট্রোলার: 0x82000 (532480);
  • ওয়ার্কস্টেশন/সার্ভার: 0x1000 (4096)।

আপনি নির্দিষ্ট useraccountcontrol মানवाले AD অবজেক্ট সিলেক্ট করতে LDAP ফিল্টার ব্যবহার করতে পারেন। উদাহরণস্বরূপ, সব সক্রিয় (নর্মাল) অ্যাকাউন্ট দেখতে:

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 মান ডিকোড করা

সুবিধার্থে, UserAccountControl বিটমাস্কের মানকে মানুষের বোঝার योग্য ফর্মে রূপান্তর করার একটি টুল চাই। UserAccountControl একটি বিটমাস্ক হওয়ায়, প্রতিটি বিটের জন্য একটি টেক্সট বর্ণনা অ্যাসাইন করা যায়।

আমি 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 ” | ”
}

UserAccountControl মান ৬৬০৫০ কী বোঝাচ্ছে তা চেক করুন:

DecodeUserAccountControl 66050

দেখুন, স্ক্রিপ্টটি রিটার্ন করেছে যে এই ব্যবহারকারীর জন্য নিচের ফ্ল্যাগগুলো সক্রিয়:

ACCOUNTDISABLE | NORMAL_ACCOUNT | DONT_EXPIRE_PASSWORD

এক্টিভ ডিরেক্টরিতে UserAccountControl অ্যাট্রিবিউট মান রূপান্তর করা

এই স্ক্রিপ্টটি Get-ADUser বা Get-ADComputer কমান্ডলেট দিয়ে AD অ্যাকাউন্টের তথ্য সুবিধাজনক ফর্মে পাওয়ার সময় UserAccountControl মান অন-দ-ফ্লাই ডিকোড করতে ব্যবহার করা যাবে, যেমন:

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

ACCOUNTDISABLE | NORMAL_ACCOUNT | DONT_EXPIRE_PASSWORD

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

SERVER_TRUST_ACCOUNT | TRUSTED_FOR_DELEGATION

এক্টিভ ডিরেক্টরিতে UserAccountControl অ্যাট্রিবিউট মান রূপান্তর করা

পাওয়ারশেল দিয়ে AD-তে UserAccountControl অ্যাট্রিবিউট সেট করা

Set-ADUser এবং Set-ADComputer পাওয়ারশেল কমান্ডলেট ব্যবহার করে UserAccountControl অ্যাট্রিবিউটের পৃথক অপশন পরিবর্তন করা যায়। এই দুটি কমান্ডলেটের আলাদা অপশন আছে, যেমন:

  • AccountNotDelegated
  • AllowReversiblePasswordEncryption
  • CannotChangePassword
  • ChangePasswordAtLogon
  • KerberosEncryptionType
  • PasswordNeverExpires
  • PasswordNotRequired
  • PrincipalsAllowedToDelegateToAccount

AD-তে কম্পিউটার অ্যাকাউন্ট পাসওয়ার্ড কম্পিউটার এবং ডোমেইনের মধ্যে ট্রাস্ট রিলেশনশিপ প্রদান করে।

তাই, কিছু ব্যবহারকারী অপশন পরিবর্তন করতে নিচের কমান্ড ব্যবহার করুন:

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

বা জেনেরিক Set-UserAccountControl কমান্ডলেট ব্যবহার করুন:

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

এক্টিভ ডিরেক্টরিতে UserAccountControl অ্যাট্রিবিউট মান রূপান্তর করা

আপনি UserAccountControl অ্যাট্রিবিউটের মাধ্যমে সরাসরি সঠিক মান সেট করে এই দুটি ব্যবহারকারী অ্যাকাউন্ট অপশন সক্রিয় করতে পারেন:

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

  1. Windows 11-এ User Accounts Settings

  2. উইন্ডোজ ১০-এ ইউজার স্যুইচিং: ৬টি প্রমাণিত পদ্ধতি

  3. উইন্ডোজ ১০-এ Active Directory সক্ষম করা: ধাপে ধাপে সম্পূর্ণ গাইড

  4. Active Directory-এ ইউজারের লাস্ট লগইন টাইম নির্ধারণ - ধাপে ধাপে গাইড