nginx权限须遵循最小权限原则:web根目录755、静态文件644;敏感目录移出或禁访问;配置文件644/640、私钥600;日志目录750;上传目录限制脚本执行;部署后显式重置权限。

Nginx 服务运行时,目录和文件权限必须遵循“最小权限原则”:仅授予 Nginx 进程(通常是 www-data 或 nginx 用户)执行所需操作的最低权限,禁止过度开放(如全局可写、777 权限),同时确保静态资源可读、脚本可执行(如需)、配置不可被 Web 访问。
Web 根目录权限:所有者可管,Nginx 只读
典型 Web 根目录(如 /var/www/example.com)应由部署用户(如 deploy)拥有,Nginx 工作进程仅需读取权限:
- 目录权限设为
755(rwxr-xr-x):所有者可读写执行,组和其他用户仅可读、可进入 - 静态文件(HTML/CSS/JS/图片)设为
644(rw-r--r--):所有者可读写,Nginx 和其他用户仅可读 - 避免对整个根目录使用
775或777,尤其禁止chmod -R 777 /var/www这类高危操作
敏感目录严格隔离:禁止 Web 可访问
配置文件、日志、上传临时目录、应用缓存等不应置于 Web 根下,更不可被浏览器直接请求:
- 将
config/、storage/、vendor/等目录移出 Web 根,或用 Nginxlocation显式拒绝访问:location ~ ^/(config|storage|vendor)/ { return 403; } - 上传目录(如
uploads/)若需 Web 访问,仅允许读取,禁用脚本执行:location ~ \.(php|pl|py|jsp|sh|cgi)$ { deny all; } - 日志目录(如
/var/log/nginx/example.com/)权限设为750,属主为root:adm或root:www-data,Nginx 进程无需写入权限(由 logrotate 或 Nginx 主进程管理)
Nginx 配置与运行时权限:分离管控权与执行权
Nginx 主配置(/etc/nginx/nginx.conf)及站点配置(/etc/nginx/sites-enabled/)必须限制写权限:
- 配置文件属主设为
root:root,权限为644;nginx.conf中包含include的子配置可设为640,组为www-data(便于部署工具更新) - Nginx worker 进程以非 root 用户(如
www-data)运行,因此pid文件、缓存目录(proxy_temp_path、fastcgi_temp_path)需对该用户可写,但不应开放给其他用户:chown -R www-data:www-data /var/lib/nginx,权限设为700或750 - SSL 证书私钥(
.key文件)必须设为600,属主为root,Nginx 主进程读取后交由 worker 复制内存,不依赖 worker 直接读取私钥
自动化部署中的权限控制要点
CI/CD 或脚本部署时,权限易被忽略,需显式加固:
- 部署后立即重置权限:
find /var/www/example.com -type d -exec chmod 755 {} \;find /var/www/example.com -type f -exec chmod 644 {} \;chmod 600 /var/www/example.com/.env - 上传目录单独授权:
chown deploy:www-data /var/www/example.com/uploadschmod 775 /var/www/example.com/uploads(仅当需 PHP 写入且部署用户与 Web 组协同时) - 禁止在部署脚本中使用
umask 000或chmod -R a+w,应默认以安全 umask(如022)运行










