系统极客一直在努力
专注操作系统及软件使用技能

SID 安全标识符详解:Windows 中的「电子身份证」

Windows 安全

SID 安全标识符Security Identifier)是 Windows 安全架构的基石,也是我们在权限管理时,绕不开的一个话题。

每一个「安全主体」——无论是用户、用户组、计算机还是服务账户,在创建时都会被分配一个「唯一且不可更改」的 SID。和能够随意修改的「用户名」不同,SID 在安全主体的整个生命周期中都保持不变。正是这种不变性,让它成为了 Windows 访问控制的核心。

当你为文件或文件夹分配权限时,系统会将用户账户的 SID 存储在资源的 ACL(访问控制列表)中,而不是直接使用用户名。这样一来,即便你更改了账户名称,已经授予的权限也不会失效。

无论是在企业级的 Active Directory 域环境中,还是个人用户的工作组环境(单机模式),透彻理解 SID 是什么,以及作用都至关重要。

01. SID 是什么:定义与核心概念

1.1 SID 定义

  • 定义:SID 安全标识符是一个变长的「字母 + 数字」字符串,由 Windows 自动分配给每个「安全主体」,包括用户账户、组、服务、以及计算机账户,作为这些对象实体的唯一标识;操作系统在创建账户时,会通过内部算法来生成 SID,并作为所有「安全相关操作」的身份标识。
  • 怎么理解:你可以把它想象成身份证号 🆔。就像在你出生时(创建账户),国家(Windows)会为你分配一个身份证号(SID),这个身份证号会伴随你(安全主体)的一生(生命周期)。等哪一天你「凉了 😂」(删除账户),身份证号就会被注销。(SID 有可能会孤立,后面部分会讲。)

1.2 SID 的核心概念

在 Windows 的安全体系中,SID 是标识身份的最终依据:

  • 当你在文件或文件夹属性中查看和分配「权限」时,会看到像ZhangsanLisi这样的用户名,但这只是给人看的「友好名称」。
  • 实际上,Windows 在 ACL 列表中使用的始终是 SID。

这种「显示名称」与底层「安全标识符」分离的设计带来了几大重要优势:

  1. 账户名可变,权限不变:管理员可以随时更改用户名,但不会影响到已分配的权限。
  2. 新建同名账户不会继承权限:即便你删除账户再新建一个同名账户,新账户也会获得一个全新的 SID,避免了权限「被误继承」。
  3. 更高效的权限判断:系统通过比较 SID(二进制数据)来解析和判断访问权限,比账户名字符串匹配更加高效。

举个例子:张三是一个法外狂徒 🤠🔫,你也叫张三,但却是一个大大的良民 😇。国家在通缉张三时,查的是身份证号,这样就能精确、高效锁定目标,而不是光凭名字大海捞针,更不会抓错人 ✨。

如果你克隆了虚拟机或制作虚拟机模板,必需要使用 sysprep 对 SID 进行清理,以免同一个环境中出现相同 SID 的情况。

02. SID 结构与组成

每一个 SID 都遵循一套标准化的结构,不同的部分清晰地揭示了「安全主体」的来源和身份层级信息。我们以用户 SID 为例,先来看看如何查看 SID。

2.1 如何查看用户 SID

2.1.1 使用 PowerShell 查看

1Windows + R打开「运行」对话框,执行powershell打开 Windows PowerShell 窗口。

2执行以下命令:

  • 查看当前用户 SID
whoami /user
  • 查看指定用户 SID
Get-LocalUser -Name '用户名' | Select-Object Name, SID
  • 查看所有本地用户 SID
Get-LocalUser | Select-Object Name, SID
使用 whoami 命令或 PowerShell 查看用户 SID
使用 whoami 命令或 PowerShell 查看用户 SID

2.1.2 通过注册表查看

1Windows + R打开「运行」对话框,输入regedit并回车,打开注册表编辑器。

2导航到以下路径:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList

3在这个键下,每一个子项的名称就是一个用户的 SID。子项中的ProfileImagePath值,会显示用户配置文件路径,例如:

C:\Users\Administrator
C:\Users\Zhangsan
C:\Users\Lisi

通过注册表查看 SID 和 ProfileImagePath 值

你也可以使用微软 Sysinternals 工具箱中的 psgetsid 命令行工具来查看。

2.2 SID 结构拆解

接下来,我们就以这个 SID 为例,对它的结构和组成进行拆解:

 S-1-5-21-3011682156-2177902651-2876993105-1002
SID 组成部分示例值说明
修订级别S表示这是一个 SID,所有 Windows 的 SID 都以此开头。
标识符颁发机构1表示 NT Authority,是 Windows 的标准颁发机构。
安全颁发机构5指向 NT Authority,负责管理本地和域账户。
域/计算机标识符21-3011682156-2177902651-287699310548-bit 标识符,代表域或本地计算机的 SAM 数据库。
相对标识符(RID)1001在域或本地系统范围内唯一标识安全主体的数字。
SID 的结构
SID 的结构

2.3 RID 的分配模式

Windows 在分配 RID 相对标识符(Relative Identifier)时,遵循着一定的规则:

  • Windows 内置账户:有预定义的 RID,并且在所有 Windows 系统中都保持一致。比如:
内置账户固定 RID
Administrator500
Guest501
Domain Admins512
  • 域用户账户:在 Active Directory 中创建的域用户账户,RID 一般从1000开始。
  • 计算机账户:本地「计算机账户」RID 则 从1001开始。
  • 用户组账户:根据其作用域和类型,在不同范围内获取 RID。

在域环境中,RID 池由 RID Master 批量分配给各 DC,再由 DC 分配给用户和计算机账户。

04. SID 在 Windows 安全体系中的运作机制

Windows 的每一项安全决策背后,其核心都是 SID 在发挥作用。当用户访问某个资源时,系统会通过一系列基于 SID 的操作,来判定其是否具有访问权限。

4.1 权限分配流程

  1. 首先,当管理员为用户或用户组分配权限时,Windows 会立即将账户名称解析为对应的 SID。
  2. 然后,系统会将该 SID 存储在资源的 ACL 列表中,确保权限与「安全主体」绑定,而不依赖于账户名称。

举个例子:当你为用户Zhangsan授予某个文件夹的「读取」权限时:

  1. Windows 会查找Zhangsan的 SID,并在该文件夹的 ACL 列表中添加一条包含该 SID 和「读取」权限的 ACE(访问控制条目)。
  2. 即便日后Zhangsan换了个马甲变成了Lisi,权限也不会变化,因为底层 SID 没变。

ACE 访问控制条目:ACL 中的单项权限记录,指定了某个 SID 对资源「可执行的」操作。

4.2 身份验证与授权流程

Windows 的身份验证过程同样围绕着 SID 解析和 Token 的创建展开:

  1. 用户登录时,LSA(本地安全机构)会验证凭据并确定其 SID。
  2. 系统生成一个「访问 Token」,其中包含了用户的 SID 及其所属组的 SID。这个 Token 会成为该用户在整个会话期间的安全上下文。
  3. 用户尝试访问资源时,系统会将其 Token 中的 SID 与资源 ACL 中的 SID 进行比对。如果匹配且权限足够,访问就会被允许。

4.3 SID 与账户名的解耦

SID 与账户名的分离设计,极大提升了系统管理的灵活性:

  • 管理员可以随时更改账户名,而不会影响权限设置。
  • 避免了将权限与用户名绑定导致的安全隐患。

05. SID 的关键特性与属性

5.1 不可变性与永久性

SID 在所属「安全主体」的整个生命周期中保持不变:

  • 一旦创建,Windows 绝对不会更改 SID,即使账户信息变更或域迁移也是如此。确保了权限、审计日志和安全策略能够长期保持完整性。
  • 如果删除账户并创建同名账户,新账户也会获得全新的 SID,有效避免了权限或安全上下文「被误继承」。

5.2 已知 SID

Windows 为一些常见的内置安全主体预定义了 SID,这些「已知 SID」在所有 Windows 系统中保持一致:

SID安全主体说明
S-1-1-0Everyone 组任何人
S-1-5-32-544Administrators 组内置管理员组
S-1-5-18Local System 账户本地系统账户
S-1-5-7Anonymous Logon匿名登录
S-1-5-11Authenticated Users经过身份验证的用户

在 Active Directory 域中,一些重要的 RID 也固定不变,例如:域管理员的 RID 永远是500,域管理员组的 RID 永远是512。这种统一性极大简化了跨域管理和安全策略部署。

5.3 SID 历史记录属性

Active Directory 提供了一个名为sIDHistory的「SID 历史记录」属性,为账户迁移场景提供了有力支持。

  • 当用户从一个域迁移到另一个域时,原 SID 可以被复制到新账户的sIDHistory属性中。这样一来,用户无需重新分配权限,就可以继续访问原域中的资源。
  • 在域整合或森林重组时,这一功能尤为关键。在过渡期间,可以实现新旧域之间的资源无缝访问,减少管理负担和业务中断。

06. 故障排查与安全考量

SID 相关问题可能引发严重的 Windows 安全与管理挑战,特别是在权限管理和跨域访问中。

6.1 孤立 SID

当一个「安全主体」被删除后,与之对应的 SID 就会变成「孤立 SID」——即不再对应任何账户。

  • 「孤立 SID」可能会残留在 ACL 列表中,显示为「未知账户」及 SID。
  • 虽然这些 SID 不会授予任何人访问权限,但会让权限列表变得杂乱,增加管理难度。
查看资源的「安全」属性列表
查看资源的「安全」属性列表

建议定期审计并清理孤立 SID,维护清晰的权限结构。

6.2 SID 筛选功能

「SID 筛选」功能用于限制哪些 SID 可以跨「信任关系」进行身份验证,在多域环境中,范基于信任的攻击。

  • 配置 SID 筛选后,它会阻止「受信任域」使用其域颁发机构以外的 SID 来验证用户。通过筛选外部 SID,确保用户只能通过合法来源的 SID 登录。
  • 这项安全措施可以有效缓解「SID 历史记录注入」攻击,即恶意将高权限 SID 添加到某个用户的sIDHistory中。

默认情况下:在「外部信任」中,SID 筛选默认启用;在同一林内的信任中,默认禁用。管理员在修改 SID 筛选设置时需谨慎,否则可能会影到响合法的跨域访问。

赞(5)
分享到

评论 抢沙发