我的 C 代码做了一个
seteuid (euid);
popen("/root/bin/iptables ....", "r");
即使我用 seteuid(0) 调用它也会失败。(可执行文件已打开 setuid)。
似乎 seteuid 和 popen 不能一起工作。
当 popen 调用它时,它会在 stderr 中打印以下消息
iptables v1.4.6: can't initialize iptables table : Permission denied (you must be root)
换句话说,popen“成功”,但是因为创建了一个新的shell,所以没有维护权限并且用例失败了。
我该如何解决这个问题?