大家好,我是你们的技术探险家!上上篇文章中有小伙伴反映对windows访问控制模型不太了解,那么今天我们一起来学习一下这块儿基础内容。
你是否曾双击一个文件,却被一个无情的“拒绝访问”弹窗挡在门外?或者在配置共享文件夹时,被那张密密麻麻的“安全”选项卡搞得晕头转向?
这些日常操作的背后,隐藏着 Windows 安全体系最核心、最精妙的机制——访问控制模型 (Access Control Model)。它就像一个极其严谨的安保系统,在电光火石之间,精确地判断“你是谁”、“你想做什么”以及“你是否有权这么做”。
今天,就让我们一起深入这座“安全城堡”的心脏,揭开这套系统神秘的面纱。
🔑 第一部分:“你是谁?”—— 安全主体与它们的“身份证”(SID)
在 Windows 的世界里,能被授予权限的任何实体,无论是用户账户、用户组还是计算机账户,都被称为 安全主体 (Security Principal)。
而每个安全主体都拥有一个独一无二、终身不变的“身份证号码”,这就是 SID (Security Identifier)。
-
SID 是什么?
它是一串类似
S-1-5-21-xxxxxxxxxx-yyyyyyyyyy-zzzzzzzzzz-1001
的字符串。你的用户名“张三”可以改成“李四”,但你的 SID 永远不会变。Windows 在进行权限判断时,只认 SID,不认用户名。 -
为什么重要?
这保证了身份的唯一性。即使你删除了一个叫
test
的用户,然后又创建了一个同名的test
用户,它们的 SID 也绝不相同。系统不会把新用户误认为是旧用户。 -
一些著名的 SID:
-
S-1-5-18
: 代表 Local System (系统自身),拥有极高权限。 -
S-1-1-0
: 代表 Everyone (所有人),一个需要被高度警惕的身份。
🎟️ 第二部分:“你能去哪?”—— 访问令牌 (Access Token) 的奥秘
当你成功登录系统后,Windows 不会让你拿着永久的“身份证”(SID) 到处跑。相反,它会为你生成一个临时的“门禁卡”或“通行证”,这就是 访问令牌 (Access Token)。
-
它是如何生成的?
在你输入密码通过验证的那一刻,系统中的 LSA (Local Security Authority) 进程会为你创建一个访问令牌。之后,你启动的每一个程序,都会自动佩戴上这个令牌的副本。
-
令牌里有什么?
这张“通行证”上写满了关于你身份的关键信息:
-
你的用户 SID:证明你是谁。 -
你所属的所有组的 SID:这是关键!它列出了你是“管理员组”、“财务组”、“研发组”等所有家庭/团队的成员。 -
用户特权 (Privileges):列出了你能执行的特殊系统级操作,比如 SeShutdownPrivilege
(关机权限)。 -
其他安全上下文信息...
核心概念:当你尝试访问一个文件时,你并不是直接出示你的“身份证”(SID),而是把你身上佩戴的这张包含了你所有身份信息(用户SID、组SID等)的**“通行证”(Access Token)**递给门口的“保安”。
📜 第三部分:“规则是什么?”—— 安全描述符与访问控制列表 (ACL)
现在,我们来到了“门口”。每一个需要被保护的 Windows 对象(文件、文件夹、注册表项、打印机等)都自带一个“保安”和一本“规则手册”,这套东西合称为 安全描述符 (Security Descriptor)。
安全描述符主要包含两本重要的“名单”:
-
DACL (Discretionary Access Control List) - 自主访问控制列表
-
这是决定“是否放行”的核心。它就是那本详细的“访客规则手册”。 -
手册里写满了一条条的规则,每一条规则被称为一个 ACE (Access Control Entry)。 -
SACL (System Access Control List) - 系统访问控制列表
-
这不是用来控制访问的,而是**“审计规则手册”**。 -
它定义了当某些人对这个文件做了某些事(比如“张三删除了它”),是否需要在系统的安全日志里记上一笔,供管理员事后审查。
ACE:规则手册里的每一行
每个 ACE 都非常明确,格式为:“[允许/拒绝] [某个SID] 进行 [某种操作]”。
-
例如: -
Allow SID(张三) Read
(允许张三读取) -
Deny SID(访客组) Write
(拒绝访客组写入) -
Allow SID(管理员组) FullControl
(允许管理员组完全控制)
👮♂️ 第四部分:“最终审判”—— 完整的访问检查流程
好了,所有角色都已登场。现在,让我们把整个流程串起来,看看当你双击一个文件时,Windows 是如何决定你的命运的。
场景:用户 Alice
(属于 Users
组) 尝试写入report.docx
文件。
-
【出示通行证】
Alice
的程序代表她,向操作系统内核请求写入report.docx
。程序同时递上了Alice
的访问令牌 (Access Token)。这个令牌上清晰地写着:“我是Alice
(SID: ...-1001),我也是Users
组 (SID: ...-545) 的成员”。 -
【保安审查规则】内核的安全引用监视器 (SRM) 拦下了这个请求。它找到了
report.docx
文件的安全描述符,并开始翻阅里面的 DACL (规则手册)。 -
【逐条比对规则】SRM 会从上到下,逐一检查 DACL 中的每一条 ACE 规则:
-
如果没有匹配的“拒绝”规则,SRM 会继续查找“允许”规则。 -
它会把所有与 Alice
的令牌 SID 匹配的Allow
规则都累加起来。 -
比如,它找到一条 Allow SID(Users组) Read
,又找到一条Allow SID(Alice) Write
。那么Alice
的累加权限就是“读”和“写”。 -
SRM 会查看 ACE 中的 SID,是否与 Alice
的访问令牌中的任何一个 SID (她的用户 SID 或她所属的任何组的 SID) 匹配。 -
如果找到一条匹配的 Deny Write
(拒绝写入) 规则,审查立即结束,访问被拒绝! -
首先,检查所有“拒绝”规则。
-
然后,检查所有“允许”规则。
-
【做出判决】
-
在检查完所有 ACE 后,SRM 将 Alice
累加得到的“允许权限”与她最初请求的“写入权限”进行比较。 -
因为累加权限中包含了“写入”,所以请求通过,访问被允许。 -
如果在检查完整个 DACL 后,仍然没有找到足够的 Allow
权限来满足请求,那么访问将同样被拒绝。
黄金法则总结:
“拒绝”拥有最高优先权,一票否决。 “允许”权限可以累加。 没有明确允许,就是隐式拒绝。
结语
从“你是谁”(SID),到“你有什么凭证”(Access Token),再到“规则是什么”(ACL/ACE),最后到“如何裁决”,这一整套精密的访问控制模型,构成了 Windows 安全的坚固心脏。
理解了这个过程,你下次再遇到“拒绝访问”时,就不会再感到困惑。你将能像一名真正的系统管理员一样,清晰地分析出问题所在:是用户的组身份不够?还是文件夹的 ACL 规则设置有误?或是被一条隐藏的“拒绝”规则挡住了去路?
掌握了它,你就掌握了 Windows 世界中最核心的“权力游戏”规则。
原文始发于微信公众号(格格巫和蓝精灵):Windows安全的心脏:揭秘访问控制模型如何决定“谁能动我的奶酪”
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论