在没有root权限的情况下更改Linux中的网络设置

时间:2015-02-17 10:02:17

标签: c linux network-programming root privileges

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

这一切都很完美,但具有root权限。是否有任何方法可以在不给root用户的情况下更改这些设置?这是我无法解决的要求。像this问题更改所有权可以通过将代码放在单独的可执行文件中并将该可执行文件的所有权更改为root然后从主应用程序调用它来解决问题。

我只想知道是否可以更改此类设置而无需授予应用程序root权限。

1 个答案:

答案 0 :(得分:5)

我知道有两种方式:

  1. 使用sudo运行ifconfig并以root身份进行路由。 Sudo可以设置为无密码工作,仅适用于某些程序。

  2. 使用capabilities查看Is there a way for non-root processes to bind to "privileged" ports on Linux?的答案,并使用cap_net_bind_service的CAP_NET_ADMIN。