Nginx的root指令仅声明静态文件根路径,防篡改靠系统权限与配置协同:目录chown root:nginx、chmod 750,文件chmod 640;关键目录用chattr +i锁定;Web层禁敏感路径、关autoindex、用try_files校验。
Nginx 的 root 指令本身不设“只读属性”,它只是声明静态文件的根路径;真正防止源码被篡改,靠的是操作系统级权限控制与 Nginx 配置协同加固。核心逻辑是:让 Nginx 工作进程(如 nginx 或 www-data 用户)只有读取权,没有写入或执行权,且路径本身不可被意外覆盖或遍历。
这是最直接有效的防护层:
nginx),禁止工作进程写入:chown -R root:nginx /var/www/html
drwxr-x---):root 可读写执行,nginx 组可读执行,其他用户无权限-rw-r-----),避免泄露备份、配置片段或 .git 目录root 指向 /etc、/var/log、/home 等系统或用户目录,防止路径误配导致敏感文件暴露对不需运行时修改的核心静态目录,启用 Linux 文件不可变属性:
chattr -R +i /var/www/html
chattr -R -i /var/www/html/uploads
chattr -R -i /var/www/html/cache
lsattr /var/www/html/index.html 应显示 ----i---------
+i 会彻底阻断所有写操作,务必确保动态路径已明确排除仅设好文件权限还不够,得堵住 Web 层可能的绕过路径:
http 或 server 块中显式拒绝敏感路径:location ~ ^/(etc|usr|var/log|proc|sys|root|boot|dev)/ { deny all; }
autoindex off;(默认已关,建议显式声明).bak、.swp、~ 文件统一设为 640 root:root,防止被 include 意外加载try_files $uri =404; 强制校验请求路径真实存在,避免内部重定向引发路径解析异常若运行在 Docker 中,需叠加挂载级防护:
volumes: [{type: bind, source: /host/nginx/conf, target: /etc/nginx, read_only: true}]
/host),只挂载最小必要目录(如 /host/nginx/conf)include /etc/nginx/conf.d/*.conf; → 改为显式列表:include /etc/nginx/conf.d/app.conf;
640,属主 root:root,确保即使容器内提权也无法绕过内核只读检查