Ruby老兵16年实战:Windows服务器站点权限一键配齐
|
去年3月份,给一个老客户配权限,Windows Server 2022,IIS,Ruby on Rails 7.1,用的是Puma。我敲完那行choco install ruby --version=3.2.2,手停了两秒——突然想起一三年那会儿,在金茂大厦B座三楼那间朝北的隔断间,空调根本不制冷,风扇嗡嗡响得像台拖拉机,老张蹲在机柜前拿记号笔往U盘上写“ruby200-x64”,边写边咳,旁边李工叼着烟,烟灰快掉进Dell那台E198WFP显示器键盘缝里,那屏幕牌子我到现在也想不起来,只记得右下角反光特别晃眼。 一三年,权限?根本没人提“一键配齐”这词。全是手动勾:IIS_IUSRS加进ApplicationPoolIdentity组,再把C:\\inetpub\\wwwroot\\site\\public加给IIS_IUSRS读取+遍历,log目录还得单独开修改权——但凡漏一个点,500就弹得比泡面开盖还快。我们仨轮着试,老张用远程桌面连,李工本地调试,我守着监控页面刷新。有次配错成Everyone全控制,上线两小时被扫出webshell,删库跑路的不是黑客,是某个Python脚本自动备份时误删了整个log子树。我原以为权限只要“能跑就行”,结果第二天运维打电话说:你那个Rails日志写不进磁盘,是因为你把app目录给了IIS_IUSRS写权限,但没给它的父目录“inheritable”继承标记……啊?还能这样? 一七年换云主机,Azure VM,那时开始写PowerShell脚本。写过一个叫set-rails-perms.ps1的东西,带参数:-SiteRoot, -LogPath, -AppPoolName。逻辑还算干净:先取ApplicationPoolIdentity SID,再Set-Acl,最后递归处理log和tmp。但有个坑踩得深——它硬编码了“IIS AppPool\\DefaultAppPool”路径,可客户自己建的池叫“MyGreatRailsAppPool_V2”。脚本执行完,权限全挂空档,站点白屏。我查了四小时Event Viewer,才发现SID匹配失败时PowerShell默认静默吞错,连Warning都不抛。那会儿没CI,没pre-check,改完直接RDP进去run,就像往咖啡机里倒酱油,味道不对才咂摸出来。后来李工离职去了深圳做SaaS中间件,再没聊过这事。 二二年,公司采购那套叫“磐石卫士”的安全基线平台,强制要求所有Web服务必须通过它的PowerShell模块下发权限策略。我交了份PR,加了个新函数Set-RailsWindowsAclV2,用了新的Invoke-Command + PSSession方式远程执行,规避了本地凭据泄露风险。但上线第三天,监控报警:某台老服务器(Win Server 2012 R2)执行失败,报错“Cannot bind argument to parameter 'Session' because it is null”。查日志才发现,那台机器禁用了WS-Management服务——因为“当年防勒索病毒时统一关的”。我们临时启了服务,顺手给它打了个补丁。可我回头翻Git历史,发现二一年底其实就有同事提过这事,评论区写着:“建议增加Get-Service WSMAN check”,我没合并,心想“反正都上2016了,谁还在用2012”。这是我的错。一步走错了。就这一步,让二十多个站点延后了三天完成基线审计。 对了,王薇呢?她以前跟老张一起写那个旧论坛的后台插件,Ruby 1.9.3 + Rails 3.2,全是手撸的AuthLogic鉴权逻辑。去年听说她在杭州搞低代码平台,做的不是Ruby,是TypeScript加YAML DSL。上周朋友圈发了个截图:某银行网点系统导出权限清单,Excel表头写着“RBAC策略ID|生效路径|继承状态|LastAuditBy”。底下有人问是不是人工核的,她回:“自动生成,校验失败就标红,标红的才要人看。” 我盯着那张图看了半分钟,关掉了。那表格列宽太匀,不像我们当年用Notepad++写的txt权限对照表,一行顶多塞下七个中文字符,靠Tab对齐,对歪了就得全删重来。
文章配图,仅供参考 现在这套,真算“一键配齐”?其实也就是封装了十来个PowerShell原生命令,加上一个check-privilege-inheritance-before-write的预检钩子。但它活下来了,而当年金茂大厦那台开了三年没重启的Dell服务器、老张手写U盘上的ruby200安装包、李工抽到一半掐灭的中南海烟头……早散了。优胜劣汰?嗯。站得住。可这话听着冷,其实挺没劲的——就像你非得说“当年风扇响是因为空调坏”,但真正难受的是,屋里六个人同时对着终端敲命令,谁都没法抬头看对方一眼,更没法听见自己心里那点不确定到底从哪来的。 今年初,新招的实习生问我:“Ruby on Windows还要管这些?Docker不是全解决了吗?”我没答上来。她没问错。只是我现在写的这些脚本,还卡在Windows Server 2019兼容层里,没动docker化——因为三个核心客户仍在用.NET Framework 4.7.2混跑Rails,他们连TLS 1.0都没关全。所以……我还在写PowerShell,还带着check-legacy-acl-flag参数。现在这套我也拿不准还能干几年。 (编辑:均轻资讯网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


运营中心权限配置提效70%:安全与效率双赢
Windows站点搭建总踩坑?5步权限配置法
Windows多媒体站点权限配置实战指南
Ruby老兵看站长新趋势:技术×运营的跨界融合之道