web-dev-qa-db-ja.com

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
2
niciliketo

問題は、いくつかの古い(ローテーションされた)ログファイルにあることがわかりました。

ログが存在するディレクトリでls --scontextを実行すると、ローテーションされたログのうち2つにvar_log_tコンテキストがないことが示されました。

私はこれらの特定のファイルを削除することでこれを修正しました(それらは数ヶ月前のものでした)。

次にスケジュールされた実行時に、ログは正しくローテーションされました。

2
niciliketo

このようなもので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 }
0
seanl