第 30 讲:排障案例集
第 30 讲:排障案例集
卷五·排障与设计(共 3 讲,本卷收官)
师生对话实录课:AI 当老师、我当 0 基础学生。这一讲不讲新机制,讲怎么把症状对到那一层——而且每个案例都能回指本系列亲手踩过的现场。官方锚点:How DACLs Control Access。
开场:用户只甩给你一句「打不开」
🧑🏫 老师:
前面几卷把模型一层层搭起来了:令牌、SID、DACL、继承、共享、有效访问。可真到现场,用户只说「打不开」。到底哪一层在拦?一次资源访问要穿过四道关,被任何一道挡下都是「拒绝访问」:
- 令牌层——这次登录带了哪些 SID?刚加的组生效了吗?被 UAC 滤掉了?
- 共享层——只有 UNC 路径才走,看共享权限;
- DACL 层——ACL 里有没有对应的 Allow、有没有 Deny;
- 继承层——这层 ACL 哪来的?新建文件为什么拿到了奇怪的权限?
被拒先问三件事:令牌带了啥、哪条 ACE 拦的、共享有没有又设一道。
案例一:本机能开,UNC 打不开(共享层)
现象:服务器上 D:\share\report.xlsx 双击就开;客户端 \\server\share\report.xlsx 拒绝访问。
先查什么:网络访问要同时过共享权限和 NTFS 权限,取交集——本机不走共享那道,本地能开不代表共享侧放行。net share share 或 Get-SmbShareAccess 看共享侧:共享只给「读取」、NTFS 给「修改」,最终只能读。
本机 ≠ 网络。UNC 多一道共享门,二者取交集。——第 28 讲刚在 ProjLib 上演过完整版:共享门 Everyone Full、NTFS 分级,两道各司其职;反过来共享门卡「读取」时,盯着 NTFS 的
(F)看半天也找不出毛病。
案例二:进组了,还是进不去(令牌层)
现象:早上 9 点把你加进「财务系统用户」域组,你立刻去开系统,拒绝。
先查什么:组 SID 是登录时写进令牌的,令牌挂在进程上、登录期间不变——你现在的进程还是早上 8 点那份旧令牌,没有新组的 SID:
whoami /groups | findstr 财务
(没输出 = 令牌里没这条)注销重登再查就有了。
令牌是登录时的快照。改组成员,得换一份新令牌。——本系列第 8 讲做过加强版实证:新建组、把我自己加进去、名册里确实有我,
whoami /groups查无此组(RID 1014 那次)。域账户的进组同理,还得连上域控重新登。
案例三:有效访问说「允许」,实际还是被拒(令牌层·UAC)
现象:有效访问面板算出「允许」,用户就是打不开;两个窗口 whoami 同一账号,一个能改 C:\ 一个不能。
先查什么:UAC 的滤令牌在作怪——同一个号,普通窗口里 Administrators 被标成「仅拒绝的组(deny only)」,「以管理员身份运行」的窗口里才是「启用的组」。whoami(不带参数)两窗完全相同——差别藏在 /groups、/priv 里。有效访问面板常在管理员上下文算,相当于用提升后的令牌,自然和用户的受限令牌对不上。
——第 22 讲全讲过这台机器上的对照(含 UAC 关闭时两窗必相同的「翻车 B」活标本)。排障口诀:别看
/user,看/groups的组属性和/priv。
案例四:继承断了,新建文件权限「飞了」(继承层)
现象:某文件夹被前任管理员关了继承、手工设过 ACL。之后新建的文件权限要么空的、要么继承到奇怪的东西。
先查什么:看那条 ACE 的继承标志 CI/OI 对不对:
D:\project NT AUTHORITY\SYSTEM:(OI)(CI)(F)
DOMAIN\project-rw:(OI)(CI)(M)
DOMAIN\project-admin:(CI)(F) ← 只有 CI 没有 OI!第三行只有 (CI)(往子文件夹传)没有 (OI)(往子文件传)——新建的 .xlsx 拿不到这条,project-admin 在新文件上「消失」了。修法:补 (OI) 或重开继承。
——第 12 讲 Lab03 就是这个案例的实验版:
(CI)RX授权后,「文件夹链有我的行、文件完全没有」——CI-only 对文件不生效,当场可见。断继承的手工 ACL 不会自动往下传,改之前先看 OI/CI。
案例五:迁移后新账号莫名被拒(令牌层·sIDHistory)
现象:域迁移后,新账号访问老资源莫名被拒,老账号倒能开。
先查什么:迁移靠 sIDHistory 把老 SID 带进新令牌;某条 ACE 若写的是老域的 SID、而新账号的 history 没配全,令牌里就没这个 SID、匹配不上。对比两边:whoami /groups /fo list(自己令牌里的 SID)vs icacls(资源 ACE 里的 SID),对不上就是 history 漏了——去迁移工具或 AD 侧补。
——第 2 讲讲透了这个机制的攻与防(「身份软链接」+ 注入攻击面)。这也是排障时 SID 比名字可靠的又一例:解析不出名字的裸 SID(第 8 讲「失效 SID」)+ history 缺失,是迁移事故的经典组合。
通用三步法(一键脚本)
不管哪个案例,排查都走这三步——令牌、ACL、共享:
:: a.bat <路径> [共享名]
@echo off
echo === 1. 令牌 ===
whoami /all
echo === 2. ACL ===
icacls "%~1"
echo === 3. 共享(UNC 才需要)===
net share %~2 2>nul- 令牌:
whoami /all——SID、组、权利;重点对比「你以为是」和「实际是」; - ACL:
icacls <路径>——Allow 还是 Deny、继承标志对不对; - 共享:
net share/Get-SmbShareAccess/ 属性 → 共享选项卡。
第 29 讲的四步流水线(改→算→试→UNC)是这套三步法的验收版;案例二、三这类「流水线也解释不了」的,再往下拆到令牌层——分层排查,每层有自己的命令。
收束
你现在会了: 把「打不开」拆成令牌、共享、DACL、继承四层来查;五个常见症状各对应哪一层(且每个都在本系列有亲手实验打底);为什么有效访问会骗人、为什么进组不生效、为什么同号两窗权限不同。
下一卷才需要: 这些排障都还在命令行手动做。真到 .NET 程序里,这套身份是怎么被代码表达和使用的——卷六开讲 .NET 身份。
← 上一章:第 29 讲:有效权限实战
· 回书稿索引
→ 下一章:第 31 讲:.NET 身份