nginx配置审计核心是权限收紧、所有权明确、日志可追溯:/etc/nginx/nginx.conf及conf.d等子目录均设640、属主root属组nginx;/var/log/nginx目录750、日志文件640;必须配置user nginx nginx;并创建专用低权用户,worker进程须以nginx运行。

对 Nginx 主配置文件及子目录做访问审计,核心是“权限收紧 + 所有权明确 + 日志可追溯”,不能只改 nginx.conf 一个文件就认为安全了。
配置文件路径与权限统一收紧
所有参与运行的配置文件都必须执行一致的权限策略:
-
/etc/nginx/nginx.conf:设为
640,属主root,属组nginx -
/etc/nginx/conf.d/ 及其下所有
.conf文件:同样设为640,禁止 world 读写;否则攻击者可通过include引入恶意配置 - /etc/nginx/sites-available/ 和 /etc/nginx/sites-enabled/:若存在,权限策略同上;符号链接本身不继承权限,但目标文件必须受控
- 源码安装路径(如 /usr/local/nginx/conf/):不可忽略,权限、属主、属组策略完全一致
日志目录与文件权限分离管控
日志不是配置文件,但含大量敏感信息(IP、URL、User-Agent),必须独立审计:
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
-
/var/log/nginx/ 目录:属主
root,属组nginx,权限750 -
access.log / error.log 等日志文件:权限
640,确保只有root和nginx组成员可读 - 避免日志轮转后权限重置:检查
logrotate配置中是否包含create 640 root nginx
运行用户与进程权限强制分离
即使配置文件全锁死,若 Nginx 以 root 持久运行,仍可能被提权覆盖:
- 在
nginx.conf全局块中明确声明:user nginx nginx; - 创建专用低权限系统用户:
useradd -r -s /sbin/nologin nginx(无家目录、禁登录) - 验证效果:
ps aux | grep nginx应显示:
master 进程属root(仅监听端口、管理 worker)
worker 进程属nginx(无权修改配置或读取其他用户文件)
启用内核级访问控制增强纵深防御
文件权限是基础,SELinux 或 AppArmor 可堵住绕过漏洞:
- 确认 SELinux 处于 enforcing 模式:
getenforce - 检查 nginx 进程当前策略:
ps -Z | grep nginx - 确保
nginx_conf_t类型对/etc/nginx/**仅有读权限,禁止写和执行 - 若使用 AppArmor,需加载限制
nginx对配置目录写入的 profile










