将来のファイルの権限を減算する代わりに強制するにはどうすればよいですか?

将来のファイルの権限を減算する代わりに強制するにはどうすればよいですか?

logs/error.logUbuntu Linuxに権限660rw-rw----)または640()を持つファイルを生成するプログラムがありますrw-r-----。ただし、ファイル権限は常に666rw-rw-rw-)(プログラムがファイルを作成するときを含む)であることを望みます。

限界:

  1. プログラムを変更できません。したがって、660プログラムが新しいファイルを使用するモードを変更することはできません。
  2. プログラムはいつでもファイルを再生成できます。したがって、手動で実行される単一のソリューションはchmod適切ではありません。
  3. 一部の権限を追加する必要がありますが、縮小しないでください。したがって、umaskどちらもsetfacl適切ではありません。

答え1

これを使用して、inotifyファイルまたはディレクトリが作成された場所を追跡して、作成時にその権限を更新できます。

答え2

他のすべての通常のオプションが失敗した場合(たとえば、Dockerホストで実行したいすべての操作と互換性のある不思議なログジェネレータに適したユーザー/グループを選択したり、正しい権限を使用するようにプログラム設定を変更するなど)、このトリックを使用できます。ありますLD_PRELOAD

ミステリープログラムがファイルを生成するために使用するシステムコールをフックします(creatまたは可能性があるopen、確認strace)。次に、ファイル名を比較し、modeログファイルのみを変更します。

これを行うには、C言語でプログラムする方法を知る必要があります。

答え3

最後の解決策Dockerコンテナ内で実行します。

#!/bin/bash
cd logs
umask 0
find . -type f -not -name ".gitignore" -exec chmod 666 \{\} \;
inotifywait -rmq -e attrib -e create -e moved_to --format "%w%f" --exclude "/\.gitignore" . | xargs -n1 -d"\n" chmod 666

このソリューションは誰でも書き込み可能な権限を設定するため、そのまま使用しないことをお勧めします。より安全な権限を使用する別の方法を見つけてください。

ヒントをくれたAlexDに感謝!

関連情報