没绕弯子,直接说结论:网络安全入门阶段,Windows用户权限这块是你绕不过去的基础课。很多人刚开始学安全,第一反应就是去啃漏洞、挖弱口令,结果遇到一个提权场景,连当前用户在系统里是什么角色、为什么某些目录能读不能写都说不清楚,后面整个节奏都会被卡住。第一阶段把用户权限吃透,后面看很多问题都会有一种“原来如此”的通透感。
这篇文章是我整理的学习笔记,面向刚起步的人,也适合做运维但一直没系统梳理过权限知识的朋友。我会从账户体系、权限模型、内置组、UAC 到实操排查挨个过一遍,每个环节都配上我能想到的“为什么”,而不是只甩结论。
1. 为什么第一阶段先啃“用户权限”
1.1 权限意识是安全的地基
说句实在话,Windows 世界里的几乎所有安全问题,最终都能收敛到“谁,在什么条件下,能对什么对象做什么操作”这个问题上。权限就是整个问题的答案。管理员账户、普通账户、服务账户、来宾账户,它们在系统里的地位天差地别,而攻击者最想干的事情之一,就是把自己手里的低权限身份“抬”成高权限身份,也就是常说的提权。如果你连高权限和低权限之间那堵墙都看不出来,排查和溯源就无从谈起。
我在带新人时经常打个比方:权限体系好比一栋大楼的门禁系统。普通员工卡只能进自己办公区,保洁卡能进大部分公共区域,安保卡能开设备间,而总控卡能管整套门禁规则。系统被攻破,很多时候不是门锁不够硬,而是某张不该出现在某扇门前的卡,被复制或冒用了。Windows 用户权限,就是这套“门禁”的规则集合。
1.2 提前记住的几个核心概念
为了避免后面看得一头雾水,先把几个基础词过一遍。这些词后面会反复出现:
- 账户:代表一个“身份”,常见的有用户账户、计算机账户、服务账户。
- SID:安全标识符,可以理解成身份的唯一编号,系统内部不认“用户名”,只认 SID。
- 权限:针对某个具体对象(文件、注册表、打印机等)的操作许可。
- 权利(特权):针对系统级操作的身份许可,比如“关闭系统”“更改系统时间”。
- 访问令牌:用户登录后系统发给你的“通行证”,里面带着你的 SID、组 SID 和特权列表。
- DACL/ACE:访问控制列表和访问控制项,文件文件夹权限的具体实现。
这几个词不需要背,但看到它们时脑中要有基本画面。后面每一节都会不断加深这些概念。
2. Windows 用户账户体系全拆解
2.1 账户类型划分:管理员、标准用户、来宾账户
Windows 在图形界面里把本地账户分成三类:Administrator(管理员)、Standard User(标准用户)、Guest(来宾账户)。这三类的核心差异,本质上是“能不能执行影响整个系统的操作”。
管理员账户默认拥有最大权利,可以安装软件、修改系统配置、管理其他用户、加载驱动。需要注意,Windows 内置的 Administrator 账户和“属于 Administrators 组的普通账户”还是有细微区别的,尤其是 UAC 出现之后,内置管理员默认“不受筛选地全权运行”,而组内普通账户即使在管理员组里,日常操作仍然会被 UAC 拦一道。这个细节很多老运维都会忽略。
标准用户的入局门槛低很多,大多数应用(浏览器、Office、微信这类)都能正常跑,但是写系统目录、改注册表、装驱动会被拒绝。加入域环境的办公电脑,日常账号理论上是标准用户,开发调试时再单独用一个管理员账号,这是很标准的安全习惯。
来宾账户默认关闭,开启后也没有密码,主要用于临时借用电脑的人,权限被压得非常狠——不能安装软件,不能浏览其他用户的文档,很多应用甚至无法正常创建数据文件。从安全角度看,它适合“能给外人用但不想放开太多”的场景。
2.2 本地账户与域账户
单机环境下,用户名和密码信息存在本机 SAM 数据库里;域环境下,账户信息和策略集中存储在域控制器上。为什么一提权限就要先说这两者的区别?因为它们的“认证权威”完全不同。本地账户登录时,系统拿 SAM 库的密码哈希来核验,登录成功后只在本机生效。域账户登录时,系统会请求域控制器做认证,然后把这个身份在域内各台机器上通用。
对初学者来说,最需要记住的是:域账户的权限,除了本地组成员关系外,更主要是由域组织单位(OU)、域组策略和域组来控制的。你在大学实验室或公司内网里看到的“一个账号全公司所有电脑都能登录”,几乎都是域账户。
如果你自己搭实验环境,建议先用本地账户练手,把 SID、令牌、内置组这些概念搞明白之后,再引入一台虚拟化域控制器做域环境实验。不要一上来就建域,否则一堆概念叠在一起,反而容易懵。
2.3 SID:身份的唯一编号
用户名只是给人看的,Windows 内部真正用来区分身份的是 SID。SID 的典型形式是S-1-5-21-xxxx-xxxx-xxxx-rid,一长串。前面的S-1-5-21是计算机或域的标识,最后的 RID(相对标识符)决定了账户的“出身”。
比如管理员账户的 RID 是 500,普通来宾账户是 501,新建的第一个管理员组里的账户通常是 1000 起步。这意味着什么?攻击者拿到一台 Windows 机器的权限后,只要看到 SID 以-500结尾,就能判断当前用户是内置 Administrator,很多攻击路径都瞄着这个账户来。
所以,给内置 Administrator 改名并不能从系统层面消除它的 SID,系统内部照样能识别。真要把风险降下去,核心是禁用内置管理员、给日常账号用低权限账户、再对敏感操作启用审计。SID 这个东西,理解它比背它更重要。
3. 权限模型:从登录到访问控制
3.1 访问令牌:你口袋里的通行证
用户登录成功后,系统会生成一个“访问令牌(Access Token)”。它记录了四类关键信息:用户 SID、所属组 SID、特权列表、以及会话信息。之后你打开资源管理器、命令行、记事本,每个进程都会有一份这样的“通行证副本”。
这里有个很容易踩盲区的点:令牌是“开机登录那一刻”生成的,不是每次访问资源时重新生成的。也就是说,你往某个人所在的组里新增了一个成员,那个人已经打开的旧进程不会立刻获得新权限,必须注销重登,新令牌才会带上新组成员身份。实操里经常有人改了组发现“没生效”,其实不是没生效,而是令牌没刷新。
从安全角度看,令牌还有个更深的坑:一个进程的令牌可以带着比当前账户更强的权限。典型场景是“服务进程”,它可能使用服务账户SYSTEM运行,令牌比 Administrators 组还高。很多安全工具和远控木马,目标就是从用户令牌提升到 SYSTEM 令牌,因为这个令牌可以几乎无限制访问系统。这个过程背后涉及的就是令牌操作。
3.2 权限和权利不是一回事
中文里“权限”被用滥了,但在 Windows 术语里,“权限(Permission)”和“权利/特权(Privilege)”是两码事。
权限的对象是“资源”。例如C:\Reports文件夹允许 A 用户修改,这就是一条 DACL 里的 ACE(访问控制项),描述了“谁可以对对象做什么”。文件、文件夹、注册表键、打印机、服务,都有各自的权限列表。
权利/特权的对象是“系统操作”。例如“关闭系统”“绕过遍历检查”“以操作系统方式操作”这些,它们不看文件所有权,而是直接作用于整个系统。每个特权说白了就是一个清单条目,比如SeDebugPrivilege是调试特权,SeTakeOwnershipPrivilege是取得对象所有权特权。
把这两者分开对排查安全问题特别关键。举例来说,一个用户明明是某个文件夹的所有者,却改不了文件名,这通常是“权限”里缺少“修改/删除”ACE;另一个用户不属于任何管理员组,却能安装驱动,那就要查“特权”里是不是被手工授予了SeLoadDriverPrivilege。见到安全事件报告里写“获取了 SeDebugPrivilege”,就该知道这不是普通的 NTFS 权限问题,而是系统级的特权分配出问题了。
3.3 审计访问过程:从请求到裁决
系统判断你能不能对某个文件做操作时,大致走四条流程:
- 进程发起一个“打开文件”的请求,目标对象是
D:\work\report.docx。 - 系统拿到进程令牌里的用户 SID 和组 SID。
- 系统读取文件对象的安全描述符,主要是 DACL。
- 按 ACE 顺序逐条比对:命中“允许”就放行,命中“拒绝”就直接拦截,两条规则都匹配时“拒绝”优先。
我知道这里有个“拦截优先于允许”的反直觉点。很多人以为权限是叠加的、谁最大谁说了算,实际上 DACL 里显式拒绝的规则,会对该用户的所有来源生效,哪怕他同时是管理员组里指定“允许完全控制”的成员也会被拦。排查问题的时候,如果用户发现“我放开 Everyone 权限还是进不去”,先看是不是有一条针对该用户或该组的“拒绝”条目躺在 ACL 里面。
4. 内置组与默认权限的黄金分配
4.1 常见内置组与默认成员
Windows 内置了不少组,每个组预先绑定了指定的权利。一部分组是“拿来直接用”的:
- Administrators:本机最高管理组,拥有系统绝大部分权利。
- Users:普通用户组,登录后能使用大部分应用,不能改动全局设置。
- Guests:来宾组,权限比 Users 更受限。
- Backup Operators:可以绕过常规 ACL 备份和还原文件。
- Remote Desktop Users:允许通过远程桌面登录。
- Network Configuration Operators:可以改网络配置,但不能管用户账户。
- Performance Log Users:可以收集性能日志,常用于监控分析。
- Event Log Readers:只能读日志,适合安全审计人员。
真正在生产环境里,我们应该尽量少地把人塞进 Administrators 组,而是按照“他到底要干什么”去匹配更具体的组。比如只要远程登录权限,就给 Remote Desktop Users;只看日志,给 Event Log Readers;要备份文件,考虑 Backup Operators。
4.2 “管理员”不等于“超级管理员”
这句话可能要讲一整节。内置 Administrator 跟普通管理员组里的用户,虽然都算“高权限身份”,但在 UAC 存在的时代,两者日常会话的特权状态完全不同。
内置 Administrator 登录后默认获得高完整性令牌,也就是说它运行的大多数进程,都带着完整管理特权,UAC 基本不会去筛它。而 Administrators 组的普通用户,登录时拿到的默认令牌是“过滤后的管理令牌”,管理员权限的那部分被暂时摘掉,具体进程要用到管理权限时,会再弹一次 UAC 确认,确认后获得分离出来的高令牌。
这带来一个实际后果:攻击者如果想拿到完全体权限,最省事的路线就是先钓到一套“内置管理员”会话,或者拿到一个能创建服务/替换服务的通道。相比之下,普通管理员账户即使被盗,UAC 多少还能拖一下脚步,系统事件日志里也更容易留下痕迹。初学者理解这个差异,对后续看攻击分析报告非常重要——报告里写“获得管理令牌”和“获得 SYSTEM 令牌”,等级是不同的。
4.3 权限最小化的第一层思考
权限最小化不是把所有人权限开到刚好能干活就完事,而是一个持续筛选的过程。我自己的经验是每次装完系统,先列一个“它必须做的事”清单:
- 这个角色需要访问哪些文件?
- 需要执行哪些系统操作(关机、改网络、装驱动)?
- 需要登录哪些机器?
- 能触碰到哪些敏感数据?
每一项能不给就不给。这不是为了折腾人,而是为了在系统被突破时,尽量延长攻击者横向移动和提权的时间。你多设一道权限墙,攻击者就得额外花时间去发现、绕过,这段时间会产生大量可审计日志。
第一阶段不用搞太复杂,但要建立一个习惯:任何账号、任何组、任何共享路径,都要问一句“为什么需要这个权限”。问不出来的,就不给。
5. UAC:用户账户控制里的门道
5.1 UAC 到底在防什么
UAC(用户账户控制)从 Vista 时代就开始存在,到 Win10/Win11 已经是默认安全机制。很多小白嫌它碍事,把它关掉,反而把系统防御砍掉大半。
UAC 的本质是把“管理员组用户”拆分出两种令牌:登录时获得过滤后的标准令牌,日常进程按标准令牌运行;只有显示需要管理员权限的进程,经过用户确认后才创建高过滤令牌。这样做直接降低了“误运行了带毒安装包但又是管理员账户登录”的风险系数。因为管理员账户平时运行的程序,默认不是高权限,没有权限去改写系统目录和注册表,很多恶意程序想写驱动就会卡住。
关掉 UAC 的操作,等于告诉系统“所有进程永远都拿到完整管理员令牌”,这在安全运维上基本是禁忌级别。尤其在企业环境,安全基线检查报告里一定会把 UAC 状态列为重点项。
5.2 UAC 的四个级别怎么选
UAC 滑块一般有四档,从“始终通知”到“从不通知”,实际影响的是提示时机和桌面切换方式:
- 始终通知:对管理员账户也每次弹窗,提示最频繁,安全性最高。
- 默认档(仅当应用尝试更改我的计算机时通知):管理员日常操作不弹,系统设置和安装程序才弹,日常体验较顺。
- 更高的档位:管理员连改系统配置都会提示。
- 从不通知:实际上是禁用 UAC,风险极高,不建议生产环境使用。
选择依据主要看“这台机器用来干什么”。开发测试机想省事,可以用默认档;生产服务器、运维跳板机、财务/人事电脑,建议选更严格一档。
有个容易被忽略的串联点:UAC 的弹窗确认并不等同于“用户在输入密码”。它只是征得当前人同意,如果当前用户确实是管理员并且点了“是”,进程就直接以高权限运行了。想要“输入管理员账户名密码”才放行,得配合“安全桌面”策略或使用“以其他用户身份运行”的方式。
5.3 安全审计里常查的 UAC 项
如果是在企业做过合规检查,你应该见过这些审计项:
- UAC:以管理员批准模式运行所有管理员。
- UAC:将文件和注册表写入失败虚拟化到每用户位置。
- UAC:检测应用程序安装并提示提升。
- UAC:仅提升已签名并验证的可执行文件。
这几项在本地组策略编辑器里都能看到,路径是“计算机配置→Windows 设置→安全设置→本地策略→安全选项”,用secpol.msc可以打开。逐个确认它们处于“已启用”,基本就说明系统在使用 UAC 的正常保护水平。
学习这个阶段,建议不要只是“打开策略面板看到已启用”就过了,而是想想“如果它被禁用,系统的哪些具体路径会暴露”。多问一个为什么,后面看攻击手法的文章时才能对上号。
6. 实操:给自己的系统做一次权限体检
6.1 查看当前用户与 SID
我建议在干净的虚拟机里做实验,别直接用生产电脑。打开 PowerShell 或者命令提示符,先看看当前身份:
whoami whoami /userwhoami /user会直接输出当前用户的 SID,例如S-1-5-21-1234567890-1234567890-1234567890-1001。看到最后的 RID,就可以对照前面讲过的编号规律,猜测这个账号大概是什么类型。还可以用下面命令列出本机所有本地用户:
net user这里有一句提醒:实验环境随便查,但不要把真实电脑上的用户名、SID 截图到处发。SID 本身不算特别敏感,但配合其他信息可能被用于构造恶意资源引用,这个习惯从学习第一天就应该养成。
6.2 查询组成员与特权
确认自己属于哪些组,用:
whoami /groups输出结果非常多,重点看账户名和 SID 类型。你会发现自己不是只属于一个组,而是多重身份的合集。这个“多重身份”就是令牌里组 SID 的来源。再查当前用户的具体特权:
whoami /priv刚登录的普通管理员会话,输出里的很多特权后面会标注“已禁用”,这正好对应 UAC 条件下过滤令牌的状态。如果你用管理员方式重新打开 PowerShell,再次执行whoami /priv,对比一下,会发现“已禁用”变成了“已启用”。这个对比实验值得做一次,你能直观看到 UAC 对同一账户权限的影响。
6.3 合理调整本地组成员
给某个用户加进管理员组,命令行方式:
net localgroup Administrators 某用户名 /add删除时把/add改成/delete。还有一种更规范的办法是使用lusrmgr.msc图形界面操作,适合不熟悉命令行的人。
这里必须强调:除非是刚装好的测试机,否则不要轻易给日常账号加管理员组。加入管理员组意味着该账户的令牌携带 Administrators 组 SID,一旦这个账户对应的应用被恶意利用,攻击者可以直接用该上下文执行任意管理员操作。
更好的做法是,把管理行为拆到一个单独的管理员账户里,日常写作、聊天、开发就用一个标准用户账户。开发工具需要管理员权限时,用“以管理员身份运行”临时提升,而不是全天候把整个账号泡在管理员组里。
6.4 验证权限配置是否生效
调整完权限后,正确的“验证”不是靠感觉,而是用实际操作为准。比如你给某用户开放了D:\shared的修改权限,那就用该账户登录,尝试在目录里新建一个文件;如果只给了读取权限,就尝试改写既有文件,应该被拒绝。
想观察具体拒绝路径,可以开启“对象访问审计”,在本地安全策略的“审核策略”里启用“审核对象访问”,然后在文件属性→安全→高级→审核里添加对特定用户的审核规则。之后到“事件查看器”的“安全日志”里,就能看到访问请求是被允许还是拒绝。这一步虽然有点繁琐,但对理解 DACL 的生效过程非常有帮助。
审计日志别开着不管,要定期清空和归档,否则日志量大了会撑爆系统盘。如果文件夹路径比较敏感,审计规则的配置也应当遵循最小化原则,只记录高价值对象的操作。
7. 学习路径与常见坑
7.1 建议的第一阶段学习路线
如果你每天只有一小时,我建议按下面节奏走:
- 第 1~2 天:搞清楚账户类型、SID、SAM 数据库、域账户与本地账户区别。
- 第 3~4 天:理解访问令牌、DACL、ACE,配合
whoami做实验。 - 第 5 天:把内置组的默认权利捋一遍,重点看 Administrators、Users、Guests。
- 第 6 天:用 UAC 做对比实验,观察令牌变化。
- 第 7 天:做一次系统权限体检,并给虚拟机里的“标准用户”配置一套合理的文件权限。
不用贪多,能把这七个动作做扎实,第一阶段的“权限认识”目标基本就完成了。
7.2 常见权限问题排查表
我在实操中经常遇到下面几类问题,整理成表,方便你直接对号入座:
| 现象 | 可能原因 | 优先排查路径 |
|---|---|---|
| 普通用户无法运行某软件 | 软件要求写 Program Files 或系统盘某目录 | 检查软件目录 ACL,以及该用户是否有写入权限 |
| 改了用户组不生效 | 令牌没有刷新 | 注销重登,或重启相关进程 |
| 明明加了“允许”权限还是进不去 | 存在拒绝 ACE | 查看 DACL 里的拒绝规则 |
| 共享文件夹能看到但打不开 | 共享权限和 NTFS 权限叠加冲突 | 分别检查共享权限和 NTFS 权限,取限制更严的 |
| 管理员账户一装系统就被“篡改” | 内置 Administrator 被枚举利用 | 禁用内置管理员,改用单独管理员账户 |
| UAC 弹窗偶尔不出现但操作却成功了 | 系统判定该行为是“受信任”的兼容性操作 | 检查 UAC 策略细节项,而不是凭弹窗数量判断 |
| 文件所有者不存在但仍然失败 | 用户 SID 已失效或账户被删 | 用管理员权限接管所有权,再重设 ACL |
7.3 学习中的安全底线
最后说点学习过程中容易忽略的注意事项。
第一,不要拿别人的电脑练手。权限配置、审计开关、注册表改动,这些实验请在虚拟机里做,哪怕是在公司给的测试环境,也要先确认这些机器的归属和容错预期。无授权操作他人系统,这个习惯一旦养成了,会害死人。
第二,不要沉迷于“绕过 UAC”“修改特权”之类的技巧型动作。第一阶段的重点是把“权限体系为什么存在”想清楚。基础不牢,后面看提权攻击链、域渗透报告,每个词都认识但连不成句,那才是真正的时间黑洞。
第三,区分“知识”与“操作”。“知道系统里有个 SeDebugPrivilege”是知识,而“去想办法给自己赋上 SeDebugPrivilege”就是操作了。在实验环境里操作合法,但在真实系统里未经授权去动这些开关,风险自担,该遵守的规矩还是要遵守。
我自己的感受是,Windows 权限这块看起来枯燥,但它真的是后面所有安全技术的承重墙。当你能不假思索地说出“当前用户是什么角色、这个文件对象由谁控制、权限调整后会留下什么痕迹”时,再去看第二阶段的服务加固、事件审计甚至是应急响应,都会顺很多。第一阶段笔记记到这里,后面继续更新。