加入收藏 | 设为首页 | 会员中心 | 我要投稿 站长网 (https://www.024zz.com.cn/)- 区块链、CDN、AI行业应用、人脸识别、应用程序!
当前位置: 首页 > 搭建环境 > Windows > 正文

IIS权限总出错?5个Windows安全盲区揭秘

发布时间:2026-11-04 14:12:12 所属栏目:Windows 来源:DaWei
导读:  去年八月,我蹲在客户机房第三排机柜后面,膝盖压着半包没拆的蟹黄小笼包外卖,汤汁漏出来蹭了两道油印在IIS部署单背面。空调嘶嘶响,但没用——那台DC服务器风扇转得像工地电钻,震得我手里的UAC提示框都在抖。运维老张突

  去年八月,我蹲在客户机房第三排机柜后面,膝盖压着半包没拆的蟹黄小笼包外卖,汤汁漏出来蹭了两道油印在IIS部署单背面。空调嘶嘶响,但没用——那台DC服务器风扇转得像工地电钻,震得我手里的UAC提示框都在抖。运维老张突然把椅子往后一滑,哐当撞上墙,接了个电话,就那么歪着脖子“喂?……对,加ACL那个……哎您稍等”,然后把听筒捂住朝我抬了抬下巴:“你再试一次权限继承。”


文章配图,仅供参考

  我原以为是ApplicationPoolIdentity没设好,结果改完发现ApplicationHost.config里底下藏着一行被注释掉的——没人告诉过我这个注释是半年前QA测单点登录时临时加的,更没人告诉过我它会在web.config里被继承两次,而第二次继承触发的是NTFS继承链里第四个ACE条目,那个条目里SID后面跟了个空格。这个我敢打包票:用Process Monitor抓到的堆栈,第三个调用帧里WriteFile参数地址指向的就是那个空格字符。可这玩意儿到底影响哪一层身份转换?我说不准。我只看见iisreset之后,app pool刚起,就卡在LoadLibraryExW,等着一个永远不存在的\\\\?\\GLOBALROOT\\Device\\HarddiskVolumeShadowCopy12\\windows\\system32\\inetsrv\\config\\applicationHost.config。


  雨下得特别烦。不是暴雨,是那种粘腻的、持续三十六小时的江南梅雨,从上午九点开始滴在机房西侧窗沿,嗒、嗒、嗒。我们三个人挤在工位上,连鼠标线都缠一块儿了——王工右手边键盘托盘晃了三回,左手一直按着Ctrl+Shift+Esc不放,盯任务管理器里w3wp进程的句柄数涨到四百七十二;隔壁测试组新来的小妹突然推门进来问“你们这边是不是动了GPO”,说完又缩回去,门都没关严,风一吹,她桌上那叠打印纸全飞起来,一张盖着红色“REJECTED”戳的AD权限审批单,正贴在我显示器右下角。我没动它。就让它贴着。


  第二个盲区根本不是权限本身,是时间戳校验。Windows Server 2019默认启用了Kerberos的renewable ticket有效期策略,但IIS里Application Pool Identity用的是本地服务账户,它不走KDC——它走的是LSA,而LSA又去查本机SAM数据库里的密码最后修改时间戳。这个戳不是逻辑时间,是UTC微秒级整数,存进注册表的时候,会经过LocalTimeToFileTime转换。你猜怎么着?去年八月十五号凌晨两点,系统自动把时区从夏令时切回来,那十分钟里所有新建的AppPool,它的token中AuthTime字段比实际系统时间慢了三十七秒。结果就是——所有POST请求带Authorization头的,都会在authz.dll里被拦在GetUserToken这一层,错误码0x8009030E,日志里就写一句“Failed to obtain user token”,没别的。我们盯了十八秒错误日志滚动,没人吭声。老张嚼着口香糖,嚼了足足四十下才吐掉,渣子黏在桌角黑胶垫上,像一小块凝固的沥青。


  我见过最离谱的一次,是某次补丁后IIS Manager自己改了元数据库里的accessPolicy。不是改配置,是把原来硬生生塞进了节点底下,但没同步到machine.config的——导致所有OPTIONS请求在模块加载前就被拒绝了,连trace都打不出来。没人能复现,因为只有那台机器重启过三次。最后一次重启前,运维小李在远程桌面里点了“注销”,但没等桌面消失就直接关了RDP窗口。他说他听见机柜顶上有个继电器“咔”了一声。我不信,可那天机房温控记录显示:14:23:07,制冷机组B相电流突增5安培。巧合?也许。反正我现在看任何“权限修复脚本”,第一反应不是跑它,是先翻事件日志ID 12289里有没有Service Control Manager的“Service stopped unexpectedly”。


  说到脚本……前两天看见个Python写的批量修复工具,叫IISPermFix.exe,它会遍历所有applicationHost.config里的site节点,自动给物理路径加Everyone-FullControl。呵。我盯着屏幕看了半分钟,想起八月二十一号下午,客户DBA冲进来吼“你们谁改了C:\\inetpub\\logs\\LogFiles的继承?!”,然后我们仨在Event Viewer里翻了一百三十七分钟,才在Application日志深处找到一条Level=Warning、Source=MSIInstaller、ID=11996的记录:“The installer removed ACLs from path 'C:\\inetpub\\logs\\LogFiles' due to mismatch with stored default.” 原来是客户自己装了个带自定义组件的SQL Server报表补丁。没人记得。连安装包名字都拼错了三遍——“Repost_Builder_v3_2.msi”,第二个o其实是零。


  优胜劣汰是真的。去年八月那波事故之后,客户把原来七个人的中间件团队裁到三人,留下的全是肯蹲在Process Monitor里数CALL栈、敢对着lsass.exe内存dump截图放大看SID结构、半夜三点回邮件说“刚才又复现了,这次是SeAssignPrimaryTokenPrivilege没生效,但我抓到lsass发了个STATUS_NO_SUCH_USER回包”的人。其他人?要么去了云迁移组天天填Excel,要么转岗做需求分析师,现在PPT里还写着“用户侧体验优化”。


  我桌上还有半盒没喝完的枸杞菊花茶,冷了,浮着两片蔫透的花瓣。刚才王工说下周要上Azure Arc,让我提前看文档。我嗯了一声,其实还没打开Azure门户——先重装了Sysinternals Suite,把ProcMon配置里所有“Operation is ReadFile”过滤器删了,新加了三条:Operation is CreateProcess、Operation is QuerySecurityObject、Operation is SetSecurityObject。至于GPO到底是怎么绕过组策略刷新间隔偷偷生效的……这事儿,我打算等明天雨停了再查。

(编辑:站长网)

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