我正在使用 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 }