如何将SID转换为用户名/组名,用户转换为SID?
在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