Saya sedang mengerjakan aplikasi manajer kata sandi, dan untuk alasan keamanan saya ingin meluncurkan proses yang tidak dapat dilakukan.
Dan selain itu saya tidak ingin program ini menjadi daemon karena saya perlu membaca dari input standar dan menulisnya.
Apakah ada cara untuk melakukan ini?
Jawaban:
Membuat password manager berjalan di bawah pengguna dan pegangan terpisah / mengabaikan / blok terminal yang dihasilkan sinyal (
SIGINT
,SIGQUIT
,SIGHUP
,SIGTSTP
,SIGTTIN
, danSIGTTOU
).Anda tidak dapat mengirim sinyal ke (= membunuh) proses yang dijalankan di bawah pengguna yang berbeda (pengguna yang baik uid nyata dan disimpan-set berbeda dengan uid efektif Anda) kecuali id efektif Anda adalah 0 (root).
Semua proses masih akan dapat dibunuh dengan root.
Untuk detail lebih dekat, lihat membunuh (2) .
sumber
Satu-satunya cara untuk membuat suatu proses tidak dapat digunakan adalah dengan mengimplementasikannya sebagai utas kernel , yang bukan sesuatu yang sepele.
Anda masih dapat membunuhnya tetapi itu akan menjadi kerusakan jaminan OS shutdown.
Anda mungkin juga mengembangkan modul kernel khusus yang akan mengatur
SIGNAL_UNKILLABLE
flag ke proses Anda. Bendera ini dirancang untuk hanya ditetapkan untukinit
(atausystemd
, apa pun proses awal peluncuran kernel) yang merupakan satu-satunya proses userland yang dilindungi terhadap pembunuhan tanpa syarat, tetapi tampaknya tidak ada yang melarang bendera tersebut hadir untuk proses reguler.sumber
Secara teknis, tidak ada cara untuk membuat suatu proses tidak dapat diraih.
Tentu saja, untuk pengguna non-root mereka hanya dapat membunuh proses yang memiliki ID pengguna yang sama dengan yang mereka lakukan, jadi jika Anda dapat membuat akun yang berbeda, Anda dapat menggunakan ID pengguna "unik" untuk proses tersebut dan kemudian hanya root yang dapat membunuhnya.
Solusi sederhana, tetapi kurang kuat, adalah membuat proses Anda menangkap sinyal sebanyak mungkin (mungkin mengabaikannya). Ini hanya cocok untuk contoh mainan atau lingkungan non-permusuhan karena tidak ada cara untuk menangkap sinyal KILL (sinyal 9), tetapi sebaliknya Anda dapat menghindari terbunuh oleh mereka.
Akhirnya, Anda dapat mengatur agar proses Anda respawn jika terbunuh. Ini juga rapuh (sangat rapuh), tetapi akan membuatnya agak sulit untuk dihapuskan. Ini dapat dilakukan dengan menggunakan proses monitor Anda sendiri, atau menggunakan inittab. Untuk musuh yang tahu apa yang mereka lakukan, ini dapat dengan mudah dielakkan dengan membunuh banyak proses sekaligus.
sumber
inittab
) itu mungkin proses monitor juga bisa mati, bukan?