SID (Security IDentifier) হলো একটি уникаل আইডেন্টিফায়ার যা উইন্ডোজ বা অ্যাক্টিভ ডিরেক্টরি ডোমেনে তৈরি হওয়ার সময় ব্যবহারকারী, গ্রুপ, কম্পিউটার, বা অন্যান্য সিকিউরিটি অবজেক্টের জন্য नियुक्त করা হয়। উইন্ডোজ ব্যবহারকারীর নামের পরিবর্তে SID ব্যবহার করে বিভিন্ন রিসোর্সে অ্যাক্সেস নিয়ন্ত্রণ করে: নেটওয়ার্ক শেয়ার্ড ফোল্ডার, রেজিস্টরি কী, ফাইল সিস্টেম অবজেক্ট (NTFS পারমিশন), প্রিন্টার, ইত্যাদি। এই নিবন্ধে, আমরা আপনাকে কিছু সহজ উপায় দেখাবো যা দিয়ে আপনি কোনো ব্যবহারকারী, গ্রুপ, বা কম্পিউটারের SID খুঁজে পেতে পারেন, এবং বিপরীত প্রক্রিয়া - যেনো SID জানা থাকলে অবজেক্টের নাম কিভাবে পাওয়া যায়।
SID কী (Windows Security Identifier)?
যেমন বলা হয়েছে, SID (সিকিউরিটি আইডেন্টিফায়ার) একটি নির্দিষ্ট স্কোপ (ডোমেন বা লোকাল কম্পিউটার) এর মধ্যে ব্যবহারকারী, গ্রুপ বা কম্পিউটারকে উникаলভাবে শনাক্ত করতে দেয়। SID হলো নিচের ফর্মের একটি স্ট্রিং:
S-1-5-21–489056535-1467421822-2524099697–1231
- 489056535-1467421822-2524099697– এটি সেই ডোমেনের উникаল আইডেন্টিফায়ার যেটি SID ইস্যু করেছে (এই অংশ একই ডোমেনের সব অবজেক্টের জন্য একই থাকবে):
- 1231 – অবজেক্টের রিলেটিভ সিকিউরিটি আইডেন্টিফায়ার (RID)। এটি ১০০০ থেকে শুরু হয় এবং প্রতিটি নতুন অবজেক্টের জন্য ১ করে বাড়ে। FSMO রোল RID Master ধারণকারী ডোমেন কন্ট্রোলার দ্বারা ইস্যু করা হয়।
অ্যাক্টিভ ডিরেক্টরি অবজেক্টের SID-গুলো ntds.dit ডেটাবেসে সংরক্ষিত থাকে, এবং লোকাল ব্যবহারকারী ও গ্রুপের SID লোকাল উইন্ডোজ সিকিউরিটি অ্যাকাউন্ট ম্যানেজার (SAM) ডেটাবেসে HKEY_LOCAL_MACHINE\SAM\SAM রেজিস্টরি কীতে থাকে।
উইন্ডোজে তथাকথিত Well-known SIDs আছে। এগুলো যেকোনো উইন্ডোজ কম্পিউটারের বিল্ট-ইন ব্যবহারকারী এবং গ্রুপের SID। উদাহরণস্বরূপ:
S-1-5-32-544– বিল্ট-ইন Administrators গ্রুপS-1-5-32-545– লোকাল ইউজারসS-1-5-32-555 – Remote Desktop Users গ্রুপ যারা RDP経由で লগ ইন করতে পারেS-1-5-domainID-500– বিল্ট-ইন উইন্ডোজ অ্যাডমিনিস্ট্রেটর অ্যাকাউন্ট- আদি।
উইন্ডোজে, আপনি SID -> নাম এবং Username -> SID কনভার্ট করার জন্য বিভিন্ন টুল ব্যবহার করতে পারেন: whoami টুল, wmic, WMI ক্লাস, পাওয়ারশেল, বা থার্ড-পার্টি ইউটিলিটি।
লোকাল ব্যবহারকারীর সিকিউরিটি আইডেন্টিফায়ার (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।
সকল লোকাল উইন্ডোজ ব্যবহারকারীর SID তালিকা পেতে চালান:
wmic useraccount get name,sid
যদি বর্তমান ব্যবহারকারীর SID প্রয়োজন হয়, তবে এই কমান্ড চালান:
wmic useraccount where name='%username%' get sid
পাওয়ারশেল থেকে সরাসরি WMI কুয়েরি করতে পারেন:
(Get-WmiObject -Class win32_userAccount -Filter "name='test_user' and domain='$env:computername'").SID
নতুন পাওয়ারশেল Core 7.x সংস্করণে, Get-WmiObject কম্ডলেটের পরিবর্তে Get-CimInstance ব্যবহার করতে হবে।
তবে, লোকাল ব্যবহারকারী এবং গ্রুপ পরিচালনার জন্য বিল্ট-ইন পাওয়ারশেল মডিউল (Microsoft.PowerShell.LocalAccounts) ব্যবহার করে লোকাল ব্যবহারকারীর SID পাওয়া আরও সহজ।
Get-LocalUser -Name 'test_user' | Select-Object Name, SID
একইভাবে, লোকাল কম্পিউটারের গ্রুপের SID পাওয়া যায়:
Get-LocalGroup -Name tstGroup1 | Select-Object Name, SID
.NET ক্লাস System.Security.Principal.SecurityIdentifier এবং System.Security.Principal.NTAccount ব্যবহার করে পাওয়ারশেলে ব্যবহারকারীর SID পাওয়া যায়:
$objUser = New-Object System.Security.Principal.NTAccount("LOCAL_USER_NAME")
$strSID = $objUser.Translate([System.Security.Principal.SecurityIdentifier])
$strSID.Value
অ্যাক্টিভ ডিরেক্টরিতে ব্যবহারকারী/গ্রুপ SID কিভাবে পাবেন?
বর্তমান ডোমেন অ্যাকাউন্টের SID পেতে নিচের কমান্ড ব্যবহার করতে পারেন:
whoami /user
WMIC টুল ব্যবহার করে AD ডোমেন ব্যবহারকারীর SID খুঁজে বের করতে পারেন। নিচের কমান্ডে আপনার ডোমেন নাম উল্লেখ করতে হবে:
wmic useraccount where (name='jjsmith' and domain=′corp.woshub.com′) get sid
AD ডোমেন ব্যবহারকারীর SID খুঁজে পেতে Get-ADUser কম্ডলেট ব্যবহার করতে পারেন যা Windows PowerShell-এর জন্য Active Directory Module-এর অংশ। jabrams ডোমেন ব্যবহারকারী অ্যাকাউন্টের SID পেতে:
Get-ADUser -Identity 'jabrams' | select SID
Get-ADGroup কম্ডলেট ব্যবহার করে AD গ্রুপের SID পাওয়া যায়:
Get-ADGroup -Filter {Name -like "fr-sales-*"} | Select SID
যদি আপনার কম্পিউটারে পাওয়ারশেল AD মডিউল ইনস্টল না থাকে, তবে আগে বোঝানো .Net ক্লাসগুলো ব্যবহার করে AD ডোমেন থেকে ব্যবহারকারীর SID পাওয়া যায়:
$objUser = New-Object System.Security.Principal.NTAccount("corp.woshub.com","jabrams")
$strSID = $objUser.Translate([System.Security.Principal.SecurityIdentifier])
$strSID.Value
একই পাওয়ারশেল ওয়ান-লাইনার কমান্ড:
(new-object security.principal.ntaccount “jabrams").translate([security.principal.securityidentifier])
কম্পিউটারের ডোমেন এবং লোকাল মেশিন SID যাচাই করা
যদি একটি উইন্ডোজ কম্পিউটার অ্যাক্টিভ ডিরেক্টরি ডোমেনে যোগ করা থাকে, তবে এর দুটি ভিন্ন SID থাকবে। প্রথম SID হলো লোকাল কম্পিউটার আইডেন্টিফায়ার (Machine SID), এবং দ্বিতীয়টি হলো AD-এ কম্পিউটার অবজেক্টের উникаল আইডেন্টিফায়ার।
অ্যাক্টিভ ডিরেক্টরি ডোমেনে কম্পিউটারের 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-এর শেষ ৪ অক্ষর (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
অতিরিক্ত মডিউল ছাড়া বিল্ট-ইন পাওয়ারশেল ক্লাস ব্যবহার করে 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
পাওয়ারশেল দিয়ে SID ব্যবহার করে অ্যাক্টিভ ডিরেক্টরি সার্চ করা
আপনি যদি না জানেন কোনো নির্দিষ্ট SID কোন ধরনের AD অবজেক্টের এবং সেটি খুঁজে বের করার জন্য কোন সঠিক পাওয়ারশেল কম্ডলেট (Get-AdUser, Get-ADComputer, বা Get-ADGroup) ব্যবহার করতে হবে, তবে আপনি অ্যাক্টিভ ডিরেক্টরি ডোমেনে অবজেক্ট সার্চ করার ইউনিভার্সাল পদ্ধতি ব্যবহার করতে পারেন Get-ADObject কম্ডলেট দিয়ে।
$sid = ‘S-1-5-21-2412346651-123456789-123456789-12345678’
Get-ADObject –IncludeDeletedObjects -Filter "objectSid -eq '$sid'" | Select-Object name, objectClass
IncludeDeletedObjects প্যারামিটার আপনাকে অ্যাক্টিভ ডিরেক্টরি রিসাইকেল বিনে মুছে ফেলা অবজেক্ট সার্চ করতে দেয়।
আমাদের কেসে, নির্দিষ্ট SID-যুক্ত AD অবজেক্টটি একটি ডোমেন কম্পিউটার (objectClass অ্যাট্রিবিউট দেখুন)।