GNU/Linux >> Belajar Linux >  >> Linux

Mengapa pengeditan core_pattern dibatasi?

Entri dalam procfs dikelola oleh kode ad hoc. Kode yang akan menetapkan izin dan kepemilikan pada file di bawah /proc/sys (proc_sys_setattr ) menolak perubahan izin dan kepemilikan dengan EPERM. Jadi tidak mungkin mengubah izin atau kepemilikan file-file ini, berhenti sepenuhnya. 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 tempat sudo dieksekusi, dan shell itu tidak memiliki hak istimewa yang lebih tinggi. Dengan sudo bash -c '… >…' , pengalihan dilakukan dalam 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 adalah 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 tingkatan:semuanya adalah pengaturan global, jadi hanya root yang dapat mengubahnya. kernel.core_pattern hanyalah kasus yang sangat berbahaya.


Di Ubuntu 18.04 saya dapat memperbarui polanya dengan:

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

Saya juga dapat memperbarui /etc/sysctl.conf dan tambahkan baris:

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

Namun, meskipun tidak ada baris lain yang mengatur kernel.core_pattern di /etc/sysctl.conf atau /etc/sysctl.d/* , setelah saya mem-boot ulang pola disetel ke nilai default lagi:

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

Ternyata apport adalah over-menulis setiap perubahan yang saya buat. Saya menghapus apport dengan sudo apt-get remove apport dan kemudian perubahan saya digunakan.


Linux
  1. Mengapa Pengguna Root Membutuhkan Izin Sudo?

  2. Mengapa Sudo Mengabaikan Alias?

  3. Simpan file sebagai root setelah diedit sebagai non-root

  1. Mengapa kernel dipetakan ke ruang alamat yang sama dengan proses?

  2. mengapa saya tidak bisa mencocokkan sekejap dengan uptime?

  3. Mengapa Memori Bersama Kernel adalah 0 di Ubuntu 12.04?

  1. Mengapa Kernel Menjatuhkan Paket?

  2. Mengapa kata sandi 'sudo' berbeda dengan kata sandi 'su root'

  3. Mengapa mirip Linux Unix jika kernelnya monolitik?