Windows站点权限整合:一次配置,全域生效
|
跟产品吵的那天是去年8月份,下午三点,空调出风口直吹我后颈,冻得我缩着脖子在白板前划权限树——结果他伸手就把“继承”那个勾给取消了。我盯着他指甲盖上那点反光,说你再点一次试试,他真点了,还笑着问“这不就解耦了嘛”。解耦?解耦之后前端半夜发 Slack 问我为什么 /api/user/me 返回 403,而 /api/v2/user/me 却能过——俩 endpoint 共用同一套 AD 组策略,差就差在 IIS 应用池里一个开了“Windows 身份验证”,另一个没开。我敢打包票,就这一个开关,卡住过至少七次上线。 Lighthouse 跑分截图发到群里没人回,PM 在那刷钉钉未读数,桌面那个没关的录屏还在录,声音很小,但能听见后端在隔壁工位吼“你那个 header 里 Authorization 写错格式了”。我原以为是 Kerberos 票据缓存问题,结果抓包一看,客户端压根没发 Negotiate 头——它连尝试都没尝试。原因?Web.config 里 `` 下面少了一行 ``,少了这行,IIS 就当它是个匿名请求塞给 ASP.NET,后面所有角色检查全失效。你说搞笑不搞笑,整套权限链路从 AD 到 NTFS 到 web.config 到 .NET 的 Principal,就卡在这一行字上,像一根头发丝堵住整个下水道。 首屏救火那会儿,CDN 账单刚下来,峰值带宽涨了三百七十二 KB/s,运维查了两小时,最后发现是某台旧 Windows Server 的 IIS 日志写爆了磁盘,导致 Windows Event Log 服务假死,进而触发 AppPool 自动回收——回收瞬间用户 session 全丢,前端 JS 疯狂重试登录,请求打满 W3SVC,带宽就上去了。没人去倒水,我就记得对面工程师换了一根充电线,黑色编织线,雷电四口,插上去时笔记本风扇突然转快了半拍。这跟权限整合有半毛钱关系?没有。但它就是发生了,而且就在我调通 NTFS 继承的时候发生的。 优胜劣汰?对,这个词我没写错。不是“平滑过渡”,不是“灰度升级”,是优胜劣汰。去年八月那批老站点,有十七个还挂着自定义 ISAPI 筛选器做身份中转,其中一个用了三年没更新的 NTLM 代理模块,跑着跑着会把 `HTTP_AUTHORIZATION` 拆成两段传给后端,后端一解析就报空指针——这种玩意儿不是改配置能救的,是必须删。删掉那一刻,AD 组策略才真正开始说话。剩下那八个站点,全都走统一的 `` 段落 + 同一套 `` 规则 + 相同的 `applicationHost.config` 全局重写。这个我敢打包票:只要顶层的 applicationHost.config 里 `system.webServer/security/authentication/windowsAuthentication` 开着,下头所有子站点,不管绑几个域名、几个 IP、几套 DNS CNAME,全都认这个。不是“理论上”,是实测,是线上扛住了三轮黑五流量突增——没翻车。
文章配图,仅供参考 但有一个我说不准:为啥每次用 IIS Manager 批量应用权限,总会漏掉一个 Application Pool Identity 的 ACL 条目?手动加就没事,PowerShell 加就大概率失败,而 GUI 批量操作日志里只显示 “Completed successfully”,连个 warning 都没有。我试过重启 WAS,试过清除 configCache,试过在凌晨两点单独跑一次,结果还是漏——偏偏就是那个被 PM 强行加进去的临时测试子域,它的物理路径在 D:\\temp\\test-legacy,ACL 总少一个 IIS_IUSRS 的读取权限。后来是前端自己发现的,他在本地起了个 http-server 测试静态资源,顺手拖了 index.html 过去,结果页面空白,F12 看 network tab 显示 500,点开看 response body 是“无法读取 web.config”,他截图发来的时候,我还以为是他自己删了文件……KPI 折算这事我懒得算了。我们组上季度 SLA 算的是 99.97%,但其实有十八毫秒的响应毛刺根本没计入,因为监控埋点没覆盖到 NTFS 权限校验那一层。谁管呢?没人管。只要页面能出来,状态码是 200,APM 就算它稳。可你知道最讽刺的是啥?我们那个统一权限配置模板,上线前内部测试用的是 Chrome 最新版+Win11,默认启用 WebAuthn;结果灰度放出去第一天,有客户反馈 IE11 下登录页无限跳转——查了半小时,才发现是因为我们模板里默认启用了 ``,IE11 解析失败直接崩掉整个认证流程。这跟“一次配置全域生效”有关系吗?没有。但它就发生在全域生效的第三个小时。 我现在桌上还留着一张纸,铅笔写的:“不要信任何‘自动继承’,除非你亲手看到 event log 里 ID 529 不再报错”。这不是原则,是疤。上周五我让后端把他们新 API 的 `web.config` 里 authorization 部分全删了,换成 global web.config 统一配——他照做了,但忘了改 applicationHost.config 的 ``,结果所有接口变成 401。他来问我,我让他先去楼下倒杯水,回来再说。水还没倒完,他自己看见 error log 里写着 “No authentication methods configured”,然后默默去改了。这事现在想来无所谓,真无所谓。 所以别再搞什么“分阶段灰度配置”了。要么全切,要么全不动。上次我让 QA 同时测五个环境的登录态透传,她测到第三个就放弃,说“反正都一样”。她说得对,真的都一样——一样的配置,一样的缺陷,一样的补丁,一样的人坐在那儿等重启。我现在要做的事,是把手头这七个还没进统一配置库的遗留站点,今晚十点前全部迁过去。如果中途遇到某个站点的物理路径用了符号链接,那我可能得先杀掉那个正在同步 Git LFS 的进程。它占了两个 CPU 核,风扇响得像直升机降落。 (编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


Linux与Windows服务器选型的5大性能陷阱
Windows服务器站点搭建:权限配置一步到位
Windows多媒体站点权限配置:9年容器运维工程师的一键落地方案
Windows站点搭建总踩坑?5步权限配置法一次到位
Windows站点环境搭建的3个致命安全断点
Windows运行库高效管理:打造稳定开发环境
Windows数据科学环境搭建:7年用户访谈总结的避坑与高效配置