加入收藏 | 设为首页 | 会员中心 | 我要投稿 站长网 (https://www.1461.cn/)- 应用程序、AI行业应用、CDN、低代码、区块链!
当前位置: 首页 > 服务器 > 搭建环境 > Windows > 正文

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

发布时间:2026-11-03 08:10:13 所属栏目:Windows 来源:DaWei
导读:  跟老板拍桌子。  上周三下午三点,我刚把IIS站点权限配置完,PM冲进来问“能不能先切灰度”,我说“等我把AppPool Identity从LocalSystem切回ApplicationPoolIdentity”,他手一挥说“直接用NetworkService跑也行”,我

  跟老板拍桌子。


  上周三下午三点,我刚把IIS站点权限配置完,PM冲进来问“能不能先切灰度”,我说“等我把AppPool Identity从LocalSystem切回ApplicationPoolIdentity”,他手一挥说“直接用NetworkService跑也行”,我点头说好——结果两小时后监控告警炸了,错误日志里全是你懂的那串0x80070005。我盯着屏幕看了十七秒,没动。桌面那个没关的录屏还在跑,鼠标悬停在“停止录制”按钮上,但光标抖了一下,又移开了。


  这个我敢打包票:90%不是权限设错了,是权限被覆盖了三次以上还不自知。首屏救火的时候没人管覆盖链——就盯着web.config里那一行猛看,好像它是个活物能自己改注册表权限似的。前天运维老张在群里甩Lighthouse跑分截图,FCP 3.2秒,发完就去倒水,水杯还是上个月团建领的蓝色磨砂款,群里没人回。他回来刷了一眼,切到企业微信继续催CDN缓存刷新。我们仨——我、前端王磊、后端陈默——就蹲在同一个Teams会议里,连麦静音,各自点开procmon抓句柄,谁都没说话。陈默换了一根充电线,Type-C头是绿的,插进MacBook时弹了下提示音,特别清脆。


  第一大盲区:以为“继承”是单向的。你勾选“从父级继承”?好。但你爸刚被域组策略推了一条ACL重置脚本,你妈又手欠在NTFS里右键→属性→安全→高级→取消继承→复制→再删掉两条ACE,最后你还点了“替换子容器和对象的所有权限项”。这不叫继承,这叫遗嘱执行现场直播。我原以为只要ApplicationPoolIdentity有IIS_IUSRS组成员身份就万事大吉,结果查到第十七层目录,发现某个DLL的读取权限卡在S-1-5-21-XXXX-XXX-XXX-513(也就是Domain Users),而服务器根本没加域——是去年迁站时用Sysprep镜像漏掉的SID残留。我说不准那台机器是不是还挂着旧域控的DNS缓存,但那个DLL的mtime戳是二〇一九年十一月四日,周五下午四点十八分。


  第二盲区:web.config里跟NTFS权限打架时,你信谁?你猜我上次调这个花了多久?两天半。第一天查HTTP 401.2 vs 401.3的区别;第二天在procmon里筛“ACCESS DENIED”+“CreateFile”,发现iisexpress.exe反复打开同一个.config文件失败十七次;第三天早上九点十七分,王磊忽然喊我:“哥,你web.config里那个location path='api/'段落,开头少了个斜杠。”我重新加载应用池,好了。就这么简单。可你知道那台测试机上IIS版本是多少吗?他说不清。我也没问。反正不是8.5就是10.0,差不了五岁。


文章配图,仅供参考

  第三盲区:log文件夹的写权限。人人都记得给wwwroot加IIS_IUSRS写权限,但没人碰logs。C:\\inetpub\\logs\\LogFiles\\W3SVC1——这个路径你背得比自己身份证还熟,但你有没有试过在它上面右键→属性→安全→高级→禁用继承→添加一个新ACE,专门给IISAPPPOOL\\DefaultAppPool授予“修改”而不是“完全控制”?没有吧。你只是把整个Inetpub目录拖过去,点“替换所有子对象的权限项”。结果呢?FTP用户上传文件时报错“拒绝访问”,查了半天才发现是LogFiles下某天的压缩包被自动解压,解压进程以SYSTEM身份创建了新目录,权限链当场断裂。那天下午我盯着Windows日志里的Event ID 1102看了整整四十三分钟,一边看一边想KPI折算的事——上季度我们组SLA达标率99.87%,可每100个工单里有67个是IIS权限相关,这部分折算成服务成熟度权重,到底该乘0.7还是0.5?没结论。后来干脆关掉了日志窗口。


  第四盲区:临时ASP.NET编译目录的权限。%systemdrive%\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319\\Temporary ASP.NET Files\\——这个路径长到你打字都要停顿两次。我见过最狠的操作:某兄弟直接把这个目录移动到了D盘,理由是“C盘空间紧张”。他没动ACL,就改了web.config里,然后重启应用池。结果IIS用的是AppPoolIdentity账号,而D盘根目录只给了Administrators和SYSTEM,他忘了给IISAPPPOOL\\MyAppPool加进去。报错日志里明晃晃写着“无法创建临时文件”,他截图问我:“是不是.NET Framework坏了?”我答:“你去看看D:\\权限。”他回:“哦……我以为改路径就自动带权限。”


  第五盲区:GAC里程序集的权限判断。对,GAC。你以为放进去就完事了?不。IIS_IUSRS对C:\\Windows\\Microsoft.NET\\assembly\\GAC_MSIL\\XXX\\ 没有任何默认权限。你装的是强命名程序集,它运行时不走bin,它直接绕开你的web.config,往GAC里扒拉DLL,而扒拉那一刻,权限校验是按当前AppPoolIdentity账号来做的。上次有个客户升级Newtonsoft.Json到13.0.3,部署完500.19,我们俩对着fusion log viewer干瞪眼,直到陈默随口说了一句:“你确定GAC里那个dll没被杀毒软件扫成只读?”——还真被设了只读属性。就那个属性,不是ACL,是只读。就四个字。删掉就好了。我们花了六小时。


  说到这儿我忽然想起上个月报销单:CDN账单超支八千七百二十六元,原因是缓存未命中率飙到43%,根因是静态资源路径里混进了v=时间戳,而CDN没配正则剔除。这事跟我现在说的IIS权限一点关系都没有,但我刚才看见财务系统弹窗提醒“待审批”,顺嘴就说了。你别记笔记,也不用往下翻找关联性——没有。


  优胜劣汰是真的。最近三个月我跟五个外包团队交接权限文档,三个交来的config里还带着“Everyone”全控权限,一个写了“建议使用最低权限原则”但附注里说“实际测试中必须给Full Control才能跑通”,最后一个直接空着。我让他补,他发来个Excel表格,列名是“需授权对象|需授予权限类型|生效范围|备注”,备注栏统一写着“按现场情况灵活调整”。我回复:“不用了,我直接远程。”他回了个OK手势表情,接着就把TeamViewer密码发了过来。我登上去第一件事,是把桌面上那个正在录屏的OBS窗口最小化——它已经录了四十分钟,画面上全是黑屏,只有左下角时间在跳:15:42:18,15:42:19,15:42:20。


  下一步?明天下午两点,我去客户机房,带U盘,里面只有icacls.exe和一份txt——《权限修复顺序检查表》,按步骤敲命令。不带PowerShell脚本,不解释原理,就一行一行敲。敲完让他们自己截图,我认字就行。要是他们问“为什么不能一步到位”,我就说:“这个我说不准。”

(编辑:站长网)

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

    推荐文章