一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

怎么通过对 Web 应用关键文件系统目录设置只读属性防止篡改实战

时间:2026-07-15 19:29:47 编辑:袖梨 来源:一聚教程网

最有效的网页防篡改手段是系统级只读权限配置。Linux用chattr +i锁定核心文件,Windows通过NTFS高级权限仅授予IIS_IUSRS读取权限,并需分离静态与动态目录、部署时自动加固、运行前校验可写性。

直接给关键目录设只读,是防网页篡改最基础也最有效的手段之一。但要注意:**只读 ≠ 不能改**,必须区分“文件属性只读”和“系统级权限只读”,后者才真正起作用。实际中常因忽略权限继承、所有者限制或运行时写需求,导致网站崩掉或防护失效。

一、Linux 下用 chattr +i 锁死核心文件(最强防护)

对静态资源目录(如 /www/wwwroot/example.com/html)或配置文件(如 /etc/nginx/conf.d/site.conf),推荐用 chattr +i —— 这是内核级不可修改标记,连 root 都无法覆盖或删除,除非先 chattr -i

  • 锁定整个站点根目录(不含动态生成目录):
    chattr -R +i /www/wwwroot/example.com/html
  • 排除缓存、上传、日志等需写入的子目录(必须提前排除):
    chattr -R -i /www/wwwroot/example.com/html/uploads
    chattr -R -i /www/wwwroot/example.com/html/cache
  • 验证是否生效:lsattr /www/wwwroot/example.com/html/index.html → 应显示 ----i---------

⚠️ 注意:PHP 或 Node.js 进程若以 root 运行,+i 会彻底阻断所有写操作;务必确保上传、会话、日志等路径不在锁定范围内,否则服务异常。

二、Windows Server 上通过 NTFS 权限实现真只读

仅勾选“只读”属性毫无防护力——它只是个提示位。必须进 安全 → 高级 → 禁用继承 → 删除所有继承权限 → 新增用户组并仅赋予读取权限

  • 右键网站物理路径(如 D:inetpubwwwrootmyapp)→ 属性 → 安全 → 高级
  • 点击“禁用继承” → 选“从此对象中删除所有已继承的权限”
  • 点击“添加” → 输入 IIS_IUSRS(或应用池对应用户)→ 确定
  • 在基本权限中,只勾选“读取和执行”“列出文件夹内容”“读取”,其余全部不勾
  • 勾选“替换所有子对象的权限项”,点击确定

✅ 效果:IIS 工作进程能读代码、执行 PHP/ASP.NET,但无法修改 .html/.js/.config 文件,也无法新建或删除任何文件。

三、避开常见陷阱:动态内容与部署协同

只读不是一劳永逸。关键在于划分“静态资产”和“运行时数据”,并在部署流程中固化权限策略。

  • 明确分离目录:把 /public/static/themes 设为只读;而 /storage/runtime/uploads 单独挂载、赋写权限
  • 部署脚本自动加固:CI/CD 中加入权限设置步骤,例如:
    find ./public -type f -exec chmod 444 {} ;
    chattr -R +i ./public
  • 程序启动前校验可写性:在 PHP 的 index.php 或 Node.js 的 app.js 开头加检测:
    if (!is_writable(__DIR__.'/storage')) { die('Critical: storage dir not writable'); }

不复杂但容易忽略:真正的只读保护,从来不是单点操作,而是目录规划 + 权限配置 + 运行时校验的组合动作。

热门栏目