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
などに戻されてしまうことも考えられる。というか経験した。
そういうわけで、パーミッションの変更はお進めしない。一時しのぎと考えよう。