Windows站点搭建的3个致命权限断点
|
去年3月那会儿,我原以为改个IIS权限就能搞定的事,结果被三个断点坑得收录掉光——对,就是那种site命令一查,首页都没了的那种。当时客户还催着上线,服务器风扇嗡嗡响,键盘上掉了俩键帽(左Ctrl和空格,害我改robots.txt时总按错),我一边敲命令一边骂,这破系统怎么比Linux还难伺候? 第一个断点在「继承权限」上。Windows默认会勾上「继承父权限」,但很多新手(包括我客户的技术)觉得勾着碍事,非要点掉。结果呢?子目录权限全乱套——比如/uploads目录没给IIS_IUSRS写权限,图片上传失败;/cache目录没给NETWORK SERVICE读权限,页面生成直接报500。最绝的是,有个客户的/static目录权限被改成「仅当前用户」,我改完权限后,用管理员账号能访问,爬虫用www-data账号访问直接403——这他妈谁能想到?后来我学乖了,改权限前先截图,改完立刻用curl测,可就算这样,还是漏了个/logs目录,导致日志没生成,排查问题多花了俩小时。 外卖盒堆在桌角,窗外的雨下了一下午,我盯着电脑屏幕上的403,突然想起上周帮另一个客户改权限时,他非要把所有目录权限设成「完全控制」——「这样省事」,他说。我当时没拦住,结果第二天他哭着说被黑站了,对方在/tmp目录传了个webshell,直接提权拿服务器。现在看,这俩事其实是一个逻辑:Windows权限太细,细到容易乱;但太粗,又容易出事。就像我显示器上贴的便签,写着「别碰继承权限」,结果还是被客户的技术撕了——他说「看着碍眼」。 第二个断点是「匿名身份验证」。IIS默认用IUSR账号访问,但很多教程(尤其是那些写于2010年前的)会教你改成Application Pool Identity。这本身没错,可问题在于,如果Application Pool的标识没设对,或者.NET版本不匹配,爬虫访问时就会触发「匿名用户验证失败」。我遇到过最离谱的案例:客户用.NET Core 3.1,但Application Pool的.NET CLR版本设成「无托管代码」,结果所有请求都被重定向到/error/500.html——而这个页面因为权限问题,连管理员都访问不了。更坑的是,这种错误不会在IIS日志里明说,只会记个「HTTP 500.19」,你得手动翻事件查看器,才能看到「配置节被锁定」的提示。那天我改了20次web.config,每次保存都提示「访问被拒绝」,最后发现是C:\Windows\Temp目录没给IIS_IUSRS写权限——这他妈和web.config有个屁关系啊?
文章配图,仅供参考 路由器指示灯闪得人心烦,我客户在电话里吼:「为什么百度不收录?」我让他先查site命令,他说「查了,只有首页」。我让他用「site:域名 -www」排除首页,他说「还是只有首页」。我让他用「site:域名 inurl:about」查内页,他说「没有」。这时候我意识到,问题可能出在「所有子目录都被禁止抓取」上——结果一查,还真是:他之前为了「安全」,在根目录的web.config里加了,然后又在子目录的web.config里加了——这俩配置一叠加,所有子目录的请求都被IIS直接拒绝,连404都不给,爬虫自然收不到任何信号。我删掉子目录的web.config后,收录三天就恢复了,可客户非说「是我改权限的功劳」,气得我差点摔键盘。第三个断点是「文件系统权限与SharePoint集成」。这个我说不准是不是普遍问题,但我遇到过两次:客户用Windows Server跑站点,同时开了SharePoint服务(为了「方便管理」),结果SharePoint会自动修改部分目录的权限,把IIS_IUSRS的权限覆盖掉。比如/Shared Documents目录,SharePoint会把它设成「仅SharePoint_AppPool用户可访问」,而IIS的站点根目录又指向这个目录的子文件夹——结果就是,爬虫能访问首页,但访问任何内页都报403。更坑的是,这种权限修改不会在IIS里显示,你得用「icacls」命令行工具查,或者用Process Monitor监控文件访问,才能看到「ACCESS DENIED」的记录。我上次遇到这事,花了整整一天排查,最后发现是SharePoint的「文档库同步」功能在作怪——客户非说「SharePoint和IIS不冲突」,结果我关了SharePoint服务后,收录立刻恢复,他才闭嘴。 现在回头看,这三个断点其实都和「权限继承」有关:要么是手动改了继承,要么是被其他服务改了继承,要么是配置文件覆盖了继承。我敢打包票,90%的Windows站点权限问题,都出在这上面。可为什么没人说?因为教程都教你怎么「设权限」,没人教你怎么「查权限」——就像我客户的技术,他只会照着教程敲命令,却不知道用「icacls /?」看帮助,更不知道用「Process Monitor」监控文件访问。上周我还遇到个更离谱的:客户把整个C盘权限设成「仅管理员可访问」,然后问我「为什么站点打不开」——我他妈能说什么? 现在我做Windows站点,第一件事就是禁用所有「手动改权限」的操作,除非绝对必要。第二件事是装Process Monitor和Fiddler,随时监控文件访问和HTTP请求。第三件事是告诉客户:「别碰IIS,别碰权限,别碰SharePoint——除非你想掉收录。」可就算这样,还是有人不听——就像上周那个客户,非要在/uploads目录装个「文件管理插件」,结果插件自带权限检查,把IIS_IUSRS的权限全删了,收录又掉光。我帮他恢复权限后,他说:「早知道听你的了。」我说:「现在听也不晚——但下次别等我恢复,你自己用icacls /reset /t /c /l把权限重置了就行。」他问:「icacls是什么?」我叹了口气,挂断了电话。 (编辑:草根网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


Windows运行库高效管理:打造稳定开发环境



浙公网安备 33038102330469号