SID ( Mã định danh bảo mật ) là số nhận dạng duy nhất được gán cho người dùng, nhóm, máy tính hoặc các đối tượng bảo mật khác khi chúng được tạo trong Windows hoặc miền Active Directory. Windows sử dụng SID, nhưng không sử dụng tên người dùng, để kiểm soát quyền truy cập vào các tài nguyên khác nhau:thư mục chia sẻ mạng, khóa đăng ký, đối tượng hệ thống tệp (quyền NTFS), máy in, v.v. Trong bài viết này, chúng tôi sẽ chỉ cho bạn một số cách đơn giản để tìm SID của người dùng, nhóm hoặc máy tính và quy trình ngược lại - cách lấy tên đối tượng theo SID đã biết.
SID (Số nhận dạng bảo mật của Windows) là gì?
Như chúng tôi đã nói, SID (mã định danh bảo mật) cho phép bạn xác định duy nhất một người dùng, nhóm hoặc máy tính trong một phạm vi nhất định (miền hoặc máy tính cục bộ). SID là một chuỗi có dạng:
S-1-5-21–489056535-1467421822-2524099697–1231
- 489056535-1467421822-2524099697– đây là số nhận dạng duy nhất của miền đã cấp SID (phần này sẽ giống nhau cho tất cả các đối tượng trong cùng một miền):
- 1231 - số nhận dạng bảo mật tương đối (RID) của đối tượng. Nó bắt đầu từ 1000 và tăng 1 cho mỗi đối tượng mới. Được cấp bởi bộ điều khiển miền có vai trò FSMO RID Master.
SID của các đối tượng Active Directory được lưu trữ trong ntds.dit
cơ sở dữ liệu và SID của người dùng cục bộ và nhóm trong cơ sở dữ liệu cục bộ của Trình quản lý tài khoản bảo mật Windows (SAM) trong HKEY_LOCAL_MACHINE\SAM\SAM
khóa đăng ký.
Có cái gọi là SID nổi tiếng trong Windows. Đây là các SID dành cho người dùng và nhóm cài sẵn trên bất kỳ máy tính Windows nào. Ví dụ:
-
S-1-5-32-544
- nhóm quản trị viên tích hợp sẵn -
S-1-5-32-545
- người dùng địa phương -
S-1-5-32-555
- Nhóm người dùng máy tính từ xa được phép đăng nhập qua RDP -
S-1-5-domainID-500
- tài khoản quản trị viên Windows tích hợp sẵn - Vv.
Trên Windows, bạn có thể sử dụng các công cụ khác nhau để chuyển đổi SID -> Tên và Tên người dùng -> SID:công cụ whoami, wmic, các lớp WMI, PowerShell hoặc các tiện ích của bên thứ ba.
Cách Tìm Mã nhận dạng Bảo mật Người dùng Cục bộ (SID)?
Để lấy SID của tài khoản người dùng cục bộ, bạn có thể sử dụng wmic công cụ này cho phép bạn truy vấn vùng tên WMI của máy tính. Để lấy SID của người dùng cục bộ test_user, bạn có thể sử dụng lệnh WMIC:
wmic useraccount where name='test_user' get sid
Lệnh này có thể trả về lỗi nếu kho lưu trữ WMI bị hỏng. Sử dụng hướng dẫn này để sửa chữa kho lưu trữ WMI.
Lệnh trên trả về SID của người dùng cục bộ được chỉ định. Trong ví dụ này - S-1-5-21-1175659216-1321616944-201305354-1005
.
Để liệt kê các SID của tất cả người dùng Windows cục bộ, hãy chạy:
wmic useraccount get name,sid
Nếu bạn cần lấy SID của người dùng hiện tại, hãy chạy lệnh sau:
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
Get-CimInstance
thay vì Get-WmiObject
cmdlet.
Nhưng việc lấy SID của người dùng cục bộ thậm chí còn dễ dàng hơn bằng cách sử dụng mô-đun PowerShell tích hợp để quản lý người dùng và nhóm cục bộ (Microsoft.PowerShell.LocalAccounts
).
Get-LocalUser -Name 'test_user' | Select-Object Name, SID
Theo cách tương tự, bạn có thể lấy SID của một nhóm máy tính cục bộ:
Get-LocalGroup -Name tstGroup1 | Select-Object Name, SID
Bạn cũng có thể sử dụng các lớp .NET System.Security.Principal.SecurityIdentifier và System.Security.Principal.NTAccount để lấy SID của người dùng 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 SID người dùng / nhóm trong Active Directory?
Lệnh sau có thể được sử dụng để lấy SID của tài khoản miền hiện tại:
whoami /user
Bạn có thể tìm thấy SID của người dùng miền Active Directory bằng cách sử dụng WMIC
dụng cụ. Bạn phải chỉ định tên miền của mình trong lệnh sau:
wmic useraccount where (name='jjsmith' and domain=′corp.woshub.com′) get sid
Để tìm SID của người dùng miền AD, bạn có thể sử dụng lệnh ghép ngắn Get-ADUser là một phần của Mô-đun Active Directory cho Windows PowerShell. Hãy lấy SID cho jabram tài khoản người dùng miền:
Get-ADUser -Identity 'jabrams' | select SID
Bạn có thể lấy SID của một nhóm QUẢNG CÁO bằng cách sử dụng lệnh ghép ngắn Get-ADGroup:
Get-ADGroup -Filter {Name -like "fr-sales-*"} | Select SID
Nếu mô-đun AD PowerShell chưa được cài đặt trên máy tính của bạn, bạn có thể lấy SID của người dùng từ miền AD bằng cách sử dụng các lớp .Net đã đề cập trước đó:
$objUser = New-Object System.Security.Principal.NTAccount("corp.woshub.com","jabrams")
$strSID = $objUser.Translate([System.Security.Principal.SecurityIdentifier])
$strSID.Value
Cùng một lệnh PowerShell one-liner:
(new-object security.principal.ntaccount “jabrams").translate([security.principal.securityidentifier])
Kiểm tra SID Miền và Máy cục bộ của Máy tính
Nếu một máy tính Windows được tham gia vào miền Active Directory, nó sẽ có hai SID khác nhau. SID đầu tiên là mã định danh máy tính cục bộ (Máy SID) và SID thứ hai là mã định danh đối tượng máy tính duy nhất trong AD.
Bạn có thể lấy SID của một máy tính trong miền Active Directory bằng lệnh:
Get-ADComputer mun-rds1 -properties sid|select name,sid
Có thể lấy SID của máy tính cục bộ (Máy SID) bằng cách sử dụng PsGet SID công cụ (https://docs.microsoft.com/en-us/sysinternals/downloads/psgetsid). Nhưng bạn phải tải xuống và cài đặt công cụ trên từng máy tính theo cách thủ công.
.\PsGetsid64.exe
Hoặc đơn giản bằng cách cắt 4 ký tự cuối cùng (RID) từ SID của bất kỳ người dùng cục bộ nào:
$user=(Get-LocalUser Administrator).sid
$user -replace ".{4}$"
Điều quan trọng là mỗi máy tính trong miền có một SID cục bộ (máy) duy nhất. Nếu bạn đang nhân bản máy tính hoặc máy ảo hoặc tạo chúng từ một mẫu, bạn phải chạy
sysprep
tiện ích trước khi tham gia với họ vào miền. Công cụ này đặt lại SID Máy cục bộ. Điều này sẽ giúp bạn tránh khỏi các lỗi quan hệ tin cậy phổ biến. Làm cách nào để chuyển đổi SID thành Tên người dùng hoặc Tên nhóm?
Để tìm ra tên của tài khoản người dùng bằng SID (một quy trình ngược lại), bạn có thể sử dụng một trong các 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 người dùng miền bằng SID bằng cách sử dụng mô-đun RSAT-AD-PowerShell:
Get-ADUser -Identity S-1-3-12-12451234567-1234567890-1234567-1434
Để tìm tên nhóm miền theo SID đã biết, hãy sử dụng lệnh:
Get-ADGroup -Identity S-1-5-21-247647651-3965464288-2949987117-23145222
Bạn cũng có thể tìm ra nhóm hoặc tên người dùng theo SID với các lớp PowerShell được tích hợp sẵn (mà không cần sử dụng các mô-đun bổ sung):
$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 bằng PowerShell
Nếu bạn không biết loại đối tượng AD mà một SID nhất định thuộc về và lệnh ghép ngắn PowerShell chính xác nào bạn cần sử dụng để tìm nó (Get-AdUser, Get-ADComputer hoặc Get-ADGroup), bạn có thể sử dụng phương pháp phổ biến của tìm kiếm các đối tượng trong miền Active Directory bằng SID sử dụng Get-ADObject lệnh ghép ngắn.
$sid = ‘S-1-5-21-2412346651-123456789-123456789-12345678’
Get-ADObject –IncludeDeletedObjects -Filter "objectSid -eq '$sid'" | Select-Object name, objectClass
IncludeDeletedObjects
cho phép bạn tìm kiếm các đối tượng đã xóa trong Thùng rác Active Directory.
Trong trường hợp của chúng tôi, đối tượng AD với SID được chỉ định là một máy tính miền (xem thuộc tính objectClass).