No.490


【Linux】logrotateのエラー解消【logrotate】

rootが実行しているのにpermissionエラー…なぜだ…

 長く運用しているシステムでは、経験したことのない事態が発覚することがある。

 今回発覚したのはディスク容量アラートが発端で、調べてみると /var/log 以下が異常に肥大していることに気が付いた。

 logrotateしてるのになんで? と思って確認した顛末とその対応を備忘録としてメモ。


エラー内容

 logrotateをデバッグモード&詳細情報モードで原因を探ってみた。

logrotate -dv /etc/logrotate.conf

 すると出力結果の中に下記のようなエラーが出力された。
 ディレクトリに所有ユーザー以外の書き込み権限があるので、セキュリティ面からスキップされてしまったようだ。

 たしかに(身に覚えはないけど)エラーになっているディレクトリのパーミッションは 777 になっていた。これが原因か。

error: skipping "/var/log/xxx/xxx.log" because parent directory has insecure permissions (It's world writable or writable by group which is not "root") Set "su" directive in config file to tell logrotate which user/group should be used for rotation.

解決方法

 /etc/logrotate.d/ の該当ディレクトリの定義に su を追加してやろう。

 例としてapacheのログなら下記のようになる。

vi /etc/logrotate.d/httpd

 下記の内容を追加する。

/var/log/httpd/*log {
    su root root
    ...
}

 グループ名とユーザー名はそのディレクトリの所有者名にあわせればOK。


オススメしない対応法

 対象ディレクトリのパーミッションを、ユーザーのみ書き込み可の 755 などにしてしまえば実行されるようにはなる。

chmod -R 755 対象ディレクトリ

 しかし、もともとディレクトリのパーミッションを変更する何かがバックグランドで動いているわけで、いつの間にか 777 などに戻されてしまうことも考えられる。というか経験した。

 そういうわけで、パーミッションの変更はお進めしない。一時しのぎと考えよう。