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 }