UserAccountControl एक्टिव डायरेक्टरी में उपयोगकर्ता और कंप्यूटर ऑब्जेक्ट्स की सबसे महत्वपूर्ण विशेषताओं में से एक है। यह विशेषता AD डोमेन में खाते की स्थिति निर्धारित करती है: खाता सक्रिय है या लॉक, अगले लॉगऑन पर पासवर्ड बदलने का विकल्प सक्षम है या नहीं, उपयोगकर्ता अपना पासवर्ड बदल सकते हैं या नहीं, आदि। हालांकि, सभी एडमिनिस्ट्रेटर्स पूरी तरह से नहीं जानते कि UserAccountControl विशेषता कैसे काम करती है और AD में इसका उपयोग किस लिए किया जाता है।
एक्टिव डायरेक्टरी में UserAccountControl विशेषता/फ्लैग
एक्टिव डायरेक्टरी यूजर्स एंड कंप्यूटर्स (ADUC, dsa.msc) कंसोल में किसी भी AD खाते के गुण खोलें और खाता टैब पर जाएं। खाता विकल्प अनुभाग में उपयोगकर्ता विशेषताओं के समूह पर ध्यान दें। यहां आप निम्न विकल्प देख सकते हैं:
- उपयोगकर्ता को अगले लॉगऑन पर पासवर्ड बदलना होगा;
- उपयोगकर्ता पासवर्ड नहीं बदल सकता;
- पासवर्ड कभी समाप्त नहीं होता; डिफ़ॉल्ट रूप से, AD में डोमेन पासवर्ड नीति के लिए उपयोगकर्ता को समय-समय पर अपना पासवर्ड बदलना आवश्यक होता है।
- पासवर्ड को प्रतिवर्ती एन्क्रिप्शन का उपयोग करके संग्रहीत करें (सुरक्षित नहीं);
- खाता अक्षम है;
- इंटरैक्टिव लॉगऑन के लिए स्मार्ट कार्ड आवश्यक है;
- खाता संवेदनशील है और इसे प्रत्यायोजित नहीं किया जा सकता;
- इस खाते के लिए Kerberos DES एन्क्रिप्शन प्रकारों का उपयोग करें;
- यह खाता Kerberos AES 128/256-बिट एन्क्रिप्शन का समर्थन करता है;
- Kerberos पूर्व-प्रमाणीकरण की आवश्यकता नहीं है।
इनमें से प्रत्येक उपयोगकर्ता खाता विशेषता अनिवार्य रूप से एक बिट मान (फ्लैग) है जो या तो 1 (True) या 0 (False) हो सकता है। हालांकि, ये मान अलग-अलग AD विशेषताओं के रूप में संग्रहीत नहीं होते हैं, इसके बजाय UserAccountControl विशेषता का उपयोग किया जाता है।
उपरोक्त निर्दिष्ट सभी विकल्पों का कुल मान UserAccountControl विशेषता के मान में संग्रहीत होता है। इन सभी विकल्पों को अलग-अलग उपयोगकर्ता विशेषताओं में संग्रहीत करने के बजाय, एक ही एक्टिव डायरेक्टरी विशेषता का उपयोग किया जाता है। UserAccountControl एक बिटमास्क है, जिसका प्रत्येक बिट एक अलग फ्लैग है और इसका मान चालू (True) या बंद (False) होता है। सक्षम खाता विकल्पों के आधार पर, एक उपयोगकर्ता के पास अलग-अलग UserAccountControl विशेषता मान होंगे। आप संबंधित विशेषता संपादक टैब में या पावरशेल में Get-ADUser cmdlet का उपयोग करके विशेषता का वर्तमान मान देख सकते हैं:
get-aduser jkelly -properties *|select name,UserAccountControl | ft
इस उदाहरण में, विशेषता का मान 0x10202 (दशमलव मान 66050) है। इन संख्याओं का क्या अर्थ है?
नीचे AD खातों के उपलब्ध फ्लैग्स की तालिका दी गई है। प्रत्येक फ्लैग एक निश्चित UserAccountControl बिट से मेल खाता है, और UserAccountControl मान सभी फ्लैग्स के योग के बराबर होता है।
| UserAccountControl फ्लैग | HEX मान | दशमलव मान |
|---|---|---|
| SCRIPT (लॉगऑन स्क्रिप्ट चलाना) | 0x0001 | 1 |
| ACCOUNTDISABLE (खाता अक्षम है) | 0x0002 | 2 |
| HOMEDIR_REQUIRED (होम फोल्डर आवश्यक है) | 0x0008 | 8 |
| LOCKOUT (खाता लॉक है) | 0x0010 | 16 |
| PASSWD_NOTREQD (पासवर्ड आवश्यक नहीं) | 0x0020 | 32 |
| PASSWD_CANT_CHANGE (उपयोगकर्ता को पासवर्ड बदलने से रोकें) | 0x0040 | 64 |
| ENCRYPTED_TEXT_PWD_ALLOWED (पासवर्ड को प्रतिवर्ती एन्क्रिप्शन का उपयोग करके संग्रहीत करें) | 0x0080 | 128 |
| TEMP_DUPLICATE_ACCOUNT (एक उपयोगकर्ता का खाता जिसका प्राथमिक खाता दूसरे डोमेन में है) | 0x0100 | 256 |
| NORMAL_ACCOUNT (एक डिफ़ॉल्ट खाता, एक विशिष्ट सक्रिय खाता) | 0x0200 | 512 |
| INTERDOMAIN_TRUST_ACCOUNT | 0x0800 | 2048 |
| WORKSTATION_TRUST_ACCOUNT | 0x1000 | 4096 |
| SERVER_TRUST_ACCOUNT | 0x2000 | 8192 |
| DONT_EXPIRE_PASSWORD (उन उपयोगकर्ता खातों के पासवर्ड जो समाप्त नहीं होते) | 0x10000 | 65536 |
| MNS_LOGON_ACCOUNT | 0x20000 | 131072 |
| SMARTCARD_REQUIRED (नेटवर्क पर लॉग ऑन करने के लिए, उपयोगकर्ता को स्मार्ट कार्ड की आवश्यकता होती है) | 0x40000 | 262144 |
| TRUSTED_FOR_DELEGATION | 0x80000 | 524288 |
| NOT_DELEGATED | 0x100000 | 1048576 |
| USE_DES_KEY_ONLY | 0x200000 | 2097152 |
| DONT_REQ_PREAUTH (Kerberos पूर्व-प्रमाणीकरण आवश्यक नहीं है) | 0x400000 | 4194304 |
| PASSWORD_EXPIRED (उपयोगकर्ता का पासवर्ड समाप्त हो गया है) | 0x800000 | 8388608 |
| TRUSTED_TO_AUTH_FOR_DELEGATION | 0x1000000 | 16777216 |
| PARTIAL_SECRETS_ACCOUNT | 0x04000000 | 67108864 |
उदाहरण के लिए, एक नियमित खाता है जिसके लिए पासवर्ड बदलने की आवश्यकता अक्षम है। userAccountControl मान की गणना इस प्रकार की जाती है:
NORMAL_ACCOUNT (512) + DONT_EXPIRE_PASSWORD (65536) = 66048
तदनुसार, मेरे उदाहरण से userAccountControl का मान (66050) निम्न प्रकार से प्राप्त हुआ:
NORMAL_ACCOUNT (512) + DONT_EXPIRE_PASSWORD (65536) + ACCOUNTDISABLE (2) = 66050
एक अक्षम उपयोगकर्ता खाते का userAccountControl मान 514 होता है:
(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 विशेषता के दशमलव मान को लेता है और सक्षम खाता विकल्पों की सूची लौटाता है। चूंकि UserAccountControl एक बिटमास्क है, आप प्रत्येक बिट को एक टेक्स्ट विवरण असाइन कर सकते हैं।
मैंने UserAccountControl मान को पठनीय रूप में परिवर्तित करने के लिए DecodeUserAccountControl पावरशेल फ़ंक्शन लिखा:
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 का मान 66050 क्या दर्शाता है:
DecodeUserAccountControl 66050
जैसा कि आप देख सकते हैं, स्क्रिप्ट ने लौटाया कि इस उपयोगकर्ता के लिए निम्न फ्लैग्स सक्षम हैं:
ACCOUNTDISABLE | NORMAL_ACCOUNT | DONT_EXPIRE_PASSWORD
इसी स्क्रिप्ट का उपयोग Get-ADUser या Get-ADComputer cmdlets का उपयोग करके 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
पावरशेल के साथ AD में UserAccountControl विशेषता कैसे सेट करें?
आप Set-ADUser और Set-ADComputer पावरशेल cmdlets का उपयोग करके एक्टिव डायरेक्टरी में UserAccountControl विशेषता के व्यक्तिगत विकल्पों को बदल सकते हैं। इन दोनों cmdlets के अलग-अलग विकल्प हैं, उदाहरण के लिए:
- AccountNotDelegated
- AllowReversiblePasswordEncryption
- CannotChangePassword
- ChangePasswordAtLogon
- KerberosEncryptionType
- PasswordNeverExpires
- PasswordNotRequired
- PrincipalsAllowedToDelegateToAccount
AD में कंप्यूटर खाता पासवर्ड कंप्यूटर और डोमेन के बीच विश्वास संबंध प्रदान करता है।
इसलिए, कुछ उपयोगकर्ता विकल्पों को बदलने के लिए, आपको निम्न कमांड का उपयोग करने की आवश्यकता है:
Set-ADUser jkelly –CannotChangePassword:$true -PasswordNeverExpires:$true
या आप सामान्य Set-UserAccountControl cmdlet का उपयोग कर सकते हैं:
Set-ADAccountControl -Identity jkelly -CannotChangePassword $True -PasswordNeverExpires $True
आप इन दोनों उपयोगकर्ता खाता विकल्पों को सीधे UserAccountControl विशेषता के माध्यम से सटीक मान सेट करके भी सक्षम कर सकते हैं:
Set-ADUser jkelly -Replace @{UserAccountControl= 66048}