加入收藏 | 设为首页 | 会员中心 | 我要投稿 站长网 (https://www.028zz.cn/)- 科技、云开发、数据分析、内容创作、业务安全!
当前位置: 首页 > 服务器 > 搭建环境 > Windows > 正文

IIS权限总出错?5大安全盲区90%管理员中招

发布时间:2026-11-04 14:18:02 所属栏目:Windows 来源:DaWei
导读:  我原以为是代码逻辑改崩了,结果查到凌晨两点,发现 ApplicationPoolIdentity 对 wwwroot 里那个二级子目录压根没读权限——去年十月份上线前两小时,李磊在测试机上狂点“发布失败”,白板上的数字擦了一半,只剩个“7”

  我原以为是代码逻辑改崩了,结果查到凌晨两点,发现 ApplicationPoolIdentity 对 wwwroot 里那个二级子目录压根没读权限——去年十月份上线前两小时,李磊在测试机上狂点“发布失败”,白板上的数字擦了一半,只剩个“7”斜着杵在那儿。


  会议室又被占了,我们蹲在茶水间改配置。张工拿U盘拷IIS日志的时候,键盘上有个键按下去不回弹,R键,他每打一个rule就顿一下,后面干脆直接输“ule”。王薇站旁边啃冷掉的饭团,外卖凉透了,她一边嚼一边念:System.UnauthorizedAccessException: 对路径“D:\\site\\bin\\temp”的访问被拒绝。我说这不对啊,bin 下面哪来的 temp?她指了指部署脚本里一行注释都没加的 mkdir -p ./bin/temp。哦对,这个临时写缓存的目录,连部署清单都没列进去。


文章配图,仅供参考

  你记得那个漏测的 case 吗?就是用户上传 Excel 解析后,异步写入日志文件那块,本地能跑,测试环境也过了,线上第一次灰度就崩。不是代码问题,是 IIS_IUSRS 组根本没被加进 D:\\logs 这个盘符的 ACL 列表里——没人记得这盘是后来挂的,也没人动过它的父目录继承开关。开发说:“我只管代码能执行”,运维说:“我只管端口通不通”,中间那块裸露的权限缝,全是手填的 web.config 和手点的 IIS 管理器补丁堆出来的。


  优胜劣汰。这话我去年十月份之后才真正信。不是说谁能力差,是真有人扛不住——你让一个人盯八套环境的 app pool 身份、匿名认证开关、请求过滤规则、静态文件处理程序、物理路径授权这五块叠在一起的状态组合,还要求他每次发版前都手工 check,不如直接让他手动给每个 .dll 签个时间戳。现在回头看,90% 中招的不是不懂,是没时间校验。王薇上个月刚提单,说某后台接口返回 401 但前端报 500,追下去发现只是某个新分支里多加了 却忘了同步更新对应站点的 windows 验证模式。这种事没法用覆盖率衡量。我记不清是哪个迭代了,反正那个数……大概那个数。


  李磊桌上摆着三台手机,一台连测试服务器,一台连钉钉预警群,一台连家里视频通话,小孩正哭着找爸爸。他一边调 appcmd list apppool 命令一边说:“我宁可它炸一次,也不愿它每天半夜静默降权。”——静默降权才是最狠的。IIS 不报错,只默默跳过某些模块加载;不打日志,只在 EventLog 里留一行“Application ‘xxx’ has shut down”;连回收阈值都配错了,但它偏偏还能撑三天,直到某个用户点了那个触发 FileIOPermission 的按钮。


  用例管理工具一直在转圈。我切过去看,进度条卡在 87%,后台还在等 Jenkins 的 API 回调。这工具我用了三年,从来没一次完整跑完过所有冒烟用例,但它每次都在“马上就好”状态里维持着质量幻觉。我们甚至给它起了外号叫“永动机”。张工试过重装插件,王薇建议换浏览器,最后大家统一改成 Chrome 无痕窗口点右键刷新——居然真好了。没人敢问为什么。我原以为是证书问题,结果是本地时间比 NTP 服务器快了 23 秒,JWT 校验过期判定失效了……但这跟权限有屁关系。不相关的事我也爱讲。


  五个盲区?第一个是 ApplicationPoolIdentity 默认权限范围,永远比文档写的窄;第二个是磁盘级 ACL 继承开关关了,你还以为父目录改了子目录自动同步;第三个是 web.config 里的 其实绕过了站点级授权,但很多人以为只要站点开了 Windows 身份验证,底下全跟着开;第四个是部署脚本里 chmod +x 习惯性甩给 Linux,却忘了 IIS 下要的是 icacls.exe;第五个……算了,第五个我不说了,反正上周三我们又栽在同一类 issue 上,还是那个 temp 目录。但这次不是权限,是磁盘满了,日志写崩了,刚好把 errorPage 重定向也一起吞掉了。所以你以为 403 是权限问题,其实是 507 报成了 403。


  测试机的充电线不够长,我们把它从桌下拖到地上接排插,电源适配器压着网线,中间断连过三次。断连时所有 HTTP 代理都卡住,包括 Fiddler。那天下午所有复现步骤都失效了,因为根本收不到 request header。但没人想到是物理层——张工还在重装 URL Rewrite 模块,王薇在翻旧版 web.config 的 backup。最后我蹲着把线拔出来重插,Fiddler 就活了。它活着的时候报 401,死的时候报 timeout,中间没过渡,像人断气一样突然。


  我现在不写权限用例了。写了也没人看。那份用例自己搁在我本地 Git 分支里两年了,commit message 写着“补全 IIS 7-10 版本下各种身份模型的 ACL 状态矩阵”,push 记录显示 2022 年 11 月 3 日,再没 merge 过。上周五晨会,产品问“这个导出功能什么时候能灰度”,我直接说:“得先让运维确认 D:\\export 是否允许 NETWORK SERVICE 创建子目录”,全场安静两秒,然后张工打开远程桌面开始截图操作。没人问为啥之前没确认。大家默认:只要不崩,就是没问题。


  下一步?我打算下周抽一天,把全部部署脚本里的 icacls 命令全拎出来,一条一条手动 run 一遍,在每台机器上 echo 出当前目录的 effective permissions,扔进 Excel。不自动化,就手动。王薇说太原始,我说原始才压得住——自动化脚本本身就得有权限去读权限,这不是循环依赖么。李磊点头,他 R 键还是卡着,但已经不敲了,直接粘贴。

(编辑:站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!