Windows站点搭建总踩坑?5步权限配置法一次到位
|
文章配图,仅供参考 去年十月,改版上线翻车——不是功能崩,是 IIS 启动三秒后直接吐出 500.19,Event Viewer 里连个像样的错误码都不给,就一行红字:“配置文件无法读取”。PM 在 Slack 里敲了十七个问号,我盯着屏幕左下角那个 Chrome DevTools 还卡在 Network tab 上,没切回来。桌右屏壁纸是三年前去京都拍的鸭川石阶,现在全灰了,光标悬停在 F5 键上三秒,没按下去。我原以为又是 web.config 编码问题,结果发现 applicationHost.config 居然被标记为“只读”,但属性面板里根本没勾——是 NTFS 权限把“写入”砍了,还顺手带走了“修改权限”这个继承位。Windows 就这德行:它不报错,它假装你没看见。后端老陈推门塞进一罐冰美式,罐底水珠顺着我键盘左下角 ESC 键往下淌,卡了一下,再按就没反应。我用鼠标点开属性,又点安全,又点高级,再点“禁用继承”……操,点错了,弹窗问我“是否复制权限?”,我手快点了“是”,结果整个 inetpub 目录下的所有子目录瞬间丢了 SYSTEM 的完全控制权。那个晚上我删了四百三十二个手动加的 ACE 条目,全靠 Ctrl+Z 撑着没 reboot 服务器。 五步权限配置法?对,就五个动作。第一步:把你站点物理路径(比如 D:\\wwwroot\\prod)的所有者强行改成 IIS_IUSRS(不是 Administrators,不是 Users,就是 IIS_IUSRS);第二步:把 IIS_IUSRS 设为该目录的“完全控制”,别犹豫,别留情,别信什么最小权限原则——IIS 在 Windows 上跑就是需要完全控制,不信你查它的匿名标识符怎么提权;第三步:进 applicationHost.config 里找到 块,确认里面的 里 anonymousAuthentication 已启用,且 userName 是空——这时候它才真用 IIS_IUSRS;第四步:在 web.config 里加一行 ,别管文档说这是 deprecated,它现在仍是绕过 AppPool Identity 和 IIS_IUSRS 权限撕扯的唯一缝合线;第五步:进 IIS 管理器,选中应用池 → 高级设置 → “标识”改成“ApplicationPoolIdentity”,然后点“回收”——不是重启,是回收,回收完再看 Event Viewer 有没有 50021 警告。这个我敢打包票:只要前面四步做完,第五步必过。别的我不敢说,但回收那一下,F5 前抬手、按键、松手,三帧延迟,比敲 git commit -m "fix: wtf" 还顺。 旁边测试小妹端着保温杯去倒水,路过我工位时说:“你上次说‘Linux 不会这么搞人’,结果你们 dev 环境上周在 WSL2 里跑反向代理崩了三次。”我嗯了一声,她走后我才想起来,我压根没跟她说过那句话——我说的是去年五月,GitLab CI runner 在 Windows Server 2022 上随机 timeout,最后发现是 Hyper-V 时间同步机制跟 Docker Desktop 的 WSL2 内核冲突。算了,不重要。我键盘空格键上那层油膜昨天刚擦掉,今天又泛光。外卖汤洒了一滴在笔记本 USB-C 接口附近,没渗进去,但风扇声大了两分贝。 优胜劣汰?对。不是技术优胜,是忍耐力优胜。你见过多少人在凌晨两点还在反复右键→属性→安全→编辑→添加→输入 IIS_IUSRS→检查“完全控制”→点确定→弹窗提示“某些权限无法应用”→点击“继续”→弹窗再问“是否替换子容器和对象的所有者”→点是→等三十秒→刷新 IIS 管理器→看日志→再崩?这过程本身就是筛选器。能撑过五轮的,要么转管理了,要么开始写内部 Wiki 了,剩下没走的,基本都学会把 applicationHost.config 备份成 .bak1 .bak2 .bak3……直到 .bak18。我不是夸这方法多优雅,我是说它不挑人:运维不懂 Web API 版本绑定,前端分不清 AppPool 和 Worker Process,都能照着点完。但你要指望它解决 CORS?别逗了,那得配 URL Rewrite 模块,而那模块装完第一件事就是把你的 ARR 规则全冲成乱码。我试过三次,最后一次是在公司茶水间用手机热点连服务器,就为了确认是不是代理策略捣鬼——结果不是,是 IE 兼容模式被策略组默认锁死了,连 Chrome 用 IE mode 打开也会跪。我说不准这算不算“权限问题”,反正 Event Viewer 里它归在 “WWW Service/Configuration” 日志分类下,标题叫“Failed to load configuration section”,而它真正想说的是:“老子受够了。” PR review 里我写了句 “this fix violates every SRE best practice I’ve ever read”,但 merge request 里还是点了 approve。为什么?因为测试当天上午八点四十,PM 在站会上拿着平板划拉原型图,说“用户登录态要跨域保持”,没人问怎么跨,也没人问为什么不用 OIDC。我看着自己写的那段 web.config 中 里硬塞的 Access-Control-Allow-Origin="",突然想起上个月工资条备注栏写着“区块链专项津贴(试运行期)”,金额后面跟着括号:“含 Windows 服务器运维补贴”。 现在我每天上班第一件事,是打开 PowerShell,执行一句 get-acl 'D:\\wwwroot\\prod' | fl。不是检查,是仪式。就像矿工进巷前摸帽灯。我知道它不会变——只要没人动 ACL,只要没人误点“重置为继承”,只要没人把 C:\\Windows\\System32\\inetsrv\\config\\schema\\ 下某个 .xml 文件里的 defaultAllow="false" 改成 true 然后忘记 revert……但我还是敲一遍。F5 键现在不卡了,ESC 键也清干净了。你要是今晚也要上线,先去查查 applicationHost.config 里 这行,是不是还套着 ——没有就加,加完记得 iisreset /noforce。我不保证它起作用,但至少……比等 PM 第十八个问号强一点。 (编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


Windows多媒体站点搭建:5年运维总结的权限配置速成法
Windows站点环境搭建的3个致命安全断点
Windows数据科学环境搭建:9年避坑与高效配置实战
Windows运行库高效管理:16年SEO工程师的稳定开发环境构建术