ネットワークインターフェースからパケットを読み書きするプログラムがあります。通常、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
グループ名に変更します%bridgers
。bridgers
プログラムの内部には、bridge
呼び出し$SUDO_UID
元のユーザーIDがありますsudo
。プログラムでそのユーザーが変数に存在する必要がある場合は、USER
それを設定するための小さなラッパーシェルスクリプトを作成してくださいUSER=$SUDO_UID
。