Centos

SELinux - logrotate 不旋轉 NGINX 日誌

  • April 2, 2015

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

引用自:https://serverfault.com/questions/674254