核心是确保nginx worker进程对alias目录及其父路径具备r-x权限(如755/750),禁止非必要写与执行,通过chown/chmod设权、location拦截隐藏文件及internal限制内部访问,并用sudo -u模拟验证。

物理路径的用户权限配置,核心是确保 Nginx 工作进程能读取文件、遍历目录,同时不赋予多余权限,防止越权访问或执行风险。alias 指向的目录通常不在 web 根下,更需严格控制权限边界。
确保 Nginx 进程用户对 alias 目录有最小必要权限
alias 路径(如 /mnt/data/uploads/)必须被 Nginx worker 进程用户(常见为 www-data 或 nginx)可读、可进入:
- 目录需具备 r-x 权限(即至少 755 或 750):x 权限不可省略,否则无法进入子目录或列出内容
- 父级路径(如 /mnt/data)也必须有 r-x 权限,否则 Nginx 无法逐层访问到底层 alias 目录
- 执行命令示例:
sudo chown -R www-data:www-data /mnt/data/uploads
sudo chmod -R 755 /mnt/data/uploads
禁止执行与写入,除非业务明确需要
静态资源目录(如映射 /static/ 到 /opt/build/static/)原则上不应允许执行脚本或用户上传:
- 所有文件设为只读:find /opt/build/static -type f -exec chmod 644 {} \;
- 目录保持 755,禁用写权限(避免攻击者覆盖或创建恶意文件)
- 若该目录用于上传(如 /uploads/),则仅开放对应子目录的写权限,主 alias 目录仍保持 755,不开放全局写入
隔离敏感子路径,配合 location 限制访问
alias 目录内可能包含不应直接暴露的子目录(如 .git、config/、logs/),需主动拦截:
- 在 alias 所在的 location 块内嵌套正则匹配:
location ~ ^/uploads/\. { deny all; } - 或统一禁止隐藏文件:
location ~ /\. { deny all; } - 对非公开子路径(如 /uploads/internal/),可用 internal 指令强制仅限内部重定向访问:
location /uploads/internal/ { internal; alias /mnt/data/internal/; }
验证权限是否生效的实用方法
不要仅依赖配置检查,应模拟 Nginx 用户实际行为验证:
- 切换到 Nginx 用户执行测试:
sudo -u www-data ls -l /mnt/data/uploads/test.jpg - 检查能否读取文件内容:
sudo -u www-data head -n1 /mnt/data/uploads/test.jpg 2>/dev/null || echo "Permission denied" - 配合 error_log 级别设为 info,查看 403 错误是否提示 “Permission denied” 或 “No such file or directory”——前者是权限问题,后者可能是路径或父目录权限缺失











