GNU/Linux >> Belajar Linux >  >> Linux

Linux – Mengapa Mengedit Core_pattern Dibatasi?

Pertanyaan ini terkait dengan Di mana file inti dengan abrt-hook-cpp diinstal? .

Ketika saya mencoba membuat file inti untuk program yang sengaja mogok, pada awalnya pembuatan file inti tampaknya terhalang oleh abrt-ccpp. Jadi saya mencoba mengedit /proc/sys/kernel/core_pattern secara manual dengan vim:

> sudo vim /proc/sys/kernel/core_pattern

Ketika saya mencoba menyimpan file, vim melaporkan kesalahan ini:

"/proc/sys/kernel/core_pattern" E667: Fsync failed

Saya pikir ini adalah masalah izin, jadi saya mencoba mengubah izin:

> sudo chmod 666 /proc/sys/kernel/core_pattern
chmod: changing permissions of '/proc/sys/kernel/core_pattern': Operation not permitted

Akhirnya, berdasarkan posting ini, saya mencoba ini:

>sudo bash -c 'echo /home/user/foo/core.%e.%p > /proc/sys/kernel/core_pattern'

Ini berhasil.

Berdasarkan solusi yang berfungsi, saya juga mencoba ini, yang gagal:

> 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

Pertanyaan :

Kenapa editannya itu, chmod ing, dan mengarahkan kembali echo output ke file /proc/sys/kernel/core_pattern semua gagal, dan hanya pemanggilan sudo bash... . yang dicatat dapat menimpa/mengedit file?

Pertanyaan :

Secara khusus, tulis upaya untuk memanggil sudo dalam upaya yang gagal di atas:mengapa mereka gagal? Saya pikir sudo mengeksekusi perintah berikutnya dengan hak akses root, yang menurut saya memungkinkan Anda melakukan apa saja di Linux.

Jawaban yang Diterima:

Entri dalam procfs dikelola oleh kode ad hoc. Kode yang akan mengatur izin dan kepemilikan pada file di bawah /proc/sys (proc_sys_setattr ) menolak perubahan izin dan kepemilikan dengan EPERM. Jadi tidak mungkin untuk mengubah izin atau kepemilikan file-file ini, titik. Perubahan seperti itu tidak diterapkan, jadi menjadi root tidak membantu.

Saat Anda mencoba menulis sebagai pengguna non-root, Anda mendapatkan kesalahan izin. Bahkan dengan sudo echo "/home/user/foo/core.%e.%p" > /proc/sys/kernel/core_pattern , Anda mencoba menulis sebagai pengguna non-root:sudo menjalankan echo sebagai root, tetapi pengalihan terjadi di shell dari mana sudo dieksekusi, dan shell itu tidak memiliki hak istimewa yang lebih tinggi. Dengan sudo bash -c '… >…' , pengalihan dilakukan di instance bash yang diluncurkan oleh sudo dan yang dijalankan sebagai root, sehingga penulisan berhasil.

Alasannya hanya root yang harus diizinkan untuk mengatur kernel.core_pattern sysctl memungkinkan perintah untuk ditentukan dan, karena ini adalah pengaturan global, perintah ini dapat dijalankan oleh pengguna mana pun. Ini sebenarnya kasus untuk semua pengaturan sysctl ke berbagai derajat:semuanya adalah pengaturan global, jadi hanya root yang dapat mengubahnya. kernel.core_pattern adalah kasus yang sangat berbahaya.

Terkait:Debian – Dapatkan gcc terbaru untuk debian?
Linux
  1. Linux – Mengatur /proc/sys/vm/drop_caches Untuk Menghapus Cache?

  2. Linux – Menautkan /proc/mnt Ke /proc/mounts?

  3. Linux – Kapan Menggunakan /dev Dan /sys Untuk Komunikasi Userspace-kernel?

  1. Linux – Bagaimana Menguji Apakah Perangkat Blok Apakah Hanya-Baca Dari /sys Atau /proc?

  2. Bagaimana cara mendapatkan jalur proses di Unix / Linux

  3. linux /proc/loadavg

  1. Bagaimana Linux Menangani Beberapa Pemisah Jalur Berturut-turut (/home////username///file)?

  2. Mengubah lokasi core dump

  3. /sys/ dokumentasi?