Windows服务器站点权限配置:20年架构师一步封堵越权与宕机
|
凌晨三点二十,机房空调嗡嗡响得像台老拖拉机,我蹲在IDC机柜前,手电光晃着IIS管理器里那个叫“DefaultAppPool”的进程——它已经挂了十七分钟,但磁盘IO还在飙红,不是CPU。监控屏右下角贴着半截蓝胶布,上周换探针时留的,边角翘起来,正好遮住“% Free Space”那行告警字。我原以为是日志轮转崩了,结果打开E:\\inetpub\\logs\\LogFiles,发现里面空得能听见回声。 高考那天下着雨,窗外水珠子砸在机房玻璃上啪嗒啪嗒,像有人拿指甲在刮。我手机静音塞裤兜,可值班室泡面桶堆在服务器旁第三排UPS前面,热气还没散,就收到张工微信:“主站打不开,考生查分页403”。我没回,先敲开IIS——匿名身份验证开着,但应用池Identity用的是ApplicationPoolIdentity,而D:\\wwwroot\\exam2023\\这个目录,ACL列表里没加IIS AppPool\\DefaultAppPool这个组。不是权限太宽,是压根没给。可它之前好好的啊? 是啊,好好的。去年五一升级过.NET Framework补丁,没动配置;上个月安全扫描说“建议禁用父路径”,运维小王改了web.config里的,但忘了——这一句生效的前提,是应用池运行时身份真能读取到config。而它读不了,因为D:\\wwwroot\\exam2023\\web.config自己也没被ApplicationPoolIdentity读权限。于是启动失败,IIS自动重试三次后,默默把整个站点标成“已停止”,但HTTP.SYS层还挂着监听端口。所以用户点进去,先是卡五秒,再弹403。没人看见“已停止”,连iisreset /restart都骗不过去——它根本没进服务重启流程,只是监听端口僵在那儿,吃内存不释放。 四十来分钟,李姐跑上来两趟。第一次端着咖啡,站在机柜后头问:“是不是CDN缓存炸了?”我没抬头,正抓着鼠标滚轮往下翻Application Event Log——全是“Failed to initialize the app domain”,没报路径、没报权限、没报拒绝代码,就一句“HRESULT: 0x80070005”。第二次她拎着笔记本进来,指着DNS记录问我:“要不要切备用域名?刚才客服接了七十二个电话,都说‘查询失败’。”我点头说“切”,结果一查nslookup,主备域名解析全指向同一台WAF。备份?哦,备份脚本跑在另一台Win Server上,但那台机器上周被安全部门装了EDR,策略默认禁止执行PowerShell中的Get-ChildItem ——备份任务日志最后一行写着“Access is denied”,没人看。谁看?每天夜里三点零七分,邮件提醒发给五个人,其中三个邮箱转发规则设成“自动归档”,一个在休假,最后一个是我。我原以为它稳如老狗,结果连log都没写满。 后来我拆开服务器机箱清灰,发现风扇扇叶上积着薄薄一层黑絮,像是烧糊的绝缘漆混着机油——不对,这台是新上的戴尔R750,不可能有烧漆味。我凑近闻了闻,是隔壁托管区那台旧IBM x3650,三年前起火过,主板换了,但散热风道没重排,热风全吹进我们机柜下半层。我蹲那儿抠了半天,直到手指发麻,才想起来:这跟权限配置一点关系都没有。可当时为什么觉得有关?可能是因为手抖,也可能是因为李姐第三次上来时,她孩子在电话里喊“妈妈!我题抄完了!”然后电话就断了。我盯着她手机屏保——俩孩子蹲在沙坑里搭城堡,城堡顶上插着一面小旗子,旗子上印着校徽。 其实最邪门的不是403,是半夜四点十三分,我手动给D:\\wwwroot\\exam2023加完ACL后,站点启起来了,可学生提交的志愿数据全丢在缓存里,没写进SQL。DBA老陈远程看了眼,说“事务日志满了”,我切过去一看——LDF文件占了270GB,但DBCC SQLPERF(LOGSPACE)显示日志使用率98.3%,且VLF数一万两千多。他叹了口气,发来一条CMD:“dbcc shrinkfile (exam2023_log, 1)”……然后点了执行。我看着屏幕左下角时间跳到四点十九,忽然想起什么,冲到隔壁工位抄起老陈的笔记本,翻他三个月前写的《高并发志愿提交日志截断规范》第一页,上面画了个叉:“禁止手动shrink,会引发VLF碎片化导致日志无法截断”。我原以为这是纸上谈兵,结果它真的卡死了三十七分钟。
文章配图,仅供参考 老板没骂人,就在钉钉群甩了句话:“权限这事,不能靠‘应该有’,要靠‘必须显式写进Ansible清单’。” 我截图发给小王,他秒回:“ansible-playbook -i inventory/win/production site-perms.yml --limit exam2023-server”,底下跟了六个????。我没点,关了聊天窗。窗外雨停了,监控屏蓝胶布翘得更高了些,露出底下一行字:“Free space: 1.2 GB”。这数字我信。磁盘满是真的,403是真的,学生交志愿时网页白屏三秒也是真的。可“一步封堵越权与宕机”?扯淡。优胜劣汰——淘汰掉那些觉得“反正一直好着”的人,也淘汰掉那些抄了二十遍ACL命令却从来不去验证IIS应用池上下文到底以谁的身份在跑的人。昨天搬家,翻出十年前的U盘,里面存着一份《Windows Server 2003 IIS6权限检查表》,Excel第三列写着:“请确认IUSR_MACHINE账户对site根目录有Read & Execute”。我笑了下,插进电脑读——文件系统提示“该驱动器未格式化”。今天下午我把那份检查表删了。现在要做的,是把所有站点的ACL设置逻辑,从“人肉比对”改成“每次部署后跑一遍Get-Acl | ConvertTo-Json并diff”。至于为什么不是明天?因为今晚九点有个线上家长会直播,主站还挂在那台R750上。明天先把告警阈值调了——磁盘剩5%就打电话,不是发邮件。 (编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |



