この質問は、abrt-hook-cppがインストールされているコアファイルはどこにありますか?に関連しています。 。
意図的にクラッシュするプログラムのコアファイルを生成しようとしていたとき、最初は、コアファイルの生成がabrt-ccppによって妨げられているように見えました。そこで、/proc/sys/kernel/core_pattern
を手動で編集しようとしました vimで:
> sudo vim /proc/sys/kernel/core_pattern
ファイルを保存しようとすると、vimがこのエラーを報告しました:
"/proc/sys/kernel/core_pattern" E667: Fsync failed
これは権限の問題だと思ったので、権限を変更しようとしました:
> sudo chmod 666 /proc/sys/kernel/core_pattern
chmod: changing permissions of '/proc/sys/kernel/core_pattern': Operation not permitted
最後に、この投稿に基づいて、私はこれを試しました:
>sudo bash -c 'echo /home/user/foo/core.%e.%p > /proc/sys/kernel/core_pattern'
これはうまくいきました。
実用的な解決策に基づいて、私もこれらを試しましたが、失敗しました:
> echo "/home/user/foo/core.%e.%p" > /proc/sys/kernel/core_pattern
-bash: /proc/sys/kernel/core_pattern: Permission denied
>
> sudo echo "/home/user/foo/core.%e.%p" > /proc/sys/kernel/core_pattern
-bash: /proc/sys/kernel/core_pattern: Permission denied
質問 :
なぜ編集しているのですか、chmod
ing、およびecho
のリダイレクト ファイルに出力/proc/sys/kernel/core_pattern
すべて失敗し、sudo bash...
の指定された呼び出しのみ ファイルを上書き/編集できましたか?
質問 :
具体的には、sudo
を呼び出そうとします 上記の失敗した試みで:なぜ彼らは失敗したのですか? sudo
だと思いました 次のコマンドをroot権限で実行しました。これにより、Linuxで何でもできると思いました。
承認された回答:
procfsのエントリは、アドホックコードによって管理されます。 /proc/sys
の下のファイルに権限と所有権を設定するコード (proc_sys_setattr
)EPERMによる権限と所有権の変更を拒否します。したがって、これらのファイルの権限や所有権を変更することはできません。完全に停止してください。このような変更は実装されていないため、rootであっても役に立ちません。
root以外のユーザーとして書き込もうとすると、アクセス許可エラーが発生します。 sudo echo "/home/user/foo/core.%e.%p" > /proc/sys/kernel/core_pattern
を使用しても 、root以外のユーザーとして書き込もうとしています:sudo
echo
を実行します ルートとして、ただしリダイレクトはsudo
の元のシェルで発生します が実行され、そのシェルには昇格された特権がありません。 sudo bash -c '… >…'
を使用 、リダイレクトは、sudo
によって起動されたbashインスタンスで実行されます ルートとして実行されるため、書き込みは成功します。
ルートのみがkernel.core_pattern
を設定できるようにする必要がある理由 sysctlは、コマンドを指定できるようにすることであり、これはグローバル設定であるため、このコマンドはすべてのユーザーが実行できます。実際、これはさまざまな程度のすべてのsysctl設定に当てはまります。これらはすべてグローバル設定であるため、rootのみが変更できます。 kernel.core_pattern
特に危険なケースです。