membuat semua proses pengguna yang diberikan dapat dimatikan oleh siapa pun


15

Pada server bersama, saya ingin memiliki beberapa pengguna dengan prioritas sangat rendah sehingga setiap kali pengguna lain (juga tanpa hak akses root) membutuhkan sumber daya, mereka dapat membunuh semua proses pengguna dengan prioritas rendah.

Apakah mungkin untuk membiarkan hal seperti itu?


1
Berikan sudo -u hak pengguna untuk membunuh semua pengguna yang diperlukan dalam sebuah grup
Kiwy

4
Saya benar-benar berharap para pengguna berprioritas rendah ini adalah pengguna manusia yang sebenarnya, dan Anda dan teman-teman Anda adalah BOFH murni . Itu membuat pertanyaannya jauh lebih menarik.
pipa

@ DavidvidFoerster, satu masalah adalah bahwa bahkan ketika CPU tidak pada 100% proses prioritas rendah dapat mengisi cache prosesor dll. Demikian juga dengan akses disk dll.
Ian Ringrose

Jawaban:


24

Berikan izin kepada pengguna lain untuk mematikan proses sebagai pengguna dengan prioritas rendah

sudo -u lowpriouser /bin/kill PID

Seorang pengguna hanya dapat memberi sinyal proses mereka sendiri, kecuali mereka memiliki hak akses root. Dengan menggunakan sudo -upengguna dengan pengaturan yang benar disudoers file dapat menganggap identitas pengguna prioritas rendah dan mematikan proses.

Sebagai contoh:

%killers ALL = (lowpriouser) /bin/kill

Ini akan memungkinkan semua pengguna dalam grup killersdijalankan /bin/killsebagailowpriouser .

Lihat juga sudoersmanual di sistem Anda.


Pada sistem OpenBSD, hal yang sama dapat dilakukan melalui doasutilitas asli dengan konfigurasi seperti

permit :killers as lowpriouser cmd /bin/kill

Kemudian

doas -u lowpriouser /bin/kill PID

Lihat manual untuk doasdan doas.conf.


Jika Anda mengizinkan perintah kill apa pun , Anda dapat menyalahgunakannya untuk mengirim sinyal yang tidak terkait dengan penghentian ke proses sewenang-wenang, yang dapat menjadi masalah keamanan.
hutan

@ Hutan Inilah sebabnya saya tidak menyarankan memberi semua orang kemampuan untuk menggunakan akun root untuk berjalan kill. Perhatikan juga bahwa saya sarankan menggunakan grup pengguna ( killers), tidak semua pengguna.
Kusalananda

Tapi yang saya maksud adalah, itu akan memungkinkan grup itu untuk mengirim kill -HUP, bukan hanya kill -TERM.
hutan

@ hutan Ya. Ini memungkinkan pengiriman sinyal ke proses yang dimiliki oleh lowpriouser. Jika Anda ingin membatasi sinyalnya TERM, tuliskan skrip shell pembungkus /bin/killdan izinkan orang untuk menggunakannya /bin/kill.
Kusalananda

1
%killers ALL = (lowpriouser) /bin/kill -(9, 15) [0-9 ]*
hutan

5

Anda seharusnya tidak membunuh proses, jika mereka prioritas rendah mereka akan menghabiskan sedikit sumber daya.

Untuk benar-benar menjadikannya prioritas rendah, ubah prioritasnya secara manual, atau gunakan daemon like autonice yang saya tulis untuk DEC OSF / 1 bertahun-tahun yang lalu (c. 1994) yang mencari pekerjaan yang sudah lama berjalan dan semakin mengurangi prioritas mereka semakin lama dijalankan .

EDIT ada paket yang disebut andyang menawarkan fungsi ini untuk Unites modern.


satu masalah adalah bahwa bahkan ketika CPU tidak pada 100% proses prioritas rendah dapat mengisi cache prosesor dll. Demikian juga dengan akses disk dll.
Ian Ringrose

@IanRingrose hanya tugas yang telah dijadwalkan untuk dijalankan yang dapat menempati cache atau melakukan akses disk.
Alnitak

4

Saya pikir Anda mendekati masalah dari sudut yang salah: Jika suatu proses dijalankan pada pengaturan prioritas rendah (CPU, I / O) itu seharusnya tidak mempengaruhi banyak proses lain karena itu tidak akan dijadwalkan untuk berjalan. Sedangkan untuk penggunaan memori, jika memori utama ketat dan proses tidak dijadwalkan untuk berjalan dalam waktu yang lama (misalnya karena kendala CPU dan I / O), halaman "bersih" -nya dijatuhkan dan halaman "kotor" -nya dikomit atau bertukar dan tidak lagi mempengaruhi kinerja proses lainnya.

Kesimpulan: dengan pengaturan prioritas yang tepat dan ruang swap yang memadai, tidak perlu membunuh pekerjaan prioritas rendah untuk membuat "ruang" untuk tugas-tugas yang lebih penting; sebaliknya kernel akan berhati-hati untuk menempatkan yang pertama untuk mendukung yang terakhir.


1
"Prioritas rendah" bisa juga berarti "tidak penting" tanpa arti yang tersirat "berjalan pada penurunan prioritas CPU". Ini tidak dibuat eksplisit dalam pertanyaan.
Kusalananda

@ Kusalananda: Saya setuju bahwa ini tidak eksplisit dalam pertanyaan, tetapi jawaban saya menyatakan bahwa itu harus dalam kenyataan.
David Foerster

1
Ini tidak sesederhana itu. Bahkan proses dengan prioritas rendah dapat menghentikan sistem, terutama jika memiliki keterbatasan memori: tergantung pada bagaimana pengaturannya, itu akan membuat proses bertukar. Swapping menyebabkan I / O (yang mungkin tidak termasuk dalam kuota I / O dari proses) dan itu juga akan membuat sistem kurang responsif oleh urutan besarnya. Maka Anda mungkin juga menginginkannya secara umum (sementara yang lain tidak membutuhkan sumber daya), proses prioritas rendah sebenarnya bisa mendapatkan semua sumber daya yang dibutuhkan (yang membuat batas memori tipikal tidak dapat diterapkan). Berbagi CPU membantu di sini.
Jonas Schäfer

@JonasWielicki, "cara unix" lama untuk menukar proses lengkap memang memiliki keuntungan. Jika saya ingat dengan benar HPUX dapat beberapa alat untuk memecahkan masalah ini di tahun 1990-an.
Ian Ringrose
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.