C 在没有root权限的Linux中更改网络设置

C 在没有root权限的Linux中更改网络设置,c,linux,network-programming,root,privileges,C,Linux,Network Programming,Root,Privileges,我所说的设置是IP、子网掩码和默认网关(设置和获取)。为了设置所有这些,我使用ioctl功能以及SIOCSIFADDR和SIOCSIFNETMASK等选项。为了获得IP和掩码,我使用了相同的方法,但有一些选项,如SIOCGIFADDR。为了获取默认网关,我解析文件/proc/net/route,并读取接口对应的默认网关地址 这整件事做得很好,但有根特权。是否有任何方法可以更改这些设置而不给root用户任何权限?这是我无法解决的要求。更改类似所有权的问题可以通过将代码放在单独的可执行文件中并将该可

我所说的设置是IP、子网掩码和默认网关(设置和获取)。为了设置所有这些,我使用
ioctl
功能以及
SIOCSIFADDR
SIOCSIFNETMASK
等选项。为了获得IP和掩码,我使用了相同的方法,但有一些选项,如
SIOCGIFADDR
。为了获取默认网关,我解析文件
/proc/net/route
,并读取接口对应的默认网关地址

这整件事做得很好,但有根特权。是否有任何方法可以更改这些设置而不给root用户任何权限?这是我无法解决的要求。更改类似所有权的问题可以通过将代码放在单独的可执行文件中并将该可执行文件的所有权更改为root,然后从主应用程序调用它来解决问题


我只想知道是否可以在不给root用户应用程序访问权限的情况下更改这些设置。

我知道有两种方法:

  • 用于以root用户身份运行ifconfig和route。Sudo可以设置为在没有密码的情况下工作,并且仅适用于某些程序

  • 使用查看答案并使用CAP_NET_ADMIN代替CAP_NET_bind_服务


  • 在您提供的问题的公认答案中,
    =+ep
    是什么?好的,基本上它是有效的(至少在这个ep选项中是有效的)。但是我有一个问题,因为我只添加了
    CAP\u NET\u ADMIN
    ,我是否应该假设如果在应用程序中执行了除网络配置以外的任何根操作,它将不会执行?