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

Posted

技术标签:

【中文标题】使用 linux 功能使用 sudo 运行 ifup 和 ifdown【英文标题】:Run ifup and ifdown with sudo using linux capability 【发布时间】:2018-02-14 11:04:00 【问题描述】:

我想使用 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: 权限被拒绝

有人可以帮我吗?

【问题讨论】:

【参考方案1】:

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

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

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

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

【讨论】:

以上是关于使用 linux 功能使用 sudo 运行 ifup 和 ifdown的主要内容,如果未能解决你的问题,请参考以下文章

windows 中的类似于sudo的命令(在cmd中以另一个用户的身份运行命令)

获得最好无数显示和缩放ifu.eSankey.Pro.v4.1.1.678

在 Windows 10 中安装的 ubuntu 中运行 sudo 命令时出错?

不能使用sudo安装Python问题,怎么解决

sudo简单应用

linux CVE-2019-14287 Sudo提权漏洞