機能専用C Linuxプログラム内でiptablesルールを追加できますか?それともルートが必要ですか?

機能専用C Linuxプログラム内でiptablesルールを追加できますか?それともルートが必要ですか?

C Linuxプログラム内にiptablesルールを追加する必要があります。

どうすればいいですか?ルートアクセスが必要ですか、それとも一部の機能のみを付与できますか?

私はCAP_NET_RAW + iepを与え、popen()、system()、execve()を使ってiptablesを設定しようとしましたが、うまくいきませんでした。

sudoをすると明らかに動作しますが、root権限を与えたくありません。

ありがとうございます。

答え1

ユーザーにroot権限を付与する必要はありません。 sudoersファイルを編集し、ユーザーがsudoを介して実行できるコマンドを制限できます。あるいは、sudoers ファイルに NOPASSWD オプションを提供することもできます。

MY_USER_NAME  ALL = NOPASSWD: /sbin/iptables

sudoersファイルを編集した後、MY_USER_NAMEは "sudo iptables"コマンドを実行できます。権限を必要とする他のコマンドは実行できません。

sudoersファイルを編集するには、visudoコマンドを使用します。

答え2

iptablesiptables v1.8.4(レガシー)の場合は、次のコマンドを使用してコマンドを実行できますiptables-save/restore

setcap cap_dac_read_search,cap_net_admin,cap_net_raw+ep /path/to/your/bin

xtables-legacy-multiバイナリをコピーし、上記の機能を手動で追加することでこれをテストできます。

sudo cp /usr/sbin/xtables-legacy-multi ipt
chown ipt user:user # Some non root user
# Test a command
./ipt iptables -I INPUT -m state --state INVALID -j DROP
# Should see errors here...
# Update caps
sudo setcap cap_dac_read_search,cap_net_admin,cap_net_raw+ep ipt
# Now test a rule
./ipt iptables -I INPUT -m state --state INVALID -j DROP
echo $?
# Should see a successful exit code of 0 for valid rules

別の方法はlibnftnl ネットフィルタ用ネットリンクライブラリしかし、上記の機能はまだ適用されています(例外がある可能性がありますcap_dac_read_search)。

関連情報