Nginx权限检查需验证运行用户、文件权限和用户能力三方面:确认worker进程以低权限用户(如nginx)运行;/etc/nginx等目录权限须符合755/640等最小化要求;通过sudo -u nginx模拟操作验证无越权访问。

定期检查 Nginx 权限配置是否规范,核心是验证「谁在运行」、「能访问什么」、「是否最小化」三个层面。不能只看配置文件写了什么,必须结合进程实际状态、文件系统权限和用户能力做交叉验证。
确认 worker 进程运行用户是否合规
直接查看当前活跃的 worker 进程 UID/GID,避免配置已改但未重载:
- 运行
ps aux | grep nginx | grep -v grep,确认主进程和 worker 进程的 USER 列是否为预期低权限用户(如nginx或www-data),而非root - 若看到 root 进程,说明未正确 reload,或
user指令未生效;若看到 nobody,需评估该用户是否被其他服务共用,建议改用专用用户 - 补充验证:执行
sudo -u nginx id,确认该用户无登录 shell(/sbin/nologin)、无家目录、不属于 wheel 或 sudo 组
核验关键目录与文件的属主和权限
权限不匹配常出现在配置更新或手动复制后,需按最小权限原则逐项检查:
-
/etc/nginx/:应属root:root,权限严格控制为755(目录)和640(配置文件如nginx.conf),禁止 world-writable -
/var/log/nginx/:日志目录应属root:nginx或nginx:nginx,权限750;确保error.log和access.log可被 nginx 进程写入,但普通用户不可读 -
/usr/share/nginx/html/(静态资源目录):应属root:nginx,权限750;禁止 nginx 用户修改,仅允许读取 - 快速检查命令:
ls -ld /etc/nginx /var/log/nginx && ls -l /etc/nginx/nginx.conf /var/log/nginx/*.log
测试低权限用户实际可操作范围
模拟 nginx 用户视角,验证其是否越权——这是最容易被忽略却最有效的验证方式:
- 尝试读取敏感系统文件:
sudo -u nginx cat /etc/shadow,应返回 Permission denied;若成功,说明用户组配置错误或文件权限过松 - 尝试写入配置目录:
sudo -u nginx touch /etc/nginx/test.tmp,应失败;若成功,说明/etc/nginx权限设为 777 或用户被误加进 root 组 - 检查能否执行危险命令:
sudo -u nginx /bin/bash应拒绝登录;若进入 shell,说明创建用户时未指定-s /sbin/nologin
建立自动化检查脚本辅助巡检
把上述检查点固化为简单脚本,纳入日常运维或 CI/CD 流程中:
- 编写一个
check-nginx-perms.sh,包含进程用户校验、关键路径ls -l输出比对、模拟操作测试三部分 - 配合 cron 每周执行一次,并将结果输出到日志;异常时通过邮件或企业微信告警
- 示例判断逻辑:
if [ "$(ps -o user= -C nginx | head -1 | xargs)" != "nginx" ]; then echo "ALERT: nginx not running as nginx user"; fi


















