Saya mencoba bekerja dengan grup kontrol pada dua sistem operasi yang berbeda (Ubuntu dan CentOS). Ada beberapa masalah yang ingin saya tanyakan.
Saya mencoba membuat grup kontrol menggunakan cgcreate
perintah, dan sepertinya itu membutuhkan akses root pada mesin. Semua contoh yang saya lihat sejauh ini tidak mengatakan apa-apa tentang perlunya menjadi pengguna root untuk membuat atau memodifikasi grup kontrol.
Apakah benar-benar perlu untuk menjadi pengguna root? Tujuan akhirnya adalah untuk menulis aplikasi C ++ yang membuat dan mengelola grup kontrol untuk mengontrol sumber daya menggunakan API libcgroup. Tetapi aplikasi C ++ tidak akan dijalankan oleh pengguna root mana pun. Bisa jadi pengguna biasa.
Jawaban:
Skenario normal adalah bahwa Anda mengatur
cgcreate
,cgset
,cgdelete
,cgget
, dll sebagai akar . Akhirnya program / skrip yang dimaksudkan untuk menahan diri dari mengisap ke banyak sumber daya akan dieksekusi sebagai pengguna normal. Jadi, atur sebagai root, gunakan dan eksekusi sebagai pengguna.Ini dilakukan dengan parameter
-a
dan perintah (dieksekusi sebagai root). Jadi sudah ketika Anda mengatur grup. Dalam kasus saya:-t
cgcreate
di mana monero adalah nama pengguna pengguna masa depan yang akan menjalankan dan menjalankan program dengan pembatasan cgroup. Untuk perbedaan yang baik antara
-a
dan-t
subparameter lihat halaman manualcgcreate
.Dalam kebanyakan kasus, keduanya adalah pengguna yang sama.
Kemudian, siapkan batasan (masih sebagai root):
Periksa entri Anda jika Anda ingin:
Dan akhirnya beralih pengguna, dalam kasus saya pengguna monero, dan dari folder kanan:
Pengguna tidak akan mengalami kesulitan dengan izin atau jadi ketika Anda mengaturnya khusus untuknya.
sumber
Implikasi keamanan selain ini, Anda dapat mengatur
setuid
bituntuk memberikan pengguna non root yang menjalankan kekuatan root program itu.
Rekomendasi adalah untuk kemudian menghapus akses pengguna normal
dan membuat grup khusus yang ingin Anda izinkan untuk menggunakan cgcreate IE
cgusers
,dan ubah keanggotaan grup pada file-file itu ke grup itu:
Semua itu akan dijalankan oleh root, setelah itu semua pengguna dalam
cgusers
grup, akan berjalancgcreate
dancgdelete
sebagai root alih-alih sebagai diri mereka sendiri. Anda hanya perlu memiliki anggota yang ingin memiliki kekuatan ini di bawah grup yang tepat.sumber
Cgroup akhirnya ditangani melalui sistem file cgroup. Kemampuan untuk membuat cgroup seharusnya hanya menjadi kemampuan untuk membuat direktori di bawahnya dan menulis ke file. Jika Anda memasang FS cgroup dengan izin yang lebih rumit, atau jika Anda mengubah izin mereka dengan cepat, maka pengguna tertentu harus dapat melakukan hal-hal. Jelas Anda tidak akan dapat menambahkan ID proses dari proses pengguna lain ke file tugas. Anda hanya dapat menambahkan pengguna Anda.
Karena itu, saya tidak yakin hal di atas bersifat global. Yaitu ada kemungkinan cgroup tertentu tidak mendukung ini.
Secara keseluruhan, pendekatan terbaik adalah menggunakan manajer cgroup yang kemudian dapat diinstruksikan untuk mengaitkan tugas ke cgroup. Saya percaya cgmanager melakukan sesuatu seperti ini.
sumber
Jawaban singkatnya adalah tidak.
Untuk pembuatan, dan penugasan kepemilikan suatu cgroup, Anda bergantung pada hak akses root. Tidak ada cara yang dapat diandalkan untuk menyiasatinya.
Namun, Anda dapat membuat cgroup dan menetapkan kepemilikan kepada pengguna atau grup tertentu.
Pengguna
Kelompok
sumber