Windows站点权限配置:12年网关工程师的零越权、零宕机方案
|
跟产品吵。中秋前两天,PM 把灰度开关没推完的截图甩我脸上,说“用户反馈白屏”,我盯着那张图看了十八秒——不是看错误码,是看他微信头像右下角那个裂开的像素点。真他妈像我们上周漏掉的那个 IIS 应用池回收阈值。 零越权?零宕机?这俩词放一起就透着股馊味。去年中秋那天凌晨三点,我蹲在工位啃冷月饼,监控大屏上右下角那条 CPU 使用率曲线突然抖了一下,幅度不大,就半格,连告警都没触发。可它抖的那一下,刚好卡在我删掉 ApplicationPoolIdentity 本地管理员权限的前十七毫秒。我原以为改完 Group Policy 就能睡了,结果发现 IIS_IUSRS 组里混进了一个叫 “Domain Admins” 的幽灵成员——不是我们加的,是去年某次 AD 域迁移脚本里漏删的一行 add-group-member,静默存活三百七十二次调用,直到那天被一个前端发版时顺手调的 /healthz 接口撞破。 优胜劣汰?对。不是人优胜劣汰,是配置项自己打起来。你给站点配了 Authenticated Users 读取权,又手滑给 IIS_IUSRS 加了写入,好,这两组明天就在 %windir%\\System32\\inetsrv\\config\\applicationHost.config 里对砍。砍赢的那个活下来,输的那个……就变成你 oncall 手机震了一下、但震得不响的那种事。我说不准那次震动是不是因为短信来了,反正我没掏出来看。我倒了杯水——办公室饮水机左键坏了,得按右键再斜着拧半圈,水才出来。杯底印着公司 logo,“智联云网”四个字,最后一个“网”字边缘有点糊,像我们刚切走的旧网关流量镜像。
文章配图,仅供参考 先扔结论后补细节:所有所谓“安全基线文档”,都是给审计看的遗嘱。真正在跑的权限树,全是活的。你今天给 DefaultAppPool 加个密码复杂度策略,明天测试就来报“登录失败:0xc000006d”,原因是他本地开发机域控同步延迟了两小时。你敢打包票:这个 ID 不是硬编码在 web.config 里的,但我不敢打包票它没藏在某个 .pubxml 文件的 `` 里当注释。真的有,上个月 QA 在回归环境里挖出来过,一行 xml 注释写着 “# dev only, will remove before PROD”,后面跟着一个带密码的 SQL Server 连接字符串。删了。当天下午前端就来找我,说 build 失败,因为构建脚本里引用了那行注释里写的路径。我们最后留着那行,只是把密码改成 —— 审计通过,生产照崩。 KPI 考核上线成功率?哈。我们组上季度 99.8%,靠的是把“上线”定义成“config push 完成”。push 完不等于 load 完,load 完不等于 bind 完,bind 完不等于 cert renew 完。上周三发布,证书续期失败,IIS 自动回退到自签名证书,浏览器全报 NET::ERR_CERT_AUTHORITY_INVALID。但 KPI 系统没抓这个——它只扫 Jenkins 日志里有没有 “BUILD SUCCESS”。PM 在站会上表扬我们“稳定交付”,没人提用户那边正疯狂刷新页面。倒是测试小王,自己写了段 PowerShell 脚本,每分钟 curl 一次 $siteUrl -k,邮件告警里写着:“第十八次,依然显示‘您的连接不是私密连接’。” 我信不了任何“一次性加固方案”。信不了 GPO 策略备份,信不了 SCOM 监控项,信不了运维同事说的“这个账户从 2016 年就没动过”。我只信三件事:一是每次发布后手动检查 C:\\inetpub\\wwwroot 下每个子目录的 ACL 是否含 SYSTEM + IIS_IUSRS + ApplicationPoolIdentity,二是强制把所有非默认站点的 applicationHost.config 提交进 Git(别笑,我们真干过,三年前开始,commit msg 都带机器名和 timestamp),三是上线前让测试用 IE11 开无痕窗口测一遍 NTLM 认证链路——别问为什么是 IE11,因为 Active Directory 坐标系里,IE11 是唯一还肯老老实实走 Negotiate 协议的活物。Chrome 已经默认跳 Kerberos,Edge 瞎猜 SPN,Firefox?呵,Firefox 连我们的 AD 架构图都懒得渲染。 昨天上午九点二十,我收到一封邮件,标题是“【紧急】/api/gateway/v2/auth/callback 返回 403,请排查”。发件人是支付中台的后端。我没点开正文。直接连跳板机查他们的负载均衡器日志,看到 upstream_addr 里夹着一个陌生 IP:10.47.22.93。这个网段不在我们 DMZ 列表里。追过去发现,是他们新上的 Flink CDC 任务,为了拉数据库变更日志,顺手把 gateway 的服务账号加进了 Domain Admins。我就坐在那儿,一口没喝的咖啡凉在手边,杯子上那个糊掉的“网”字,正对着我。 我现在在改一个自动化巡检脚本,只干一件事:每小时扫描所有站点的 里有没有 节点,如果有,比对它的 users 和 roles 属性是否和当前应用池 identity 匹配。不报警,只生成 Excel。Excel 第二列加了个“建议动作”:红字写着“删掉”或者“请找 DBA 核对该角色在 sys.server_principals 中是否存在”。至于谁去点确定,我不管了。反正今晚轮不到我 oncall。 (编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |



