logs/error.log
Ubuntu Linuxに権限660
(rw-rw----
)または640
()を持つファイルを生成するプログラムがありますrw-r-----
。ただし、ファイル権限は常に666
(rw-rw-rw-
)(プログラムがファイルを作成するときを含む)であることを望みます。
限界:
- プログラムを変更できません。したがって、
660
プログラムが新しいファイルを使用するモードを変更することはできません。 - プログラムはいつでもファイルを再生成できます。したがって、手動で実行される単一のソリューションは
chmod
適切ではありません。 - 一部の権限を追加する必要がありますが、縮小しないでください。したがって、
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に感謝!