Centos
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
我發現問題出在幾個較舊的(旋轉的)日誌文件上。
在日誌所在的目錄中執行
ls --scontext
顯示 2 個旋轉日誌沒有var_log_t
上下文。我通過刪除這些特定文件(它們已有幾個月的歷史)來解決這個問題。
在下一次計劃執行時,日誌正確輪換。
它是否與您沒有使用類似的東西聲明 Logrotate 控製文件的權限這一事實有關。(注意 create 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 }