ネットワーク名前空間(netns)を使用したアーキテクチャがあります。通常のユーザーがこれらのネットでいくつかの操作を行えるようにしたいと思います。
スクリプトを書くことができましたnetns-exec.sh
、 この投稿 に触発され、Sudo
で実行されます。
ip netns exec $1 su $USER -c "$2"
そして私のsudoerファイルに追加します:
user ALL=(ALL) /path/to/netns-exec.sh
しかし、私はそれがとても醜いので、それについて完全に悪夢を見ることができました。通常のユーザーが名前空間を使用できるようにするためのより良いソリューションはありますか?ユーザーをいくつかの便利なグループに入れることは可能ですか?調べてみたが何も見つからなかった。
ソリューション1
「netns」というグループを追加するだけで、必要なすべてのユーザーがそのグループに追加されます。次にroot:netnsに所有権を付与し、グループに読み取り/実行機能を付与します。
言い換えると:
# 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
ソリューション2
このソリューションはより簡単です。 この例 に示すように、sudoersファイルを編集する必要があります。
user ALL=(ALL) /bin/ip netns
個人的には、通常のユーザーがさまざまなネットワーク名前空間でコマンドを実行できるようにする可能性があるかどうかはわかりませんが、この注釈付きのシェルスクリプトはニーズに適している可能性があります。
#!/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
/usr/bin
のどこかにインストールして、ユーザーが実行できるようにします。
Firejail仕事をすることができます
firejail --noprofile --netns=nameOfNetSpace command
または Netns-Exec 、 Nsutils および Netnsは必要ありませんルート