Saya memiliki arsitektur menggunakan namespace jaringan (netns). Saya ingin mengizinkan pengguna biasa melakukan beberapa operasi di jaringan ini.
Saya bisa menulis skrip netns-exec.sh
, terinspirasi oleh posting ini , dieksekusi dengan sudo
, berisi:
ip netns exec $1 su $USER -c "$2"
dan tambahkan ke file sudoer saya:
user ALL=(ALL) /path/to/netns-exec.sh
Tetapi saya merasa sangat buruk sehingga saya benar-benar bisa mendapatkan mimpi buruk tentang itu. Apakah ada solusi yang lebih baik untuk memungkinkan pengguna biasa menggunakan ruang nama? Apakah mungkin untuk menempatkan pengguna ke beberapa grup yang berguna? Saya mencari tentang itu tetapi tidak menemukan apa pun.
sudo
root
privileges
network-namespaces
Raspbeguy
sumber
sumber
Cmd_Alias CMD_NETNS = ip netns exec [regexp matching your namespace] su [regexp matching allowed used] -c [regexp matching allowed namespace command]
dalam file sudoers Anda dan kemudian membuat grup di mana Anda menempatkan pengguna yang diizinkan, dan kaitkan grup ini ke alias perintah ini.sudo
mengandungsu
yang mengganggu saya, bukan naskah itu sendiri. Pokoknya saya akan menulis naskah untuk membungkusnya. Itu membuat 2 switch pengguna, itu benar-benar jelek, bukan begitu?sudo
menyediakan variabel tertentu$SUDO_USER
, yang lebih aman. Tapi itu masih jelek.Jawaban:
Solusi 1
Cukup tambahkan grup yang disebut "jaring", tambahkan semua pengguna yang diinginkan. Kemudian berikan kepemilikan ke root: jaring dan berikan kemampuan baca / exec ke grup.
Dalam istilah lain:
Solusi 2
Solusi ini lebih sederhana, Anda harus mengedit file sudoers Anda seperti yang ditunjukkan dalam contoh ini .
sumber
ip netns
akan mengembalikan kesalahan yang mengatakan bahwa hanya root yang dapat menjalankannya. Solusi 2 adalah yang awalnya saya pikirkan, tetapi tidak memuaskan menurut pendapat saya.chmod 0633
akan memberikanwrite+execute
izin kepada semua pengguna dannetns
grup. Saya menduga Anda ingin mengatur bit SGID pada skrip, tetapi seperti @Angelo disebutkan:setuid
dansetgid
diabaikan untuk skrip shell, dan untuk alasan yang baik .Secara pribadi saya tidak tahu apakah ada kemungkinan untuk mengizinkan pengguna biasa untuk menjalankan perintah di ruang nama jaringan yang berbeda, tetapi skrip shell beranotasi ini mungkin lebih sesuai dengan kebutuhan Anda:
Instal di suatu tempat
/usr/bin
dan izinkan pengguna Anda untuk menjalankannya.sumber
Firejail dapat melakukan pekerjaan itu
Atau Netns-Exec , Nsutils dan Netns tidak memerlukan root
sumber