私が実行するプロセスは時々コアファイルを生成し、ファイルには次のファイル権限があります。
server:~ # ls -l /mnt/process/core/core_segfault
-rw------- 1 root root 245760 Dec 2 11:29 /mnt/process/core/core_segfault
問題は、root
アンケートのためにユーザーだけを開くことができることです。一方、私は常にアクセス権を手動で設定しなくても、アクセス権を持っている人なら誰でも読むことができることを願っています。
基本権限を次のように設定するにはどうすればよいですか?-RW-RW-RW-?
答え1
コアファイルには、競合時のプロセスの完全なメモリレイアウトが含まれているため、機密情報を含めることができます。そのため、コアファイルが作成されると、所有権は競合時にプロセスの uid に設定され、権限は非常に制限されます。簡単に変更できる設定はありません。
しかし、あなたは何をしますか?できるあなたがすることは、kernel.core_pattern
sysctl設定をプログラムに設定することです(パイプ文字で始める必要があります|
)。コアファイルが作成されると、カーネルはこのプログラムをディスクにダンプするのではなく、このプログラムを呼び出します。プログラムは、必要な権限でコアファイルを生成できる必要があります。
これを実行するプログラムの例には、およびsystemd-coredump
がありますapport
。
答え2
これは私にとって効果的です。 600の代わりに644を使用して、誰もがファイルを読み取ることができます。読んだ後ワットコメント。
sudo bash -c 'echo "|/usr/bin/env tee /proc/%P/cwd/core.%h.%e.%p" \
> /proc/sys/kernel/core_pattern'
詳細
このソリューションを拡張するには、以下の制限事項をお読みください。スクリプトの問題を解決するには、以下を使用してdmesg
カーネルログを確認してください。$LINUX/fs/coredump.c::do_coredump
すべての引数がスペースで区切られたcore_patternコマンドから引用符が削除されたため、複数のコマンドを実行できません。
bash -c "echo 1; echo 2"
echo(最初のパラメータ)のみを受信するため失敗します。echo 1; echo 2
また、失敗して1;
エコーさecho
れます2
。猫を捕まえられないように使用したり、&&
必要な|
ものにも同様に適用されます。>
レッドハットにおすすめ絶対パスにスクリプトを作成します。
~からman 5 core
- プログラムは絶対パス名(またはルートディレクトリ/への相対パス名)を使用して指定する必要があります。文字の直後に来なければなりません。
- プロセスは現在の作業ディレクトリをルートディレクトリとして起動します。必要に応じて、%P指定子に指定された値を使用して/ proc / [pid] / cwdをダンププロセスの場所に変更して、ダンププロセスの作業ディレクトリを変更できます。
- カーネル5.3.0以降、パイプラインテンプレートはテンプレートパラメータが拡張される前にパラメータリストにスペース分割されます。