この質問は、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 特に危険なケースです。