一般ユーザーにネットワークインターフェイスへの書き込み権限を付与する方法は?

一般ユーザーにネットワークインターフェイスへの書き込み権限を付与する方法は?

ネットワークインターフェースからパケットを読み書きするプログラムがあります。通常、sudoersファイルに自分自身を追加し、次のようにプログラムを実行します。

sudo ./bridge

ただし、このプログラムを実行するには複数のユーザーが必要ですが、次のようにプログラムを実行できるようにsudo権限を付与しないでください。

./bridge

どうすればいいのか知っている人はいますか?私は64ビットプラットフォームでScientific Linux 6.1を実行しています。

答え1

次のように制限できます。Sudoerssudo を使用してコマンドを実行できます。

sudoを介してrootとして./real-bridgeを実行する権限をユーザーに./bridge呼び出して付与する小さなスクリプトを作成します。sudo ./real-bridge

答え2

ethデバイスで動作しているかどうかはわかりませんが、この人はtonデバイスで動作します。

$ tail -n1 /etc/udev/rules.d/20-kvm.rules 
KERNEL=="tun",          NAME="net/%k", GROUP="mygoodusers", MODE="0660"

その行の GROUP="mygoodusers", MODE="0660" をご覧ください。もちろん、各ユーザーをこのグループに入れる必要があります。

udevadm control --reload-rules

ただし、再起動する前に手動でchmod / chownを実行する必要があります。

答え3

このユーザーがスクリプトを実行できるようにsudoルールを追加します。実行しvisudo、次の内容をsudoersファイルに追加します。

Defaults!/path/to/bridge env_reset
alice, bill  ALL = (root) /path/to/bridge

これにより、ユーザーはプログラムにパラメータを渡すことができます/path/to/bridge""引数渡しを無効にするには、行の末尾に追加します。

より簡単なユーザー管理のために、ブリッジを制御する権限を持つユーザーのセットを定義することをお勧めします。alice, billグループ名に変更します%bridgersbridgers

プログラムの内部には、bridge呼び出し$SUDO_UID元のユーザーIDがありますsudo。プログラムでそのユーザーが変数に存在する必要がある場合は、USERそれを設定するための小さなラッパーシェルスクリプトを作成してくださいUSER=$SUDO_UID

関連情報