プロジェクト

全般

プロフィール

バグ #77

未完了

Redmineのログがlogrotateされない

高橋 徹 さんが約6年前に追加. 3年以上前に更新.

ステータス:
解決
優先度:
通常
担当者:
カテゴリ:
Redmine
対象バージョン:
開始日:
2018/02/12
期日:
進捗率:

80%

予定工数:
重要度:
軽微

説明

Redmineのログ(/var/lib/redmine/log/production.log)が、logrotate対象に設定しても
ログローテーションされない。

/var/log/audit/audit.logを確認したら次のメッセージが記録されていた。

type=AVC msg=audit(1517256361.226:212391): avc:  denied  { read } for  pid=18562
 comm="logrotate" name="redmine" dev=vda3 ino=6815801 scontext=system_u:system_r
:logrotate_t:s0-s0:c0.c1023 tcontext=unconfined_u:object_r:var_lib_t:s0 tclass=l
nk_file

高橋 徹 さんが約6年前に更新

  • ステータス新規 から 進行中 に変更
  • 進捗率0 から 50 に変更

audit.logを読み解くと

  • logrotateプロセスのSELinuxコンテキストは
    system_u system_r logrotate_t
  • /var/lib/redmine/log/production.logふぁいるのSELinuxコンテキストは
    unconfined_u object_r var_lib_t

ここで、通常logrotate対象のログファイルが置かれている/var/logディレクトリ以下のログファイルのSELinuxコンテキストを調べてみると、var_log_tが付いているものが多い。

解決方針案として、/var/lib/remdine/log/ディレクトリ下のファイルに対して var_log_t コンテキストを永続的に付与する方法がありそうだ。
他には、logrotate_tのプロセスからvar_lib_tのファイルにアクセスできるようにするか・・・。

semanageでディレクトリ・ファイルにコンテキストを追加する。

$ sudo semanage fcontext -a -t var_log_t '/var/lib/redmine/log(/.*)?'

この設定は次のファイルに記載される。

  • /etc/selinux/targeted/contexts/files/file_contexts.local
# This file is auto-generated by libsemanage
# Do not edit directly.

/var/lib/git(/.*)?    system_u:object_r:httpd_git_rw_content_t:s0
/var/lib/git/[^/]+/hooks(/.*)?    system_u:object_r:httpd_git_script_exec_t:s0
/var/lib/redmine/log(/.*)?    system_u:object_r:var_log_t:s0

次に既存のディレクトリ・ファイルにコンテキストを設定する。

$ sudo restorecon -Frvv /var/lib/redmine/log
restorecon reset /var/lib/redmine-3.4-stable/log context unconfined_u:object_r:var_lib_t:s0->system_u:object_r:var_lib_t:s0
restorecon reset /var/lib/redmine-3.4-stable/log/unicorn.stdout.log context unconfined_u:object_r:var_lib_t:s0->system_u:object_r:var_lib_t:s0
restorecon reset /var/lib/redmine-3.4-stable/log/unicorn.stderr.log context unconfined_u:object_r:var_lib_t:s0->system_u:object_r:var_lib_t:s0
restorecon reset /var/lib/redmine-3.4-stable/log/delete.me context unconfined_u:object_r:var_lib_t:s0->system_u:object_r:var_lib_t:s0
restorecon reset /var/lib/redmine-3.4-stable/log/production.log context unconfined_u:object_r:var_lib_t:s0->system_u:object_r:var_lib_t:s0

うーむ、本来はvar_log_tが設定されるはずが、var_lib_tとなっている。また、対象ファイルがシンボリックリンク先の実体になっているのも気になる・・・。

要調査

高橋 徹 さんが約6年前に更新

試み1

semanageで指定するパスをワイルドカード指定してみる。

$ sudo semanage fcontext -d '/var/lib/redmine/log(/.*)?'
$ sudo semanage fcontext -a -t var_log_t '/var/lib/redmine.*/log(/.*)?'
$ sudo restorecon -Frvv /var/lib/redmine
  :

/var/lib/redmine/log のコンテキストは

ls -Z
-rw-rw-r--. redmine redmine system_u:object_r:var_log_t:s0   delete.me
-rw-rw-r--. redmine redmine system_u:object_r:var_log_t:s0   production.log
-rw-r--r--. root    root    system_u:object_r:var_log_t:s0   unicorn.stderr.log
-rw-r--r--. root    root    system_u:object_r:var_log_t:s0   unicorn.stdout.log

と var_log_tが付いた。

高橋 徹 さんが約6年前に更新

まだ解決せず。audit.logには

type=AVC msg=audit(1519497002.867:238973): avc:  denied  { read } for  pid=16531 comm="logrotate" name="redmine" dev=vda3 ino=6815801 scontext=system_u:system_r:logrotate_t:s0-s0:c0.c1023 tcontext=system_u:object_r:var_lib_t:s0 tclass=lnk_file

とある(日時は2018-02-25T03:30+09:00)。

/var/lib/redmine のコンテキストは、たしかに var_log_t はついていない。
そこで、次を実行して様子を見ることにする。

$ sudo semanage fcontext -a -t var_log_t '/var/lib/redmine'

$ sudo restorecon -Frvv /var/lib/redmine
 :

高橋 徹 さんが約6年前に更新

  • ステータス進行中 から 解決 に変更
  • 進捗率50 から 80 に変更

logrotateされるようになった。

なお、シンボリックリンクの/var/lib/redmine にはvar_log_tのラベルが付いているが、実体の/var/lib/redmine-3.4-stableには付いていない。

高橋 徹 さんが約6年前に更新

  • ステータス解決 から フィードバック に変更
  • 進捗率80 から 50 に変更

Redmineの画像がダウンロードできなくなってしまった。
Wikiなどで画像は表示されるが、画像をクリックしダウンロードしようとするとエラー(403)になる。
redmineのログ上は、正常に完了(200)している。

Started GET "/attachments/download/624/idea_start-1.png" for 127.0.0.1 at 2018-02-27 21:13:01 +0900
Processing by AttachmentsController#download as HTML
  Parameters: {"id"=>"624", "filename"=>"idea_start-1.png"}
  Current user: torutk (id=3)
Sent file /var/lib/redmine-3.4-stable/files/2017/06/170611005222_idea_start-1.png (0.1ms)
Completed 200 OK in 17ms (ActiveRecord: 5.1ms)

nginxのログを見ると、

2018/02/27 21:13:02 [error] 12926#12926: *7978595 open() "/var/lib/redmine/files
/2017/06/170611005222_idea_start-1.png" failed (13: Permission denied), client: 
116.0.158.34, server: www.torutk.com, request: "GET /attachments/download/624/id
ea_start-1.png HTTP/1.1", upstream: "http://unix:/tmp/unicorn_redmine.sock/attac
hments/download/624/idea_start-1.png", host: "www.torutk.com", referrer: "http:/
/www.torutk.com/attachments/624" 

と、エラーになっている。
他にも多数のファイルがnginxでエラーになっているので、今回の処置は「まずい」。

高橋 徹 さんが約6年前に更新

  • ステータスフィードバック から 進行中 に変更

タイプ var_log_t の設定を削除することとします。

/etc/selinux/targetd/contexts/files/file_contexts.local には、今回の設定で次が追加されている。

/var/lib/redmine.*/log(/.*)?    system_u:object_r:var_log_t:s0
/var/lib/redmine    system_u:object_r:var_log_t:s0

まず、これを削除する。

$ sudo semanage fcontext -d /var/lib/redmine
$ sudo semanage fcontext -d '/var/lib/redmine.*/log(/.*)?'
$ sudo restorecon -Frvv /var/lib/redmine

これで画像のサムネイルから原寸表示、画像のダウンロードなどができるようになりました。

logrotateの問題は再度取り組みとします。

高橋 徹 さんが約6年前に更新

SELinuxの観点では、logrotated (logrotate_tドメイン)は /var/log以下(var_log_tタイプ)へアクセスするポリシーなので、redmineのログを、これまでの /var/lib/redmine/log から /var/log/redmine に移動させるのが楽と思われる。

まず、/var/log/redmine/ を作成し、次に /var/lib/redmine/log/* を、/var/log/redmine/に移動した。

/etc/logrotate.d/redmineを次のように修正

- /var/lib/redmine/log/*log {
+ /var/log/redmine/*log {
    missingok
    notifempty
    copytruncate
    compress
    su redmine redmine
}

しばし様子見

高橋 徹 さんが約6年前に更新

logrotateを手動実行する方法

デバッグ

logrotate -fd /etc/logrotate.d/redmine

実行

logrotate -f /etc/logrotate.d/redmine

デバッグでは詳細なメッセージが出る。見てみると、エラーが出ていた。

error: /etc/logrotate.d/redmine:6 unknown option 'su' -- ignoring line
error: /etc/logrotate.d/redmine:6 unexpected text

logrotate に suオプションが追加されたのはバージョン3.8以降。
CentOS 6.9のlogrotateは、バージョン3.78と僅かに足りず。

高橋 徹 さんが約6年前に更新

redmine の標準機能でログローテーションをするのがよさそう。
production.logのローテート(Redmine.JPのFAQ)

高橋 徹 さんがほぼ4年前に更新

  • ステータス進行中 から 解決 に変更
  • 進捗率50 から 80 に変更

高橋 徹 さんが3年以上前に更新

  • カテゴリRedmine にセット

他の形式にエクスポート: Atom PDF