2017-09-06 50 views
0

我想沒有sudo ifup eth0的時候和ifdown eth0的運行由使用Linux capabilitiesFor我寫代碼的文件main.c同樣的問題使用sudo ifdown你運行ifup和使用Linux能力

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: 權限被拒絕

有人可以幫我在這?

回答

0

功能不像您認爲的那樣工作。它們附加到可執行文件,並在執行新文件時重置。

您的可執行文件可能具有更改接口狀態所需的權限,但不能運行這樣做的外部程序,這正是popen所做的。

我也不喜歡它,但事情就是這樣。

如果你已經編寫了一個你想做的事情的程序,你可以繼續並設置它。這將按預期工作。