web-dev-qa-db-ja.com

通常のユーザーがネットワーク名前空間を使用できるのはどのスクリプトですか?

ネットワーク名前空間(netns)を使用したアーキテクチャがあります。通常のユーザーがこれらのネットでいくつかの操作を行えるようにしたいと思います。

スクリプトを書くことができましたnetns-exec.shこの投稿 に触発され、Sudoで実行されます。

ip netns exec $1 su $USER -c "$2"

そして私のsudoerファイルに追加します:

user ALL=(ALL) /path/to/netns-exec.sh

しかし、私はそれがとても醜いので、それについて完全に悪夢を見ることができました。通常のユーザーが名前空間を使用できるようにするためのより良いソリューションはありますか?ユーザーをいくつかの便利なグループに入れることは可能ですか?調べてみたが何も見つからなかった。

22
Raspbeguy

ソリューション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
1
Taz8du29

個人的には、通常のユーザーがさまざまなネットワーク名前空間でコマンドを実行できるようにする可能性があるかどうかはわかりませんが、この注釈付きのシェルスクリプトはニーズに適している可能性があります。

#!/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のどこかにインストールして、ユーザーが実行できるようにします。

0
user140866

Firejail仕事をすることができます

firejail --noprofile --netns=nameOfNetSpace command

または Netns-ExecNsutils および Netnsは必要ありませんルート

0
intika