デフォルトのコアファイル権限を設定する方法

デフォルトのコアファイル権限を設定する方法

私が実行するプロセスは時々コアファイルを生成し、ファイルには次のファイル権限があります。

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_patternsysctl設定をプログラムに設定することです(パイプ文字で始める必要があります|)。コアファイルが作成されると、カーネルはこのプログラムをディスクにダンプするのではなく、このプログラムを呼び出します。プログラムは、必要な権限でコアファイルを生成できる必要があります。

これを実行するプログラムの例には、および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コマンドから引用符が削除されたため、複数のコマンドを実行できません。

  1. bash -c "echo 1; echo 2"echo(最初のパラメータ)のみを受信するため失敗します。
  2. echo 1; echo 2また、失敗して1;エコーさechoれます2。猫を捕まえられないように使用したり、&&必要な|ものにも同様に適用されます。>レッドハットにおすすめ絶対パスにスクリプトを作成します。

~からman 5 core

  • プログラムは絶対パス名(またはルートディレクトリ/への相対パス名)を使用して指定する必要があります。文字の直後に来なければなりません。
  • プロセスは現在の作業ディレクトリをルートディレクトリとして起動します。必要に応じて、%P指定子に指定された値を使用して/ proc / [pid] / cwdをダンププロセスの場所に変更して、ダンププロセスの作業ディレクトリを変更できます。
  • カーネル5.3.0以降、パイプラインテンプレートはテンプレートパラメータが拡張される前にパラメータリストにスペース分割されます。

関連情報