0

我想通过使用 Linux 功能在没有 sudo 的情况下运行 ifup eth0 和 ifdown eth0 对于同一个问题,我为同一个 main.c 编写了代码

int main{
FILE ,*fp;
fp  = popen("ifdown eth0","r");
if(fp==NULL)
{
printf("popen falied\n")
}
pclose(fp);
}

如果我将功能设置为二进制,如下所示:

sudo   setcap -v cap_chown,cap_dac_override,cap_fowner,cap_dac_read_search,cap_net_admin+epi main

所有功能均已设置,通过使用 getcap 命令进行验证

getcap main
main = cap_chown,cap_dac_override,cap_dac_read_search,cap_fowner,cap_net_admin+eip

如果运行上面的代码,我会得到以下回复:

./main ifdown:无法打开锁定文件 /run/network/ifstate.eth0:权限被拒绝

有人可以帮我吗?

4

1 回答 1

0

能力并不像你想象的那样发挥作用。它们附加到可执行文件,并在您执行新文件时重置。

您的可执行文件可能具有更改接口状态所需的权限,但不能运行执行此操作的外部程序,这就是 popen 所做的。

我也不喜欢它,但就是这样。

如果你已经编写了一个程序来做你想做的事,你不妨继续在上面设置 uid。这将按预期工作。

于 2017-09-06T05:34:41.983 回答