如何将SID转换为用户名/组名,用户转换为SID?

时间:2020-01-09 10:46:33  来源:igfitidea点击:

在Windows环境下,为每个域和本地用户、组和其他安全对象分配一个唯一的标识符- 安全标识符或者 SID。它是一个SID,而不是用户名,用于控制对不同资源的访问:网络共享文件夹、注册表项、文件系统对象、打印机等。在本文中,我们将向我们展示一些查找用户或者组(Active Directory或者local)的SID的简单方法,以及相反的过程-如何通过已知的SID获取Windows用户或者组的名称。

要将用户名转换为SID,可以使用Sysinternals工具集中的优秀工具PsGetSid。但是你必须手动下载并在每台计算机上安装这个工具。使用PsGetSID通过用户帐户名获取SID的示例:

PsGetSid PC1\jjsmith

要通过SID获取用户名,请使用以下命令:

PsGetSid S-1-5-21-1175651296-1316133944-203321314-1005

在我看来,转换SID->Username和Username->SID的最简单方法是使用内部Windows CLI工具或者简单的PowerShell cmdlet:

如何查找本地用户SID?

要获取当前计算机上本地用户帐户的SID,可以使用[wmic]工具,该工具允许我们查询计算机的WMI命名空间。要获取本地用户test_用户的SID,可以使用WMIC命令:

wmic useraccount where name='test_user' get sid

上面的命令返回了指定本地用户的SID。在本例中

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

.

如果需要获取当前用户的SID(在该用户下执行命令),请运行以下命令:

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

使用两个.NET类系统安全原则.SecurityIdentifier系统安全原则.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

我们可以使用WMIC工具找到域用户SID。必须在以下命令中指定域名:

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

若要查找AD域用户的SID,可以使用Get-ADUser cmdlet,该cmdlet是Windows PowerShell Active Directory模块的一部分。获取jjsmith帐户的SID:

Get-ADUser -Identity 'jabrams' | select SID

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

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

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