Windows SID(Security Identifier)是一个用于唯一标识安全主体(如用户、组、计算机等)的标识符。每个安全主体在Windows操作系统中都被分配一个唯一的SID,以便进行身份验证和访问控制。SID(安全标识符)在Windows操作系统中有几种查询方法

Windows SID(Security Identifier)是一个用于唯一标识安全主体(如用户、组、计算机等)的标识符。每个安全主体在Windows操作系统中都被分配一个唯一的SID,以便进行身份验证和访问控制。

SID由一系列数字组成,通常以"S-"开头,后面紧跟着一串数字和字符的组合。例如,"S-1-5-21-3623811015-3361044348-30300820-1013"就是一个典型的SID。
https://learn.microsoft.com/zh-cn/windows-server/identity/ad-ds/manage/understand-security-identifiers

计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SecurityManager\CapabilityClasses

区别如下:

本地SID和全局SID:本地SID是相对于单个计算机的唯一标识符,全局SID是在整个域中唯一的标识符。

唯一性:每个安全主体都有其专属的SID,不同的安全主体具有不同的SID。即使两个安全主体的名称相同,它们的SID也会不同。

持久性:SID在安全主体创建时被分配,并且通常在整个安全主体的生命周期中保持不变。即使安全主体重命名,SID也不会改变。

安全标识:SID在Windows系统中被广泛用于身份验证和访问控制机制。它们用于授权和限制安全主体对资源的访问权限。

SID在Windows系统中起着至关重要的作用,它们使系统能够准确识别和控制不同安全主体的权限和访问级别。

除了上述提到的区别之外,还有以下几点关于Windows SID的特点:

层级结构:SID是按照层级结构组织的。它的格式是由多个标识符组成的,例如:S-R-I-S-...-L-R。
其中,S表示固定的前缀,R表示相对标识符(Relative Identifier),I表示一个域或本地计算机的标识符,L表示最后一个RID。
通过这种层级结构,可以推断出与SID相关联的安全主体所属的域或本地计算机。

内置SID:Windows系统预定义了一些内置的SID,用于表示特殊的安全主体。例如:

"S-1-5-18":LocalSystem账户的SID。

"S-1-5-32-544":Administrators组的SID。

SID的用途:SID在Windows系统中用于多种用途,包括:

在安全描述符中唯一标识用户、组和对象。

用于访问控制列表(Access Control Lists,ACLs)中指定权限的授予和拒绝。

用于跨域访问、身份验证和授权。

总之,Windows SID是Windows操作系统中用于唯一标识安全主体的标识符。它们在系统中具有唯一性、持久性,并且在身份验证和访问控制中发挥关键作用。

除了上述提到的特点之外,还有一些其他关于Windows SID的特点:

SID历史记录:在某些情况下,安全主体的SID可能会发生变化。例如,当域中的安全主体从一个域移动到另一个域时,其SID可能会改变。为了跟踪这种变化,Windows系统维护了SID历史记录,以确保旧的SID仍然能够识别和链接到正确的安全主体。

Well-known SID:Windows系统还定义了一些称为"well-known SID"的内置标识符,用于表示特定的安全主体类型。这些标识符是在所有Windows系统中通用的,例如:

"S-1-5-11":表示Authenticated Users(已验证用户)组的SID。
"S-1-5-32-545":表示Users(用户)组的SID。

SID转换和映射:在跨不同计算机或域之间进行身份验证和访问控制时,可能需要进行SID的转换和映射。这是为了确保安全主体在不同环境中拥有相对应的权限和访问级别。

SID与安全描述符:安全描述符(Security Descriptor)是包含有关对象权限、所有者和审核信息的数据结构。其中包含了与对象关联的SID。通过安全描述符,可以将权限和访问控制信息与相应的安全主体关联起来。

这些是关于Windows SID的一些重要特点。SID在Windows系统中扮演着关键的角色,用于唯一标识和管理安全主体的身份验证和访问控制。

除了之前提到的特点之外,以下是关于Windows SID的其他一些特点:

SID的长度:Windows SID的长度可以根据需要而变化。它可以包含多个RID(Relative Identifier),RID表示特定安全主体的相对标识符。每个RID由一个整数表示,用于进一步唯一标识安全主体。

SDDL表示法:SDDL(Security Descriptor Definition Language)是一种用于表示安全描述符和相关信息的文本表示法。SID可以使用SDDL表示法来标识和描述安全主体。例如,SDDL表示法中的"D:"表示DACL(Discretionary Access Control List),而"S-1-5-32-544"表示Administrators组的SID。

用户SID和组SID:存在两种类型的SID:用户SID(User SID)和组SID(Group SID)。用户SID用于唯一标识单个用户,而组SID用于唯一标识组。这些SID在访问控制和权限管理方面起着重要作用。

SID的格式转换:SID可以在不同的表示格式之间进行转换。常见的格式包括字符串格式、二进制格式和SDDL格式。Windows系统提供了API和工具,使我们能够在这些不同格式之间进行转换和操作。

总之,Windows SID是用于标识和管理安全主体的唯一标识符。它的长度可以根据需要变化,可以使用不同的表示格式来描述和操作。SID在访问控制、身份验证和权限管理等方面扮演着重要角色。

除了之前提到的特点之外,以下是关于Windows SID的其他一些特点:

内置管理员组SID:Windows系统中有一个内置的管理员组,其SID为"S-1-5-32-544"。管理员组具有系统范围的特权,可以访问和管理计算机上的所有资源。

域SID:在域环境中,每个域都有一个唯一的域SID。域SID用于标识域内的安全主体,如用户、组和计算机账户等。域SID的格式通常为"S-1-5-21-[域标识]-[域相对标识]"。

默认用户SID:在Windows操作系统中,每个用户都有一个唯一的用户SID。默认情况下,用户SID的格式为"S-1-5-21-[唯一标识]-[相对标识]"。这个唯一标识是根据计算机的安装时间和网络适配器的MAC地址生成的。

SID查找和解析:可以通过使用Windows API或命令行工具(如PsGetsid和Whoami)来查找和解析SID。这些工具可以帮助我们获取给定SID对应的安全主体的详细信息,如名称、域和其他属性。

PsGetSid 是一个 Windows 实用工具,用于获取本地计算机或远程计算机的安全标识符(SID)信息。

PsGetSid - Sysinternals | Microsoft Learn

SID 是 Windows 中用于唯一标识用户、组和计算机的一种标识符。

PsGetSid 允许用户通过命令行轻松获取这些标识符,以便进行系统管理、权限管理等操作。

使用 PsGetSid,您可以获取以下信息:

  1. 计算机的SID:PsGetSid 可以返回本地计算机或远程计算机的安全标识符。

  2. 用户和组的SID:您可以使用 PsGetSid 获取特定用户或组的安全标识符。

  3. 验证SID:您可以使用 PsGetSid 来验证特定的 SID 是否有效,或者查找与某个 SID 相关联的用户或组。

  4. 批量操作:PsGetSid 支持批量操作,可以一次性获取多个计算机或多个用户/组的安全标识符信息。

为什么需要 PsGetSid?这个工具对系统管理员和安全专家来说非常有用,因为它可以帮助他们快速了解系统中用户、组和计算机的安全标识符信息,从而更好地进行权限管理、身份验证和安全审计。PsGetSid 还可以用于故障排除和诊断,帮助确定特定权限或访问问题的根本原因。

PsGetSid v1.46 的功能可以分为以下几个分类:

  1. 获取计算机 SID

    • 可以使用 PsGetSid 获取本地计算机的安全标识符。
    • 支持获取远程计算机的安全标识符。
  2. 获取用户/组 SID

    • 允许用户指定用户名或组名来获取其安全标识符。
    • 支持获取本地用户/组和远程用户/组的安全标识符。
  3. 验证 SID

    • 提供验证功能,允许用户检查指定的 SID 是否有效。
  4. 批量操作

    • 支持批量获取多个计算机的安全标识符信息。
    • 支持批量获取多个用户/组的安全标识符信息。
  5. 输出格式

    • 可以输出结果为文本格式,便于命令行操作和脚本处理。
  6. 易用性

    • 提供简单易用的命令行界面,方便用户快速获取所需的安全标识符信息。

PsGetSid 的这些功能使其成为系统管理员、安全专家和网络管理员的实用工具,可用于进行权限管理、安全审计、用户身份验证等操作。

PsGetSid 是一个命令行工具,用于获取 Windows 系统中的安全标识符(SID)信息。以下是 PsGetSid 的专家级应用大纲:

  1. 命令语法: PsGetSid 的命令语法相对简单,通常为 PsGetSid [选项] [目标],其中选项用于指定特定的操作或输出格式,目标用于指定要获取 SID 信息的对象(如计算机名、用户名、组名等)。

  2. 功能选项

    • -h 或 --help:显示帮助信息。
    • -accepteula:接受使用条款。
    • -nobanner:不显示版权信息。
    • -sid:指定要验证的 SID。
  3. 获取计算机 SID: PsGetSid 可以直接用于获取本地计算机的 SID,或者通过指定远程计算机名来获取远程计算机的 SID。

  4. 获取用户/组 SID: 可以通过指定用户名或组名来获取其对应的 SID。支持本地和远程用户/组。

  5. 验证 SID: PsGetSid 允许用户验证指定的 SID 是否有效。

  6. 批量操作: 支持一次性获取多个计算机或多个用户/组的 SID 信息,便于批量处理和管理。

  7. 输出格式

    • PsGetSid 可以将结果输出为文本格式,方便命令行操作和脚本处理。
    • 支持简洁的输出格式,便于快速查看和分析。
  8. 应用场景

    • 系统管理员可以使用 PsGetSid 进行权限管理和安全审计。
    • 安全专家可以用于身份验证和权限检查。
    • 网络管理员可以用于远程管理和批量操作。

PsGetSid 是一个强大的工具,适用于各种系统管理和安全任务,但需要用户对 Windows 系统和 SID 概念有一定的了解。

SID的持久性:Windows系统中,当创建一个新的安全主体(如用户或组)时,该安全主体将被分配一个唯一的SID,并且这个SID在安全主体的整个生命周期中是持久的,不会改变。

总结来说,Windows SID是用于唯一标识和管理安全主体(如用户、组和计算机账户)的标识符。它包括内置管理员组SID、域SID以及用户SID等。通过使用相应的工具和API,我们可以查找、解析和操作SID,以实现身份验证、访问控制和权限管理等功能。


Windows操作系统的不同版本在安全标识符(SID)方面可能会引入不同的功能更新。以下是一些常见的Windows操作系统版本中,关于安全标识符的一些功能更新:

Windows XP:Windows XP引入了更强大的用户和组管理功能。它增强了SID的相关 API,并改进了安全模型。这些改进使得管理员可以更方便地管理用户和组的权限。

Windows Vista:Windows Vista引入了用户账户控制(UAC)功能。UAC通过提供额外的安全保护层来减少恶意软件对系统的影响。SID在UAC的实施中起到重要作用,帮助区分标准用户和管理员用户的权限。

Windows 7:Windows 7进一步优化了UAC,并引入了“提升”功能,允许标准用户在需要时以管理员权限运行特定的程序。这些更改涉及SID的许多方面,包括权限分配和安全标识的验证。

Windows 8/8.1:Windows 8/8.1引入了更多的安全功能,如启动安全(Secure Boot)和限制性应用程序模式(AppContainer)。这些功能通过使用SID来隔离和限制应用程序的权限,从而提供更高的安全性。

Windows 10:Windows 10继续加强了UAC功能,并引入了虚拟化安全(Virtualization-based Security)技术。SID在这些安全功能中发挥重要作用,以确保适当的权限控制和安全隔离。

Windows Server 2003:Windows Server 2003引入了安全描述符(Security Descriptor)和访问控制列表(Access Control List)的增强功能。这些功能通过SID来标识和管理对象的安全性。

Windows Server 2008/2008 R2:Windows Server 2008/2008 R2增加了对角色的更严格访问控制,引入了更多的权限和安全选项。SID用于定义和控制角色的访问权限。

Windows Server 2012/2012 R2:Windows Server 2012/2012 R2引入了动态访问控制(Dynamic Access Control)功能,可以基于属性和标签进行更细粒度的访问控制。SID在这些方案中用于标识和授权。

Windows Server 2016:Windows Server 2016引入了受保护的虚拟机(Shielded VMs)功能,用于提供强大的虚拟机保护。SID被用于标识和隔离受保护的虚拟机的安全上下文。

Windows Server 2019:Windows Server 2019引入了Windows Admin Center,这是一个集中化的管理工具。SID用于控制管理者对不同资源和功能的访问权限。

Windows Server 2022:Windows Server 2022引入了Windows Defender Application Guard for Microsoft Edge,它可以在隔离的容器中运行不受信任的网站和应用程序。SID用于实施容器化安全,并帮助保护主机系统免受恶意软件的攻击。

Windows 11:Windows 11引入了许多新的安全功能,例如Trusted Platform Module(TPM)2.0支持、Windows Hello面部解锁、VBS启动等。SID在这些功能中发挥重要作用,以确保硬件和软件的安全性,并提供更高级别的认证和授权。

值得注意的是,每个新版本的Windows操作系统都可能引入特定的安全增强功能,可能涉及到SID的表示、管理和使用等方面。建议用户在实际使用时参考各个版本的官方文档和更新说明,了解具体的功能更新信息。此外,安全标识符的使用和功能也可能会受到组策略的配置和应用程序开发者的实现方式的影响。


SID(安全标识符)在Windows操作系统中有几种查询方法。以下是其中一些常见的方法:

Windows管理工具:你可以使用Windows的管理工具来查询SID。打开"计算机管理",选择"本地用户和组",然后打开"用户"或"组"文件夹。右键单击相应的用户或组,选择"属性",在"属性"对话框中,你将找到"SAM账户名称(预Windows 2000)"字段,其中包含了SID的值。

命令行工具:在命令提示符或PowerShell中,你可以使用wmic useraccount get name,sid命令来获取已登录用户的SID。该命令将列出所有用户名及其对应的SID。whoami /all

Powershell脚本:你可以使用Powershell编写一个脚本来查询SID。以下是一个示例脚本,用于查询指定用户名的SID:

powershell
$Username = "username"
$User = New-Object System.Security.Principal.NTAccount($Username)
$SID = $User.Translate([System.Security.Principal.SecurityIdentifier]).Value
Write-Host "SID for user '$Username': $SID"
将"username"替换为要查询的用户名,并运行脚本,它将显示指定用户的SID。

注册表编辑器:你可以使用注册表编辑器来查询某个用户或组的SID。打开注册表编辑器(运行"regedit"命令),导航到"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList"键路径。在该路径下,每个用户都有一个以SID命名的子键,通过查看子键的名称即可获取对应用户的SID。

SysInternals工具:SysInternals提供了一些实用工具,如PsGetSid和AccessChk,可以用于查询SID。PsGetSid工具可以直接查询本地或远程系统上用户和组的SID。AccessChk工具可以检查和验证特定对象(如文件、注册表项等)的访问权限,它也可以显示SID。

Windows API:如果你是开发人员,可以使用Windows API来查询SID。Windows提供了一系列API函数,如LookupAccountName和LookupAccountSid,用于查询用户名和SID之间的映射关系。

WMIC命令:另一种使用WMIC命令行工具查询SID的方法是运行以下命令:wmic useraccount where name='username' get sid。将"username"替换为要查询的用户名,它将显示该用户的SID。

Active Directory Users and Computers:如果你在使用Windows Server操作系统,并且在域环境中,可以使用Active Directory Users and Computers(ADUC)管理工具来查询用户或组的SID。打开ADUC,找到对应的用户或组,并选择属性。在属性对话框的"安全"选项卡中,可以找到该用户或组的SID值。

PowerShell Get-ADUser 和 Get-ADGroup:如果你在使用Active Directory环境,并且具备相应的权限,可以使用PowerShell中的Get-ADUser和Get-ADGroup命令来查询用户和组的SID。以下是示例命令:

powershell

查询用户的SID

Get-ADUser -Identity "username" | Select-Object SamAccountName, SID

查询组的SID

Get-ADGroup -Identity "groupname" | Select-Object Name, SID
将"username"替换为要查询的用户名,"groupname"替换为要查询的组名。

PsLoggedOn工具:PsLoggedOn是SysInternals套件中的一个工具,它可以显示已登录到本地或远程系统的用户和其对应的SID。运行以下命令来查询已登录用户的SID:
psloggedon \computername
将"computername"替换为要查询的计算机名称。

Windows PowerShell:你可以使用Windows PowerShell中的Get-PrincipalSID命令查询SID。这是一个自定义的PowerShell函数,它帮助你获取用户名的SID。以下是示例函数:
powershell
function Get-PrincipalSID {
param (
[Parameter(Mandatory=$true)]
[string]$Username
)
$objUser = New-Object System.Security.Principal.NTAccount($Username)
$strSID = $objUser.Translate([System.Security.Principal.SecurityIdentifier]).Value
$strSID
}
你可以调用该函数,并传入要查询的用户名以获取其对应的SID。

Windows API调用:如果你是开发人员,可以使用C++或其他编程语言调用Windows API函数来查询SID。例如,可以使用LookupAccountName或LookupAccountSid函数来查询用户名和SID之间的映射关系。


在 PowerShell 中,您可以使用以下命令来获取特定用户或组的安全标识符(SID):

获取当前用户的SID:

$currentUserSid = [System.Security.Principal.WindowsIdentity]::GetCurrent().User.Value
Write-Host "当前用户的SID为: $currentUserSid"
通过用户名获取SID:

$username = "用户名"
$userSid = (New-Object System.Security.Principal.NTAccount($username)).Translate([System.Security.Principal.SecurityIdentifier]).Value
Write-Host "用户名为 $username 的用户的SID为: $userSid"
通过组名获取SID:

$groupName = "组名"
$groupSid = (New-Object System.Security.Principal.NTAccount($groupName)).Translate([System.Security.Principal.SecurityIdentifier]).Value
Write-Host "组名为 $groupName 的组的SID为: $groupSid"
请注意,在执行这些命令时,您需要以管理员身份运行 PowerShell。

如果您需要获取其他对象的SID,可以按照上述示例,适当修改用户名或组名,以获取相应对象的SID。


还有其他几种获取安全标识符(SID)的方法:

通过用户的登录名获取SID:

$username = "用户名"
$userSid = (Get-ADUser -Identity $username).SID.Value
Write-Host "用户名为 $username 的用户的SID为: $userSid"
请确保您已经安装并导入了 Active Directory 模块(如果您使用的是 Windows Server 系统)。

获取当前用户所属的所有组的SID:

$groupSids = (Get-ADUser -Identity $env:USERNAME).MemberOf | ForEach-Object {
(Get-ADGroup -Identity $_).SID.Value
}
Write-Host "当前用户所属的组的SID为: $groupSids"
这将返回当前用户所属的所有组的SID列表。

通过文件或文件夹的安全描述符获取SID:

$path = "文件或文件夹路径"
$acl = Get-Acl -Path $path
$sids = $acl.Access | Select-Object -ExpandProperty IdentityReference | ForEach-Object {
$_.Translate([System.Security.Principal.SecurityIdentifier]).Value
}
Write-Host "路径 $path 的安全描述符中的SID为: $sids"
这将从指定路径的安全描述符中提取所有授权用户和组的SID。

这些示例展示了一些不同的方式来获取SID,具体取决于您想要获取SID的对象类型和您的环境。

posted @ 2023-06-27 01:46  suv789  阅读(3312)  评论(0编辑  收藏  举报