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.