SID (Security IDentifier) एक अद्वितीय पहचानकर्ता है जो Windows या Active Directory डोमेन में बनाए जाने पर उपयोगकर्ताओं, ग्रुप्स, कंप्यूटर्स, या अन्य सुरक्षा ऑब्जेक्ट्स को असाइन किया जाता है। Windows संसाधनों तक पहुंच को नियंत्रित करने के लिए उपयोगकर्ता नाम नहीं, बल्कि SID का उपयोग करता है: नेटवर्क शेयर्ड फ़ोल्डर्स, रजिस्ट्री कुंजियाँ, फाइल सिस्टम ऑब्जेक्ट्स (NTFS अनुमतियाँ), प्रिंटर्स, आदि। इस लेख में, हम आपको उपयोगकर्ता, ग्रुप, या कंप्यूटर का SID खोजने के कुछ सरल तरीके दिखाएंगे, और रिवर्स प्रक्रिया – ज्ञात SID द्वारा ऑब्जेक्ट नाम कैसे प्राप्त करें।
SID (Windows Security Identifier) क्या है?
जैसा कि हमने कहा, SID (सिक्योरिटी आइडेंटिफायर) आपको एक निश्चित दायरे (डोमेन या लोकल कंप्यूटर) के भीतर उपयोगकर्ता, ग्रुप या कंप्यूटर की विशिष्ट पहचान करने की अनुमति देता है। SID निम्न फॉर्म का एक स्ट्रिंग है:
S-1-5-21–489056535-1467421822-2524099697–1231
- 489056535-1467421822-2524099697– यह डोमेन का अद्वितीय पहचानकर्ता है जिसने SID जारी किया (यह भाग उसी डोमेन में सभी ऑब्जेक्ट्स के लिए समान होगा):
- 1231 – ऑब्जेक्ट का रिलेटिव सिक्योरिटी आइडेंटिफायर (RID)। यह 1000 से शुरू होता है और प्रत्येक नए ऑब्जेक्ट के लिए 1 से बढ़ता है। FSMO भूमिका RID Master वाले डोमेन कंट्रोलर द्वारा जारी किया जाता है।
Active Directory ऑब्जेक्ट्स के SIDs ntds.dit डेटाबेस में स्टोर होते हैं, और लोकल उपयोगकर्ताओं और ग्रुप्स के SIDs लोकल Windows Security Account Manager (SAM) डेटाबेस में HKEY_LOCAL_MACHINE\SAM\SAM रजिस्ट्री कुंजी में स्टोर होते हैं।
Windows में तथाकथित Well-known SIDs हैं। ये किसी भी Windows कंप्यूटर पर बिल्ट-इन उपयोगकर्ताओं और ग्रुप्स के SIDs हैं। उदाहरण के लिए:
S-1-5-32-544– बिल्ट-इन Administrators ग्रुपS-1-5-32-545– लोकल उपयोगकर्ताS-1-5-32-555 – RDP के माध्यम से लॉग इन करने की अनुमति वाले Remote Desktop Users ग्रुपS-1-5-domainID-500– बिल्ट-इन Windows एडमिनिस्ट्रेटर अकाउंट- आदि।
Windows पर, आप SID -> Name और Username -> SID बदलने के लिए विभिन्न टूल्स का उपयोग कर सकते हैं: whoami टूल, wmic, WMI क्लासेज, PowerShell, या थर्ड-पार्टी यूटिलिटीज।
लोकल उपयोगकर्ता सुरक्षा पहचानकर्ता (SID) कैसे खोजें?
लोकल उपयोगकर्ता खाते का SID प्राप्त करने के लिए, आप wmic टूल का उपयोग कर सकते हैं, जो कंप्यूटर के WMI नेमस्पेस को क्वेरी करने की अनुमति देता है। लोकल उपयोगकर्ता test_user का SID प्राप्त करने के लिए, आप WMIC कमांड का उपयोग कर सकते हैं:
wmic useraccount where name='test_user' get sid
यदि WMI रिपॉजिटरी क्षतिग्रस्त है तो यह कमांड त्रुटि लौटा सकती है। WMI रिपॉजिटरी को रिपेयर करने के लिए इस गाइड का उपयोग करें।
ऊपर दी गई कमांड ने निर्दिष्ट लोकल उपयोगकर्ता का SID लौटाया। इस उदाहरण में – S-1-5-21-1175659216-1321616944-201305354-1005।
सभी लोकल Windows उपयोगकर्ताओं के SIDs सूचीबद्ध करने के लिए, चलाएं:
wmic useraccount get name,sid
यदि आपको वर्तमान उपयोगकर्ता का SID प्राप्त करने की आवश्यकता है, तो निम्न कमांड चलाएं:
wmic useraccount where name='%username%' get sid
आप PowerShell से सीधे WMI क्वेरी कर सकते हैं:
(Get-WmiObject -Class win32_userAccount -Filter "name='test_user' and domain='$env:computername'").SID
PowerShell Core 7.x के नए संस्करणों में, आपको Get-WmiObject cmdlet के बजाय Get-CimInstance का उपयोग करना होगा।
लेकिन लोकल उपयोगकर्ताओं और ग्रुप्स को प्रबंधित करने के लिए बिल्ट-इन PowerShell मॉड्यूल (Microsoft.PowerShell.LocalAccounts) का उपयोग करके लोकल उपयोगकर्ता का SID प्राप्त करना और भी आसान है।
Get-LocalUser -Name 'test_user' | Select-Object Name, SID
इसी तरह, आप लोकल कंप्यूटर के ग्रुप का SID प्राप्त कर सकते हैं:
Get-LocalGroup -Name tstGroup1 | Select-Object Name, SID
आप PowerShell के माध्यम से उपयोगकर्ता का SID प्राप्त करने के लिए .NET क्लासेज System.Security.Principal.SecurityIdentifier और System.Security.Principal.NTAccount का भी उपयोग कर सकते हैं:
$objUser = New-Object System.Security.Principal.NTAccount("LOCAL_USER_NAME")
$strSID = $objUser.Translate([System.Security.Principal.SecurityIdentifier])
$strSID.Value
Active Directory में उपयोगकर्ता/ग्रुप SID कैसे प्राप्त करें?
वर्तमान डोमेन अकाउंट का SID प्राप्त करने के लिए निम्न कमांड का उपयोग किया जा सकता है:
whoami /user
आप WMIC टूल का उपयोग करके Active Directory डोमेन उपयोगकर्ता का SID खोज सकते हैं। निम्न कमांड में अपना डोमेन नाम निर्दिष्ट करना होगा:
wmic useraccount where (name='jjsmith' and domain=′corp.woshub.com′) get sid
AD डोमेन उपयोगकर्ता का SID खोजने के लिए, आप Get-ADUser cmdlet का उपयोग कर सकते हैं जो Windows PowerShell के लिए Active Directory Module का हिस्सा है। आइए jabrams डोमेन उपयोगकर्ता खाते के लिए SID प्राप्त करें:
Get-ADUser -Identity 'jabrams' | select SID
आप Get-ADGroup cmdlet का उपयोग करके AD ग्रुप का SID प्राप्त कर सकते हैं:
Get-ADGroup -Filter {Name -like "fr-sales-*"} | Select SID
यदि आपके कंप्यूटर पर PowerShell AD मॉड्यूल इंस्टॉल नहीं है, तो आप पहले बताए गए .Net क्लासेज का उपयोग करके AD डोमेन से उपयोगकर्ता का SID प्राप्त कर सकते हैं:
$objUser = New-Object System.Security.Principal.NTAccount("corp.woshub.com","jabrams")
$strSID = $objUser.Translate([System.Security.Principal.SecurityIdentifier])
$strSID.Value
वही PowerShell वन-लाइनर कमांड:
(new-object security.principal.ntaccount “jabrams").translate([security.principal.securityidentifier])
कंप्यूटर के डोमेन और लोकल मशीन SID की जांच
यदि Windows कंप्यूटर Active Directory डोमेन से जुड़ा है, तो इसके दो अलग-अलग SIDs होंगे। पहला SID लोकल कंप्यूटर पहचानकर्ता (Machine SID) है, और दूसरा AD में कंप्यूटर ऑब्जेक्ट का अद्वितीय पहचानकर्ता है।
आप Active Directory डोमेन में कंप्यूटर का SID प्राप्त करने के लिए कमांड का उपयोग कर सकते हैं:
Get-ADComputer mun-rds1 -properties sid|select name,sid
लोकल कंप्यूटर का SID (Machine SID) PsGetSID टूल (https://docs.microsoft.com/en-us/sysinternals/downloads/psgetsid) का उपयोग करके प्राप्त किया जा सकता है। लेकिन आपको टूल को प्रत्येक कंप्यूटर पर मैन्युअली डाउनलोड और इंस्टॉल करना होगा।
.\PsGetsid64.exe
या किसी भी लोकल उपयोगकर्ता के SID से अंतिम 4 कैरेक्टर्स (RID) को ट्रिम करके:
$user=(Get-LocalUser Administrator).sid
$user -replace ".{4}$"
यह महत्वपूर्ण है कि डोमेन में प्रत्येक कंप्यूटर का एक अद्वितीय लोकल (मशीन) SID हो। यदि आप कंप्यूटर्स या वर्चुअल मशीन्स को क्लोन कर रहे हैं या टेम्पलेट से बना रहे हैं, तो उन्हें डोमेन में जोड़ने से पहले sysprep यूटिलिटी चलाना होगा। यह टूल लोकल Machine SID को रीसेट करता है। यह आपको सामान्य ट्रस्ट रिलेशनशिप त्रुटियों से बचाएगा।
SID को उपयोगकर्ता या ग्रुप नाम में कैसे बदलें?
SID द्वारा उपयोगकर्ता खाते का नाम जानने के लिए (एक रिवर्स प्रक्रिया), आप निम्न कमांड्स में से एक का उपयोग कर सकते हैं:
wmic useraccount where sid='S-1-3-12-12451234567-1234567890-1234567-1434' get name
आप RSAT-AD-PowerShell मॉड्यूल का उपयोग करके SID द्वारा डोमेन उपयोगकर्ता का नाम प्राप्त कर सकते हैं:
Get-ADUser -Identity S-1-3-12-12451234567-1234567890-1234567-1434
ज्ञात SID द्वारा डोमेन ग्रुप नाम खोजने के लिए, कमांड का उपयोग करें:
Get-ADGroup -Identity S-1-5-21-247647651-3965464288-2949987117-23145222
आप बिल्ट-इन PowerShell क्लासेज का उपयोग करके (अतिरिक्त मॉड्यूल के बिना) SID द्वारा ग्रुप या उपयोगकर्ता नाम भी पता लगा सकते हैं:
$objSID = New-Object System.Security.Principal.SecurityIdentifier ("S S-1-3-12-12451234567-1234567890-1234567-1434")
$objUser = $objSID.Translate( [System.Security.Principal.NTAccount])
$objUser.Value
PowerShell का उपयोग करके SID द्वारा Active Directory खोजें
यदि आप नहीं जानते कि कोई निश्चित SID किस प्रकार के AD ऑब्जेक्ट से संबंधित है और उसे खोजने के लिए आपको किस सटीक PowerShell cmdlet का उपयोग करने की आवश्यकता है (Get-AdUser, Get-ADComputer, या Get-ADGroup), तो आप Get-ADObject cmdlet का उपयोग करके Active Directory डोमेन में ऑब्जेक्ट्स को SID द्वारा खोजने की सार्वभौमिक विधि का उपयोग कर सकते हैं।
$sid = ‘S-1-5-21-2412346651-123456789-123456789-12345678’
Get-ADObject –IncludeDeletedObjects -Filter "objectSid -eq '$sid'" | Select-Object name, objectClass
IncludeDeletedObjects पैरामीटर आपको Active Directory Recycle Bin में हटाए गए ऑब्जेक्ट्स को खोजने की अनुमति देता है।
हमारे मामले में, निर्दिष्ट SID वाला AD ऑब्जेक्ट एक डोमेन कंप्यूटर है (objectClass एट्रिब्यूट देखें)।