C で実行しているプログラムがあります。これには、system を使用して「iptables」コマンドを実行する必要があります。
私は試した
setuid(0);
system("iptables .... ");
setuid と system は共存しません。システムのマニュアルページから
set-user-ID または set-group-ID 特権を持つプログラムから system() を使用しないでください。一部の環境変数の奇妙な値がシステムの整合性を破壊するために使用される可能性があるためです。代わりに exec(3) ファミリの関数を使用してください。ただし、execlp(3) または execvp(3) は使用しないでください。実際、system() は、/bin/sh が bash バージョン 2 であるシステムでは、set-user-ID または set-group-ID 権限を持つプログラムからは正しく機能しません。これは、bash 2 が起動時に権限を失うためです。(Debian は、sh として呼び出されたときにこれを行わない、変更された bash を使用します。)
どうすれば自分の問題を克服できますか?
ありがとう