di lingkungan Linux, saya harus mematikan proses yang telah dimulai oleh user2 jika saya pengguna1 tanpa sudoers atau menggunakan root. Apakah Anda tahu jika ada cara mengaturnya saat meluncurkan proses? Seperti daftar pengguna yang diizinkan membunuh prosesnya?
Faktanya adalah bahwa contoh bersamaan dari proses yang sama dapat dimulai dari pengguna yang berbeda, itu sebabnya tidak nyaman bagi saya untuk mengatur id grup ke proses. Pengguna lain yang tidak ada dalam grup tidak akan dapat memulai proses paralel kedua.
Apa yang saya miliki adalah daftar pengguna yang diizinkan untuk memulai proses, didefinisikan dalam database, sebelum memulai proses saya memeriksa bahwa pengguna saat ini dalam daftar dan, jika ya, saya memulai proses dengan pengguna saat ini. Jika pengguna kedua diizinkan melakukan itu ingin mematikan proses saya ingin itu diizinkan untuk melakukan itu tetapi saya tidak ingin itu menjadi sudoers.
Oleh karena itu, saya berpikir untuk membuat proses yang berjalan sebagai root yang menerima permintaan untuk membunuh proses dari pengguna, memeriksa apakah pengguna diizinkan untuk memulai / menghentikan proses dan membunuh proses.
Apakah Anda pikir itu bisa menjadi solusi terbaik?
Jawaban:
Maaf, tapi ini tidak mungkin (itu karena desain). Namun, jika anggota grup umum, user1 dapat menulis ke file yang diperiksa proses user2, yang menunjukkan proses yang harus diakhiri.
Atau, user2 dapat menjalankan sesuatu di latar belakang yang memeriksa file, kemudian mengirimkan sinyal yang sesuai. User1 kemudian hanya perlu menulis ke file itu. Ini mungkin lebih mudah, karena tidak memerlukan modifikasi program pengguna2.
Secara konvensional, tidak, user1 tidak dapat mengirim sinyal POSIX ke proses user2.
sumber
Kecuali ACL atau SELinux atau yang lain memiliki cara yang lebih baik untuk melakukannya, cara saya melihat ini dilakukan adalah dengan skrip SetUID . Seperti yang dapat Anda bayangkan, mereka terkenal karena risiko keamanan.
Mengenai kasus Anda, katakan bahwa procOwner adalah nama pengguna untuk pemilik proses, dan userA (uid 1000), userB (uid 1201), dan userC (uid 1450) adalah orang-orang yang boleh membunuh proses tersebut.
killmyproc.bash:
Kemudian atur pemilik dan izin dengan:
Dan juga menempatkan userA, userB, dan userC dalam grup
procGroup
.sumber
Tidak secara konvensional - meminta pengguna datang dan membunuh proses orang lain adalah kerentanan penolakan layanan.
Ini bisa dilakukan jika proses target bekerja sama. Salah satu caranya adalah memantau kejadian eksternal (seperti file yang dibuat di / var / tmp, atau pesan pada soket), memerintahkannya untuk mematikan dirinya sendiri. Jika Anda tidak bisa menulisnya untuk melakukan itu, Anda bisa menulis pembungkus untuk itu yang memulai dan kemudian melakukan pemantauan, membunuh proses anak jika peristiwa itu terjadi.
sumber
Tidak, kamu tidak bisa.
Jika Anda ingin berbagi proses dengan pengguna lain, Anda harus memulai proses di bawah id pengguna umum.
sumber
Tentu saja, Anda dapat menulis program sedemikian rupa sehingga berakhir dengan anggun ketika menerima sinyal tertentu (istilah yang digunakan secara longgar berarti "peristiwa yang ditentukan sebelumnya", bukan sinyal POSIX) dari (daftar) pengguna tertentu.
sumber
Anda dapat menulis program suid yang hanya dapat dijalankan oleh pengguna dalam grup tertentu dan yang mengirimkan sinyal yang sesuai ke proses. Tidak yakin apakah Anda bermaksud mengecualikan suid juga.
sumber
bit suid tidak bekerja dengan skrip bash. imho, cara terbaik adalah menulis beberapa skrip wrapper "killservice". Misalkan, layanan Anda berjalan sebagai pengguna layanan pengguna
kemudian
kemudian, Anda hanya perlu menambahkan aturan di / etc / sudoers untuk memungkinkan mereka menjalankan / usr / bin / killserviceworker sebagai pengguna layanan tanpa meminta kata sandi:
killerviceworker dapat terlihat seperti ini:
sumber