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

最新下载

热门教程

Nginx 中 Root 指令如何配置只读属性防止网站源码被恶意篡改

时间:2026-08-23 20:09:49 编辑:袖梨 来源:一聚教程网

Nginx的root指令仅声明静态文件根路径,防篡改靠系统权限与配置协同:目录chown root:nginx、chmod 750,文件chmod 640;关键目录用chattr +i锁定;Web层禁敏感路径、关autoindex、用try_files校验。

Nginx 的 root 指令本身不设“只读属性”,它只是声明静态文件的根路径;真正防止源码被篡改,靠的是操作系统级权限控制与 Nginx 配置协同加固。核心逻辑是:让 Nginx 工作进程(如 nginxwww-data 用户)只有读取权,没有写入或执行权,且路径本身不可被意外覆盖或遍历。

锁定目录与文件的系统权限

这是最直接有效的防护层:

  1. 将 根目录所有者设为 root,所属组设为 Nginx 运行组(如 nginx),禁止工作进程写入:

    chown -R root:nginx /var/www/html

  2. 目录权限设为 750drwxr-x---):root 可读写执行,nginx 组可读执行,其他用户无权限
  3. HTML/CSS/JS 等静态文件统一设为 640-rw-r-----),避免泄露备份、配置片段或 .git 目录
  4. 严禁把 root 指向 /etc/var/log/home 等系统或用户目录,防止路径误配导致敏感文件暴露

用 chattr +i 实现内核级防篡改

对不需运行时修改的核心静态目录,启用 Linux 文件不可变属性:

  1. 递归锁定整个站点 HTML 根目录:

    chattr -R +i /var/www/html

  2. 必须提前排除上传、缓存、日志等需写入的子目录,例如:

    chattr -R -i /var/www/html/uploads

    chattr -R -i /var/www/html/cache

  3. 验证是否生效:lsattr /var/www/html/index.html 应显示 ----i---------
  4. ⚠️ 注意:PHP 或 Node.js 若以 root 运行,+i 会彻底阻断所有写操作,务必确保动态路径已明确排除

在 Nginx 配置中切断越权访问链路

仅设好文件权限还不够,得堵住 Web 层可能的绕过路径:

  1. httpserver 块中显式拒绝敏感路径:

    location ~ ^/(etc|usr|var/log|proc|sys|root|boot|dev)/ { deny all; }

  2. 禁用目录浏览:autoindex off;(默认已关,建议显式声明)
  3. 清理或限制权限所有备份文件:.bak.swp~ 文件统一设为 640 root:root,防止被 include 意外加载
  4. 使用 try_files $uri =404; 强制校验请求路径真实存在,避免内部重定向引发路径解析异常

容器环境下的只读强化(如适用)

若运行在 Docker 中,需叠加挂载级防护:

  1. 主配置目录用只读绑定挂载:

    volumes: [{type: bind, source: /host/nginx/conf, target: /etc/nginx, read_only: true}]

  2. 禁止挂载宽泛路径(如 /host),只挂载最小必要目录(如 /host/nginx/conf
  3. 禁用通配 include:include /etc/nginx/conf.d/*.conf; → 改为显式列表:include /etc/nginx/conf.d/app.conf;
  4. 宿主机上配置文件权限设为 640,属主 root:root,确保即使容器内提权也无法绕过内核只读检查

热门栏目