SELinux - logrotate 未旋转 NGINX 日志

SELinux - logrotate 未旋转 NGINX 日志

我正在使用 CentOS、NGINX 和 Passenger 来为 Rails 应用程序提供服务。我已激活 SELinux,并且遇到了一系列有关 logrotate 的问题。我能够通过遵循网上的各种建议来解决大多数问题。不幸的是,logrotate 无法成功轮换我的 NGINX 日志文件。NGINX 安装在 /opt/nginx 中

这是我的 logrotate 配置文件:

/opt/nginx/logs/*log {
daily
rotate 30
missingok
notifempty
sharedscripts
delaycompress
postrotate
[ ! -f /opt/nginx/logs/nginx.pid ] || kill -USR1 `cat /opt/nginx/logs/nginx.pid`
endscript
}

这些是我在 /var/log/messages 中收到的消息

Mar  9 03:49:14 localhost setroubleshoot: SELinux is preventing /usr/sbin/logrotate from rename access on the file logrotate_temp.RTg4y3. For complete SELinux messages. run sealert -l 8c5238cd-3e95-4af6-b150-498080c862b8
Mar  9 03:49:14 localhost setroubleshoot: SELinux is preventing /usr/sbin/logrotate from rename access on the file logrotate_temp.OjvGsG. For complete SELinux messages. run sealert -l 8c5238cd-3e95-4af6-b150-498080c862b8
Mar 10 03:55:46 localhost logrotate: ALERT exited abnormally with [1]

我尝试sealert按照消息建议来更新策略,但这并不能解决问题(我怀疑这可能是因为临时文件总是有不同的名称)。

有人能建议我如何解决这个问题以便日志文件成功轮换。

-- 编辑 -- 添加输出

sudo sealert -l 8c5238cd-3e95-4af6-b150-498080c862b8

SELinux is preventing /usr/sbin/logrotate from rename access on the file logrotate_temp.NuwGkX.

*****  Plugin catchall (100. confidence) suggests  ***************************

If you believe that logrotate should be allowed rename access on the logrotate_temp.NuwGkX file by  default.
Then you should report this as a bug.
You can generate a local policy module to allow this access.
Do
allow this access for now by executing:
# grep logrotate /var/log/audit/audit.log | audit2allow -M mypol
# semodule -i mypol.pp

答案1

我发现问题出在一些较旧的(轮换的)日志文件上。

在日志所在目录中运行ls --scontext显示,其中 2 个轮换日志没有上下文var_log_t

我通过删除这些特定文件(它们已经有几个月了)解决了这个问题。

在下一次预定的运行中,日志将正确轮换。

答案2

这是否与您没有使用类似这样的方式声明 Logrotate 控制文件的权限有关。(请注意创建 0644.... 行)

/var/log/nginx/*log {
     create 0644 nginx nginx
     daily
     rotate 10
     missingok
     notifempty
     compress
     sharedscripts
     postrotate
         /bin/kill -USR1 `cat /run/nginx.pid 2>/dev/null` 2>/dev/null || true
     endscript }

相关内容