当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 如何将 SID 转换为用户/组名以及将用户转换为 SID

作者:精品下载站 日期:2024-12-14 23:13:33 浏览:14 分类:玩电脑

如何将 SID 转换为用户/组名以及将用户转换为 SID


SID安全标识符)是在 Windows 或 Active Directory 域中创建用户、组、计算机或其他安全对象时分配给它们的唯一标识符。 Windows 使用 SID(而不是用户名)来控制对不同资源的访问:网络共享文件夹、注册表项、文件系统对象(NTFS 权限)、打印机等。在本文中,我们将向您展示一些查找用户、组或计算机的 SID 的简单方法,以及相反的过程 - 如何通过已知的 SID 获取对象名称。

什么是 SID(Windows 安全标识符)?

正如我们所说,SID(安全标识符)允许您在一定范围(域或本地计算机)内唯一标识用户、组或计算机。 SID 是以下形式的字符串:

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

  • 489056535-1467421822-2524099697 - 这是颁发 SID 的域的唯一标识符(这部分对于同一域中的所有对象都是相同的):

  • 1231 - 对象的相对安全标识符 (RID)。它从 1000 开始,每增加一个新对象就加 1。由具有 FSMO 角色 RID Master 的域控制器发出。

Active Directory 对象的 SID 存储在

ntds.dit

数据库,以及本地 Windows 安全帐户管理器 (SAM) 数据库中本地用户和组的 SID

HKEY_LOCAL_MACHINE\SAM\SAM

注册表项。

Windows 中有所谓的众所周知的 SID。这些是任何 Windows 计算机上内置用户和组的 SID。例如:

  • S-1-5-32-544

    - 内置管理员组

  • S-1-5-32-545

    - 本地用户

  • S-1-5-32-555

    - 允许通过 RDP 登录的远程桌面用户组

  • S-1-5-domainID-500

    - 内置Windows管理员帐户

  • ETC。

在 Windows 上,您可以使用各种工具来转换 SID -> 名称和用户名 -> SID:whoami 工具、wmic、WMI 类、PowerShell 或第三方实用程序。

如何查找本地用户安全标识符(SID)?

要获取本地用户帐户的SID,您可以使用wmic工具,该工具允许您查询计算机的WMI命名空间。要获取本地用户test_user的SID,可以使用WMIC命令:

wmic useraccount where name='test_user' get sid

[玩转系统] 如何将 SID 转换为用户/组名以及将用户转换为 SID

如果 WMI 存储库损坏,此命令可能会返回错误。使用本指南修复 WMI 存储库。

上面的命令返回指定本地用户的SID。在这个例子中——

S-1-5-21-1175659216-1321616944-201305354-1005

要列出所有本地 Windows 用户的 SID,请运行:

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-CimInstance

而不是

Get-WmiObject

cmdlet。

但是,通过使用内置的 PowerShell 模块来管理本地用户和组,可以更轻松地获取本地用户的 SID(

Microsoft.PowerShell.LocalAccounts

)。

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

[玩转系统] 如何将 SID 转换为用户/组名以及将用户转换为 SID

同样的方式,可以获取本地计算机的一组SID:

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

您还可以使用 .NET 类 System.Security.Principal.SecurityIdentifier 和 System.Security.Principal.NTAccount 通过 PowerShell 获取用户的 SID:

$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

[玩转系统] 如何将 SID 转换为用户/组名以及将用户转换为 SID

您可以使用以下命令查找 Active Directory 域用户的 SID

WMIC

工具。您必须在以下命令中指定您的域名:

wmic useraccount where (name='jjsmith' and domain=′corp.a-d.site′) get sid

要查找 AD 域用户的 SID,您可以使用 Get-ADUser cmdlet,它是 Windows PowerShell 的 Active Directory 模块的一部分。让我们获取 jabrams 域用户帐户的 SID:

Get-ADUser -Identity 'jabrams' | select SID

[玩转系统] 如何将 SID 转换为用户/组名以及将用户转换为 SID

您可以使用 Get-ADGroup cmdlet 获取 AD 组的 SID:

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

[玩转系统] 如何将 SID 转换为用户/组名以及将用户转换为 SID

如果您的计算机上未安装 PowerShell AD 模块,您可以使用前面提到的 .Net 类从 AD 域获取用户的 SID:

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

[玩转系统] 如何将 SID 转换为用户/组名以及将用户转换为 SID

相同的 PowerShell 一行命令:

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

检查计算机的域和本地计算机 SID

如果 Windows 计算机加入 Active Directory 域,它将有两个不同的 SID。第一个SID是本地计算机标识符(机器SID),第二个是AD中唯一的计算机对象标识符。

您可以使用以下命令获取 Active Directory 域中计算机的 SID:

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

[玩转系统] 如何将 SID 转换为用户/组名以及将用户转换为 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 转换为用户/组名以及将用户转换为 SID

域中的每台计算机都有一个唯一的本地(计算机)SID,这一点很重要。如果您要克隆计算机或虚拟机或从模板创建它们,则必须运行

sysprep

将它们加入域之前的实用程序。此工具会重置本地计算机 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 转换为用户/组名以及将用户转换为 SID

您还可以使用内置的 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 按 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 回收站中搜索已删除的对象。

[玩转系统] 如何将 SID 转换为用户/组名以及将用户转换为 SID

在我们的例子中,具有指定 SID 的 AD 对象是域计算机(请参阅 objectClass 属性)。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯