GNU/Linux >> Linux の 問題 >  >> Linux

core_pattern の編集が制限されているのはなぜですか?

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 インスタンスで実行されます これは root として実行されるため、書き込みは成功します。

kernel.core_pattern の設定を root だけに許可する必要がある理由 sysctl は、コマンドを指定できるようにすることです。これはグローバル設定であるため、このコマンドはどのユーザーでも実行できます。実際、これはさまざまな程度のすべての sysctl 設定に当てはまります。これらはすべてグローバル設定であるため、ルートのみが変更できます。 kernel.core_pattern 特に危険なケースです。


Ubuntu 18.04 では、次のようにパターンを更新できます:

sudo bash -c 'echo "/data/app_crash/%t.%e.core.%p" > /proc/sys/kernel/core_pattern'

/etc/sysctl.conf も更新できます 次の行を追加します:

kernel.core_pattern = /data/app_crash/%t.%e.core.%p

ただし、 kernel.core_pattern を設定する行は他にありませんが、 /etc/sysctl.conf で または /etc/sysctl.d/* 、再起動後、パターンは再びデフォルト値に設定されます:

$ sudo sysctl -a | grep kernel.core_pattern
kernel.core_pattern = |/usr/share/apport/apport %p %s %c %d %P

apport であることが判明しました 私が行った変更を上書きしていました。 apport をアンインストールしました sudo apt-get remove apport で その後、私の変更が使用されました。


Linux
  1. Linux – Core_patternの編集が制限されているのはなぜですか?

  2. Linux –カーネルがInitを実行できないのはなぜですか?

  3. 非ルートとして編集した後、ファイルをルートとして保存します

  1. カーネルがプロセスと同じアドレス空間にマップされるのはなぜですか?

  2. Centos がまだ最新のカーネルを使用していない理由

  3. sudoedit:なぜ sudo vi で使用するのですか?

  1. Ubuntu 12.04 でカーネル共有メモリが 0 になるのはなぜですか?

  2. 「sudo」パスワードが「su root」パスワードと異なるのはなぜですか

  3. Linux のカーネルがモノリシックであるのに、なぜ Linux は Unix に似ているのですか?