2017-09-06 4 views
0

Je veux courir ifup eth0 et ifdown eth0 sans sudo en utilisant Linux capabilitiesFor le même problème que j'ai le code écrit pour la même main.cRun ifupdown avec sudo en utilisant la capacité de Linux

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

Si je définir des capacités en binaire comme suit:

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

toutes les fonctionnalités sont définies, il est vérifié en utilisant la commande getcap

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

Si exécuter code ci-dessus je me réponse suivante:

./main ifdown: failed to open lockfile /run/network/ifstate.eth0: Autorisation refusée

quelqu'un peut me aider sur ce ?

Répondre

0

Les capacités ne fonctionnent pas comme vous le pensez. Ils sont attachés à un fichier exécutable et sont réinitialisés lorsque vous exécutez un nouveau fichier.

Votre exécutable peut avoir les autorisations qu'il ont besoin de changer de statut d'interface, mais pas pour exécuter un programme externe qui le fait, qui est ce que popen fait.

Je ne l'aime pas non plus, mais c'est la façon dont il est.

Si vous avez déjà écrit un programme pour faire ce que vous voulez, vous pouvez tout aussi bien aller de l'avant et y mettre de l'uid. Cela fonctionnera comme prévu.