使用linux功能使用sudo运行ifup和ifdown

时间:2017-09-06 04:54:25

标签: linux sudo linux-capabilities

我想通过使用Linux功能来运行ifup eth0和ifdown eth0而不使用sudo对于同样的问题,我为同一个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:无法打开lockfile /run/network/ifstate.eth0:   许可被拒绝

有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

功能不像您认为的那样工作。它们附加到可执行文件,并在执行新文件时重置。

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

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

如果您已经编写了一个程序来执行您想要的操作,那么您也可以继续并设置它。这将按预期工作。