Windows多媒体站点搭建:PHP权限配置一步到位
|
去年冬天给某视频平台搭Windows多媒体站,被PHP权限配置坑得差点砸键盘——不是技术难题,是那种“明明按文档操作却总差一口气”的憋屈。最后发现所谓“一步到位”的配置方案,本质是优胜劣汰筛出来的野路子:谁踩的坑多,谁总结的配置就越狠。
文章配图,仅供参考 我原以为IIS+PHP的权限配置无非是给文件夹开个“Everyone”权限,结果测试时视频转码服务总报403。查日志发现是PHP-FPM的进程用户(通常是NETWORK SERVICE)没写权限,可按微软官方文档改了安全策略后,转码进程又因为“服务账户无交互权限”崩了。那天桌上排着三台测试机,两台跑IIS 10.0,一台跑某个小版本的IIS 8.5,凉了的外卖盒子堆在键盘旁边——最后发现是Windows Defender实时扫描把临时生成的转码文件给锁了,得在组策略里单独给PHP-FPM的临时目录开白名单。最离谱的是文件上传权限。产品经理拍着桌子说“就这么点东西”,结果用户上传的4K视频在PHP里能读不能写,因为上传目录的ACL继承了父目录的“只读”策略。我试过用icacls命令手动改权限,结果发现Windows的权限继承是“父目录改子目录跟着变,子目录改父目录不变”的奇葩逻辑——最后直接写了个PowerShell脚本,在用户上传时动态创建目录并强制覆盖ACL,这才勉强过关。地铁上掏手机复现问题的时候,发现脚本里有个变量名拼错了,硬是盯着屏幕看了十八秒才反应过来。 但说真的,这种“一步到位”的配置方案能活下来,全靠同行踩坑踩出来的经验。比如有个哥们在GitHub上分享的“PHP-FPM权限终极配置”,核心就三步:1. 把PHP-FPM的进程用户改成本地账户(别用NETWORK SERVICE);2. 用cacls命令给所有涉及目录开“完全控制”(别管安全风险,先跑起来再说);3. 在IIS里把“加载用户配置”选项关掉(避免权限冲突)。我试过用更精细的ACL配置,结果发现Windows的权限系统对PHP的支持就是个半成品——比如PHP的open_basedir限制在Windows下会和IIS的虚拟目录权限打架,最后还是得靠“完全控制”这种暴力解法。 跟运维吵架那回更绝。他们坚持要用域账户跑PHP-FPM,说“安全第一”,结果域账户的权限策略比本地账户复杂十倍,光是配置“从网络访问此计算机”的权限就花了两个小时。最后我直接甩出测试数据:用本地账户时转码成功率98%,用域账户时掉到62%——因为域账户的权限变更需要同步到域控制器,网络延迟导致权限检查超时。他们沉默了五秒,说“那你用本地账户吧,但得写进运维手册”。 现在回头看,Windows下搞PHP权限配置,根本不是技术问题,是“如何用最简单的方式绕过Windows的权限坑”的生存哲学。那些标榜“安全”“精细”的配置方案,90%会在实际环境中因为各种奇葩原因失效——比如用户上传的文件名带空格,或者目录路径里有中文,或者系统更新后权限策略被重置。反而是那些“给所有目录开完全控制”“用本地账户代替服务账户”“关掉所有权限检查”的野路子,因为足够简单粗暴,反而能活到最后。 上周跟另一个PHP后端聊天,他说他们在用Docker跑PHP,把权限问题全甩给Linux容器了。我笑了笑没说话——Windows下的Docker,权限问题只会更复杂。不过话说回来,要是哪天Windows的权限系统能像Linux那样透明可控,我们这些搞后端的也不用天天跟权限配置较劲了。但这个我说不准,毕竟微软的“兼容性”和“安全性”,从来都是两难选择。 现在我的配置方案就一条:能用本地账户就不用服务账户,能给完全控制就不给只读,能关权限检查就不开。别跟我提安全风险——等你的转码服务能稳定跑过三天再说。至于那些说“这样不安全”的,让他们先去解决Windows下PHP-FPM进程突然崩溃的问题吧。 (编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


Windows建站总踩坑?5步权限配置法一劳永逸
Windows运行库高效管理:20年缓存工程师的稳定开发实践