ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

网络安全入门:Windows用户权限与提权基础详解

网络安全入门:Windows用户权限与提权基础详解

没绕弯子,直接说结论:网络安全入门阶段,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 审计访问过程:从请求到裁决

系统判断你能不能对某个文件做操作时,大致走四条流程:

  1. 进程发起一个“打开文件”的请求,目标对象是D:\work\report.docx。
  2. 系统拿到进程令牌里的用户 SID 和组 SID。
  3. 系统读取文件对象的安全描述符,主要是 DACL。
  4. 按 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 /user

whoami /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 权限这块看起来枯燥,但它真的是后面所有安全技术的承重墙。当你能不假思索地说出“当前用户是什么角色、这个文件对象由谁控制、权限调整后会留下什么痕迹”时,再去看第二阶段的服务加固、事件审计甚至是应急响应,都会顺很多。第一阶段笔记记到这里,后面继续更新。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进