Skrip apa yang memungkinkan pengguna biasa menggunakan ruang nama jaringan?


22

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.


1
mengapa Anda tidak mendefinisikan 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.
netmonk

2
Ini yang sudomengandung suyang mengganggu saya, bukan naskah itu sendiri. Pokoknya saya akan menulis naskah untuk membungkusnya. Itu membuat 2 switch pengguna, itu benar-benar jelek, bukan begitu?
Raspbeguy

6
Itu seharusnya membuatmu takut. Pengguna dapat memodifikasi $ USER menjadi root.
Stephen

1
Ya, dan itu membuatku takut. Tetapi saya menemukan kemudian yang sudomenyediakan variabel tertentu $SUDO_USER, yang lebih aman. Tapi itu masih jelek.
Raspbeguy

1
@ Elronnd - kernel mengabaikan setuid pada skrip
Angelo

Jawaban:


1

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:

# New group netns
sudo groupadd --system netns

# Add root to "netns", not sure if needed
sudo usermod -aG netns root

# Do this for every needed user
sudo usermod -aG netns $UserName

# Change ownership to root, grant rw acces to group netns
sudo chown root:netns /path/to/netns-exec.sh
sudo chmod 633 /path/to/netns-exec.sh

Solusi 2

Solusi ini lebih sederhana, Anda harus mengedit file sudoers Anda seperti yang ditunjukkan dalam contoh ini .

user ALL=(ALL) /bin/ip netns

Nah, solusi 1 tidak mungkin, perintah ip netnsakan mengembalikan kesalahan yang mengatakan bahwa hanya root yang dapat menjalankannya. Solusi 2 adalah yang awalnya saya pikirkan, tetapi tidak memuaskan menurut pendapat saya.
Raspbeguy

Ini chmod 0633akan memberikan write+executeizin kepada semua pengguna dan netnsgrup. Saya menduga Anda ingin mengatur bit SGID pada skrip, tetapi seperti @Angelo disebutkan: setuiddan setgiddiabaikan untuk skrip shell, dan untuk alasan yang baik .
ckujau

0

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:

#!/bin/bash
# ip netns wrapper script, nns.
# Usage: nns nsname cmdline

case "${1}" in
    do)
        shift # remove "do"
        NSNAME="${1}" # remember nsname
        shift # remove nsname to get argument list for su -c
        [ -z "${NSNAME}" -o -z "${1}" ] && exit 1 # if either nsname or arglist is empty - error out
        echo ip netns exec "${NSNAME}" su "${SUDO_USER}" -c "${*}" # execute, ${*} merges separate arguments into single word for su/sh -c parsing. See with strace.
    ;;
    *)
        SCRIPTNAME="${0}" # remember script full path
        exec sudo "${SCRIPTNAME}" do "${@}" # run it through sudo with elevated privileges
    ;;
esac

Instal di suatu tempat /usr/bindan izinkan pengguna Anda untuk menjalankannya.


Terima kasih atas tanggapan Anda (dan maaf karena memperhatikan beberapa bulan setelah). Tapi masalahnya tetap sama, yaitu menggunakan sudo.
Raspbeguy

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.