Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Windows Server

วิธีแปลง SID เป็นชื่อผู้ใช้/กลุ่ม และผู้ใช้เป็น SID

SID (Security IDentifier) คือตัวระบุเฉพาะที่มอบหมายให้กับผู้ใช้ กลุ่ม คอมพิวเตอร์ หรือออบเจ็กต์ความปลอดภัยอื่นๆ เมื่อถูกสร้างใน Windows หรือโดเมน Active Directory Windows ใช้ SID แต่ไม่ใช่ชื่อผู้ใช้ เพื่อควบคุมการเข้าถึงทรัพยากรต่างๆ: โฟลเดอร์แชร์เครือข่าย คีย์รีจิสทรี ออบเจ็กต์ระบบไฟล์ (NTFS permissions) พิมพ์ ฯลฯ ในบทความนี้ เราจะแสดงวิธีง่ายๆ เพื่อหา 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

SIDs ของออบเจ็กต์ Active Directory ถูกเก็บในฐานข้อมูล ntds.dit และ SIDs ของผู้ใช้และกลุ่มท้องถิ่นในฐานข้อมูล Windows Security Account Manager (SAM) ท้องถิ่นในคีย์รีจิสทรี HKEY_LOCAL_MACHINE\SAM\SAM

มี Well-known SIDs ใน Windows นี่คือ SIDs สำหรับผู้ใช้และกลุ่มในตัวบนคอมพิวเตอร์ Windows ใดๆ ตัวอย่างเช่น:

  • 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 – บัญชีผู้ดูแลระบบ Windows ในตัว
  • และอื่นๆ

ใน Windows คุณสามารถใช้เครื่องมือต่างๆ เพื่อแปลง SID → Name และ Username → SID: whoami tool, wmic, WMI classes, PowerShell หรือยูทิลิตี้ของบุคคลที่สาม

วิธีหา Security Identifier (SID) ของผู้ใช้ท้องถิ่น

เพื่อรับ SID ของบัญชีผู้ใช้ท้องถิ่น คุณสามารถใช้เครื่องมือ wmic ซึ่งอนุญาตให้สอบถามเนมสเปซ WMI ของคอมพิวเตอร์ เพื่อรับ SID ของผู้ใช้ท้องถิ่น test_user คุณสามารถใช้คำสั่ง WMIC:

wmic useraccount where name='test_user' get sid

คำสั่งนี้อาจคืนค่าข้อผิดพลาดหากที่เก็บ WMI เสียหาย ใช้คู่มือนี้เพื่อซ่อมแซมที่เก็บ WMI

คำสั่งด้านบนคืนค่า SID ของผู้ใช้ท้องถิ่นที่ระบุ ในตัวอย่างนี้ – S-1-5-21-1175659216-1321616944-201305354-1005

เพื่อแสดงรายการ SIDs ของผู้ใช้ Windows ท้องถิ่นทั้งหมด ให้รัน:

wmic useraccount get name,sid

หากคุณต้องการรับ SID ของผู้ใช้ปัจจุบัน ให้รันคำสั่งต่อไปนี้:

wmic useraccount where name='%username%' get sid

คุณสามารถสอบถาม WMI โดยตรงจาก PowerShell:

(Get-WmiObject -Class win32_userAccount -Filter "name='test_user' and domain='$env:computername'").SID

ใน PowerShell Core 7.x ใหม่กว่า คุณต้องใช้ Get-CimInstance แทนคำสั่ง Get-WmiObject

แต่ยังง่ายกว่านั้นในการรับ SID ของผู้ใช้ท้องถิ่นโดยใช้โมดูล PowerShell ในตัวสำหรับจัดการผู้ใช้และกลุ่มท้องถิ่น (Microsoft.PowerShell.LocalAccounts)

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 ของผู้ใช้ผ่าน PowerShell:

$objUser = New-Object System.Security.Principal.NTAccount("LOCAL_USER_NAME")
$strSID = $objUser.Translate([System.Security.Principal.SecurityIdentifier])
$strSID.Value

วิธีรับ User/Group SID ใน Active Directory

คำสั่งต่อไปนี้สามารถใช้เพื่อรับ SID ของบัญชีโดเมนปัจจุบัน:

whoami /user

คุณสามารถหา SID ของผู้ใช้โดเมน Active Directory โดยใช้เครื่องมือ WMIC คุณต้องระบุชื่อโดเมนของคุณในคำสั่งต่อไปนี้:

wmic useraccount where (name='jjsmith' and domain=′corp.woshub.com′) get sid

เพื่อหา SID ของผู้ใช้โดเมน AD คุณสามารถใช้คำสั่ง Get-ADUser ที่เป็นส่วนของ Active Directory Module for Windows PowerShell มารับ SID สำหรับบัญชีผู้ใช้โดเมน jabrams:

Get-ADUser -Identity 'jabrams' | select SID

คุณสามารถรับ SID ของกลุ่ม AD โดยใช้คำสั่ง Get-ADGroup:

Get-ADGroup -Filter {Name -like "fr-sales-*"} | Select SID

หากโมดูล PowerShell AD ไม่ได้ติดตั้งบนคอมพิวเตอร์ของคุณ คุณสามารถรับ SID ของผู้ใช้จากโดเมน AD โดยใช้คลาส .Net ที่กล่าวมาข้างต้น:

$objUser = New-Object System.Security.Principal.NTAccount("corp.woshub.com","jabrams")
$strSID = $objUser.Translate([System.Security.Principal.SecurityIdentifier])
$strSID.Value

คำสั่ง PowerShell one-liner เดียวกัน:

(new-object security.principal.ntaccount “jabrams").translate([security.principal.securityidentifier])

การตรวจสอบ SID ของโดเมนและเครื่องท้องถิ่นของคอมพิวเตอร์

หากคอมพิวเตอร์ Windows เข้าร่วมโดเมน Active Directory มันจะมี SID สองตัวที่แตกต่างกัน SID แรกคือตัวระบุคอมพิวเตอร์ท้องถิ่น (Machine SID) และอันที่สองคือตัวระบุออบเจ็กต์คอมพิวเตอร์ที่เฉพาะเจาะจงใน AD

คุณสามารถรับ SID ของคอมพิวเตอร์ในโดเมน Active Directory โดยใช้คำสั่ง:

Get-ADComputer mun-rds1 -properties sid|select name,sid

SID ของคอมพิวเตอร์ท้องถิ่น (Machine SID) สามารถรับได้โดยใช้เครื่องมือ PsGetSID (https://docs.microsoft.com/en-us/sysinternals/downloads/psgetsid) แต่คุณต้องดาวน์โหลดและติดตั้งเครื่องมือบนแต่ละคอมพิวเตอร์ด้วยตนเอง

.\PsGetsid64.exe

หรือเพียงแค่ตัดตัวอักษร 4 ตัวสุดท้าย (RID) จาก SID ของผู้ใช้ท้องถิ่นใดๆ:

$user=(Get-LocalUser Administrator).sid
$user -replace ".{4}$"

สำคัญที่คอมพิวเตอร์แต่ละเครื่องในโดเมนต้องมี SID ท้องถิ่น (machine) ที่ไม่ซ้ำกัน หากคุณโคลนคอมพิวเตอร์หรือเครื่องเสมือน หรือสร้างจากเทมเพลต คุณต้องรันยูทิลิตี้ sysprep ก่อนเข้าร่วมโดเมน เครื่องมือนี้จะรีเซ็ต SID ท้องถิ่นของ Machine ซึ่งจะช่วยหลีกเลี่ยงข้อผิดพลาดความเชื่อมั่นทั่วไป

วิธีแปลง SID เป็นชื่อผู้ใช้หรือกลุ่ม

เพื่อหาชื่อบัญชีผู้ใช้จาก SID (ขั้นตอนย้อนกลับ) คุณสามารถใช้คำสั่งใดคำสั่งหนึ่งต่อไปนี้:

wmic useraccount where sid='S-1-3-12-12451234567-1234567890-1234567-1434' get name

คุณสามารถรับชื่อผู้ใช้โดเมนจาก SID โดยใช้โมดูล RSAT-AD-PowerShell:

Get-ADUser -Identity S-1-3-12-12451234567-1234567890-1234567-1434

เพื่อหาชื่อกลุ่มโดเมนจาก SID ที่ทราบ ให้ใช้คำสั่ง:

Get-ADGroup -Identity S-1-5-21-247647651-3965464288-2949987117-23145222

คุณยังสามารถหาชื่อกลุ่มหรือผู้ใช้จาก SID ด้วยคลาส PowerShell ในตัว (โดยไม่ใช้โมดูลเพิ่มเติม):

$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

การค้นหา Active Directory ด้วย SID โดยใช้ PowerShell

หากคุณไม่ทราบว่า SID 某个 属于什么类型的 AD 对象 并且不知道需要使用哪个确切的 PowerShell cmdlet 来查找它 (Get-AdUser, Get-ADComputer 或 Get-ADGroup) 您可以使用通用方法,通过 Get-ADObject cmdlet 按 SID 在 Active Directory 域中搜索对象

$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

ในกรณีของเรา ออบเจ็กต์ AD ที่มี SID ที่ระบุคือคอมพิวเตอร์โดเมน (ดูแอตทริบิวต์ objectClass)