Computer >> Hướng Dẫn Máy Tính >  >> Hệ Thống >> Máy Chủ Windows

Cách Chuyển Đổi SID Sang Tên User/Nhóm và User Sang SID?

SID (Security IDentifier) là định danh duy nhất được gán cho user, group, máy tính, hoặc đối tượng bảo mật khác khi chúng được tạo trong Windows hoặc domain Active Directory. Windows dùng SID, không phải username, để kiểm soát truy cập tài nguyên khác nhau: thư mục chia sẻ mạng, khóa registry, đối tượng file system (quyền NTFS), máy in, v.v. Trong bài này, chúng tôi trình bày cách đơn giản tìm SID của user, group, máy tính, và thủ tục ngược – lấy tên đối tượng từ SID đã biết.

SID (Windows Security Identifier) Là Gì?

Như đã nói, SID (security identifier) cho phép xác định duy nhất user, group hoặc máy tính trong phạm vi nhất định (domain hoặc máy cục bộ). SID là chuỗi dạng:

S-1-5-21–489056535-1467421822-2524099697–1231

  • 489056535-1467421822-2524099697– đây là định danh duy nhất domain cấp SID (phần này giống nhau cho tất cả đối tượng trong cùng domain):
  • 1231 – relative security identifier (RID) của đối tượng. Bắt đầu từ 1000 và tăng 1 cho mỗi đối tượng mới. Do domain controller với vai trò FSMO RID Master cấp.

SID đối tượng Active Directory lưu trong database ntds.dit, và SID user/group cục bộ trong database Windows Security Account Manager (SAM) cục bộ trong khóa registry HKEY_LOCAL_MACHINE\SAM\SAM.

Có các Well-known SIDs trong Windows. Đây là SID cho user và nhóm built-in trên bất kỳ máy Windows nào. Ví dụ:

  • S-1-5-32-544 – nhóm Administrators built-in
  • S-1-5-32-545 – user cục bộ
  • S-1-5-32-555 – nhóm Remote Desktop Users được phép đăng nhập qua RDP
  • S-1-5-domainID-500 – tài khoản administrator built-in Windows
  • V.v.

Trên Windows, bạn có thể dùng nhiều công cụ chuyển đổi SID -> Name và Username -> SID: công cụ whoami, wmic, lớp WMI, PowerShell, hoặc tiện ích bên thứ ba.

Cách Tìm Security Identifier (SID) User Cục Bộ?

Để lấy SID tài khoản user cục bộ, dùng công cụ wmic, cho phép truy vấn namespace WMI máy tính. Để lấy SID user cục bộ test_user, dùng lệnh WMIC:

wmic useraccount where name='test_user' get sid

Cách Chuyển Đổi SID Sang Tên User/Nhóm và User Sang SID?

Lệnh này có thể trả lỗi nếu repository WMI hỏng. Dùng hướng dẫn này sửa repository WMI.

Lệnh trên trả về SID user cục bộ chỉ định. Trong ví dụ – S-1-5-21-1175659216-1321616944-201305354-1005.

Để liệt kê SID tất cả user Windows cục bộ, chạy:

wmic useraccount get name,sid

Nếu cần SID user hiện tại, chạy lệnh:

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

Bạn có thể truy vấn WMI trực tiếp từ PowerShell:

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

Trong PowerShell Core 7.x mới, phải dùng Get-CimInstance thay Get-WmiObject.

Nhưng dễ hơn lấy SID user cục bộ bằng module PowerShell tích hợp quản lý user/group cục bộ (Microsoft.PowerShell.LocalAccounts).

Get-LocalUser -Name 'test_user' | Select-Object Name, SID

Cách Chuyển Đổi SID Sang Tên User/Nhóm và User Sang SID?

Cùng cách, bạn có thể lấy SID nhóm máy cục bộ:

Get-LocalGroup -Name tstGroup1 | Select-Object Name, SID

Cũng dùng lớp .NET System.Security.Principal.SecurityIdentifier và System.Security.Principal.NTAccount lấy SID user qua PowerShell:

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

Cách Lấy User/Group SID Trong Active Directory?

Lệnh sau dùng lấy SID tài khoản domain hiện tại:

whoami /user

Cách Chuyển Đổi SID Sang Tên User/Nhóm và User Sang SID?

Bạn có thể tìm SID user domain AD dùng WMIC. Phải chỉ định tên domain trong lệnh:

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

Để tìm SID user domain AD, dùng cmdlet Get-ADUser thuộc module Active Directory cho Windows PowerShell. Hãy lấy SID cho tài khoản domain jabrams:

Get-ADUser -Identity 'jabrams' | select SID

Cách Chuyển Đổi SID Sang Tên User/Nhóm và User Sang SID?

Bạn có thể lấy SID nhóm AD dùng cmdlet Get-ADGroup:

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

Cách Chuyển Đổi SID Sang Tên User/Nhóm và User Sang SID?

Nếu module PowerShell AD chưa cài trên máy, bạn có thể lấy SID user từ domain AD dùng lớp .Net trước:

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

Cách Chuyển Đổi SID Sang Tên User/Nhóm và User Sang SID?

Cùng lệnh one-liner PowerShell:

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

Kiểm Tra SID Domain và Local Machine Của Máy Tính

Nếu máy Windows join vào domain Active Directory, nó có hai SID khác nhau. SID đầu tiên là định danh máy cục bộ (Machine SID), và SID thứ hai là định danh duy nhất đối tượng máy trong AD.

Bạn có thể lấy SID máy trong domain AD dùng lệnh:

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

Cách Chuyển Đổi SID Sang Tên User/Nhóm và User Sang SID?

SID máy cục bộ (Machine SID) có được dùng công cụ PsGetSID (https://docs.microsoft.com/en-us/sysinternals/downloads/psgetsid). Nhưng phải tải và cài công cụ trên từng máy thủ công.

.\PsGetsid64.exe

Hoặc đơn giản cắt 4 ký tự cuối (RID) từ SID bất kỳ user cục bộ:

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

Cách Chuyển Đổi SID Sang Tên User/Nhóm và User Sang SID?

Quan trọng rằng mỗi máy trong domain có SID cục bộ (machine) duy nhất. Nếu bạn clone máy hoặc máy ảo hoặc tạo từ template, phải chạy tiện ích sysprep trước khi join domain. Công cụ này reset SID cục bộ Machine. Điều này tránh lỗi trust relationship phổ biến.

Cách Chuyển Đổi SID Sang Tên User Hoặc Nhóm?

Để tìm tên tài khoản user bằng SID (thủ tục ngược), dùng một trong lệnh sau:

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

Bạn có thể lấy tên user domain bằng SID dùng module RSAT-AD-PowerShell:

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

Để tìm tên nhóm domain bằng SID biết, dùng lệnh:

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

Cách Chuyển Đổi SID Sang Tên User/Nhóm và User Sang SID?

Bạn cũng có thể tìm tên nhóm hoặc user bằng SID với lớp PowerShell tích hợp (không dùng module thêm):

$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

Tìm Kiếm Active Directory Theo SID Dùng PowerShell

Nếu không biết đối tượng AD nào SID cụ thể thuộc về và cmdlet PowerShell nào cần dùng tìm nó (Get-AdUser, Get-ADComputer, hoặc Get-ADGroup), bạn có thể dùng phương pháp chung tìm đối tượng trong domain AD bằng SID dùng cmdlet Get-ADObject.

$sid = ‘S-1-5-21-2412346651-123456789-123456789-12345678’
Get-ADObject –IncludeDeletedObjects -Filter "objectSid -eq '$sid'" | Select-Object name, objectClass

Tham số IncludeDeletedObjects cho phép tìm đối tượng đã xóa trong Active Directory Recycle Bin.

Cách Chuyển Đổi SID Sang Tên User/Nhóm và User Sang SID?

Trong trường hợp này, đối tượng AD với SID chỉ định là máy domain (xem thuộc tính objectClass).