最近、業務でLinuxサーバのログローテーション設定をしていた際、
error: skipping "/work/log/test.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.
このようなエラーが出てきました。
色々調べた結果、解決策が分かりましたので、同じ事象で悩まれている方の手助けになればと解決策をご説明いたします。
ログローテーションエラーの経緯
まず、ログローテーション対象は、/work/log/test.logです。
# ll /work/
drwxrwxrwx. 2 root root 22 11月 1 23:13 log
# ll /work/log/
-rw-r--r--. 1 root root 0 11月 1 23:12 test.log
ここですでにエラー原因が埋め込まれていますが、対象ログであるtest.logの親ディレクトリ/work/logの権限は777になっております。
また、ログローテーション設定は、/etc/logrotate.d/testです。
# cat /etc/logrotate.d/test
/work/log/test.log
{
create
missingok
ifempty
dateext
daily
rotate 3
}
ログローテーションの設定には、特に問題はありません。
そして、以下のコマンドで強制的にログローテーションを実行すると、
# logrotate -f /etc/logrotate.d/test
error: skipping "/work/log/test.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.
と、冒頭でご説明したエラーが発生しました。
エラー原因
上記にもあるように、
ログローテーション対象ログの親ディレクトリに、グループあるいはその他ユーザのwrite権限がある
ことがエラーの原因のようです。
対応策
ということで、ログローテーション対象ログの親ディレクトリの権限を755に変更して、リトライします。
# chmod 755 /work/log/
# ll /work/
drwxr-xr-x. 2 root root 22 11月 1 23:13 log
/work/logディレクトリの権限が、755に変更されています。
そして、改めてログローテーションを実行すると、
# logrotate -f /etc/logrotate.d/test
# ll /work/log/
-rw-r--r--. 1 root root 0 11月 1 23:15 test.log
-rw-r--r--. 1 root root 0 11月 1 23:12 test.log-20221101
ログローテーションコマンド実行後もエラーは発生せず、正常にローテーション後のファイル"test.log-20221101"が生成されていることがわかります。
まとめ
今回は、ログローテーション対象ログの親ディレクトリのパーミッションエラーによる、ログローテーションエラーの原因と、解決策をご説明しました。
今回は親ディレクトリのパーミッションを755に変更する解決策をご説明しましたが、他にもログローテーション設定を変更する解決策もあるようです。
下記サイトに記載されておりますので、ご参考までに。
https://recruit.gmo.jp/engineer/jisedai/blog/logrotate/