一般ユーザーがネットワーク名前空間を使用できるようにするスクリプトは何ですか?

一般ユーザーがネットワーク名前空間を使用できるようにするスクリプトは何ですか?

ネットワークネームスペース(netns)を使用するアーキテクチャがあります。一般ユーザーがこれらのネットワークでいくつかのタスクを実行できるようにしたいと思います。

netns-exec.sh私は以下からインスピレーションを得てスクリプトを書くことができます。この投稿の実行に使用されるものには、次のものがsudo含まれます。

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

私のsudoerファイルに追加しました。

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

しかし、あまりにも醜いので悪夢を見ることができると思います。一般ユーザーが名前空間を使用できるようにするより良いソリューションはありますか?ユーザーを便利なグループに入れることは可能ですか?検索しましたが、何も見つかりませんでした。

答え1

地獄火 これができます。

firejail --noprofile --netns=nameOfNetSpace command

またはNetnsの実行nsutilsそしてネットワークルートは必要ありません

答え2

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

答え3

スクリプトではありませんが、root以外のユーザーがLinuxネットワークの名前空間内でプロセスを実行できるようにする、非常にミニマリストで編集可能なCプログラムを作成しました。

ソースコードはここにあります:netns-exec.c

答え4

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

#!/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し、ユーザーが実行できるようにします。

関連情報