Nginx安全加固核心是建立可验证、可重复、自动发现偏差的定期检查机制,围绕“谁在用、谁能碰、碰了能干啥”闭环验证进程用户、权限配置与访问边界,并通过脚本固化巡检逻辑纳入定时任务。

Nginx 目录结构中的核心组件安全加固,关键不是“改完就完”,而是建立可验证、可重复、能自动发现偏差的定期检查机制。重点围绕「谁在用」「谁能碰」「碰了能干啥」三件事闭环验证。
确认运行用户与进程权限是否持续合规
配置写对了不等于生效,reload 漏掉或失败时,worker 还在以 root 跑——这是最常见隐患。
- 每小时执行一次检查:
ps aux | grep nginx | grep -v grep | awk '{print $1}' | sort -u,确保输出只有 nginx 或 www-data,不含root或nobody - 验证用户能力:
sudo -u nginx id应显示/sbin/nologin、无家目录、不属于wheel或sudo组 - 若发现 root 进程,立即执行
nginx -t && nginx -s reload,并检查/etc/nginx/nginx.conf中user指令是否未被注释或拼错
校验关键路径的属主与权限是否始终最小化
手动复制配置、脚本误操作、自动化部署遗漏都可能导致权限回退,必须按路径逐项盯死。
-
/etc/nginx/:属主必须为root:root,目录权限严格755,配置文件如nginx.conf权限应为640 -
/var/log/nginx/:属主建议root:nginx,权限750;access.log和error.log必须可被 nginx 写入但不可被普通用户读取 -
/usr/share/nginx/html/(或自定义静态资源目录):属主root:nginx,权限750,禁止 nginx 用户修改,仅允许读取 - 快速巡检命令:
ls -ld /etc/nginx /var/log/nginx /usr/share/nginx/html && ls -l /etc/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或sudo -u nginx sh必须拒绝;若进入 shell,说明创建用户时未设-s /sbin/nologin
用轻量脚本固化检查逻辑并纳入定时任务
人工检查易漏、难坚持,把上述逻辑打包成脚本,每周自动跑一次,异常即告警。
- 编写
/usr/local/bin/check-nginx-perms.sh,包含进程用户检查、关键路径ls -l输出比对、三项模拟操作测试 - 加入 cron:
0 3 * * 1 /usr/local/bin/check-nginx-perms.sh >> /var/log/nginx/perms-check.log 2>&1(每周一凌晨3点执行) - 脚本末尾加判断:若任一检查失败,用
mail -s "Nginx权限异常" admin@example.com或企业微信机器人推送


















