在CentOS系统中,使用yum包管理器安装的Nginx,默认日志路径为/var/log/nginx/,包含两个核心日志文件:
access.log):记录所有客户端请求的详细信息(如IP地址、请求URL、响应状态码等);error.log):记录Nginx运行过程中的错误信息(如配置错误、请求失败等)。Nginx服务默认以nginx用户身份运行(可通过ps aux | grep nginx确认),因此日志文件的属主需设置为nginx,以确保进程有权限写入日志。
若日志文件已存在(如首次安装Nginx后),需通过以下命令调整权限:
# 创建日志目录(若不存在)
sudo mkdir -p /var/log/nginx
# 创建空日志文件(若不存在)
sudo touch /var/log/nginx/access.log /var/log/nginx/error.log
# 设置属主为nginx,属组为nginx(或其他匹配的系统组,如adm)
sudo chown nginx:nginx /var/log/nginx/access.log /var/log/nginx/error.log
# 设置权限:属主可读写(6),其他用户无权限(0)
sudo chmod 600 /var/log/nginx/access.log /var/log/nginx/error.log
说明:
600遵循“最小权限原则”,仅允许nginx用户读写日志,防止其他用户(包括root)非法访问或篡改日志内容。为防止日志文件无限增长占用磁盘空间,需使用logrotate工具定期轮转日志(如按天/周分割、压缩旧日志)。配置文件通常位于/etc/logrotate.d/nginx,内容示例如下:
/var/log/nginx/*.log {
daily # 每天轮转一次(可根据需求改为weekly/monthly)
missingok # 若日志文件不存在,忽略错误
rotate 30 # 保留最近30个日志文件(符合等保180天留存要求)
compress # 压缩旧日志(节省空间)
delaycompress # 延迟压缩(如保留最近1个未压缩日志,便于实时查询)
notifempty # 若日志为空,不执行轮转
create 0640 nginx nginx # 轮转后创建新日志,权限640,属主nginx,属组nginx
sharedscripts # 所有日志轮转完成后,统一执行postrotate脚本
postrotate
# 向Nginx主进程发送信号,重新打开日志文件
[ -f /run/nginx.pid ] && kill -USR1 $(cat /run/nginx.pid)
endscript
}
关键说明:
create指令需与初始日志权限一致(0640,属主nginx),确保轮转后的日志仍能被Nginx正常写入。rotate数值时,需平衡磁盘空间与日志留存需求(如rotate 30对应约30天的日志留存)。禁止过度授权:
不要将日志目录或文件的权限设置为777(所有人可读写),或属组设置为root(除非必要)。过度授权会增加日志被篡改或窃取的风险。
定期检查权限:
通过以下命令定期核查日志文件权限,确保存在异常变更:
ls -l /var/log/nginx/
正常输出应类似:
-rw------- 1 nginx nginx 1024 Oct 30 10:00 access.log
-rw------- 1 nginx nginx 512 Oct 30 10:00 error.log
结合SELinux增强安全:
若系统启用SELinux(默认开启),需确保SELinux上下文正确。可通过以下命令修复:
sudo restorecon -Rv /var/log/nginx
SELinux会限制Nginx仅能访问其属主的日志文件,进一步提升安全性。
nginx:sudo chown -R nginx:nginx /var/log/nginx
600:sudo chmod 600 /var/log/nginx/*.log
sudo ausearch -m avc -ts recent | audit2allow
根据提示生成并应用SELinux策略。