我有一个非 root 用户执行这个 C 程序 - 链接到 so应设置 IP 地址、网络掩码并设置接口,它返回:SIOCSIFFLAGS: Permission denied
有什么方法可以让我以 root 身份登录,允许我的非 root 用户运行这个设置 IP 的程序?
答案1
至少在 Linux 上,你可以使用能力允许程序执行一组有限的操作,就好像它具有 root 权限一样。
相关的能力似乎是这样的:
CAP_NET_ADMIN
Perform various network-related operations:
* interface configuration;
* administration of IP firewall, masquerading, and accounting;
[...]
您可以使用以下命令设置功能setcap
:
setcap cap_net_admin+ep /path/to/my_ifconfig
当然,另一种选择是让程序 setuid root ( chmod u+s
),这将允许它执行以下操作:任何事物root 可以做。这显然风险更大,但也应该适用于其他系统,而不仅仅是 Linux。
您可能希望限制哪些用户可以使用通常的文件权限位以额外的权限执行该文件,例如仅允许该netadmins
组的成员运行该文件:
chown root.netadmins /path/to/my_ifconfig
chmod 0710 /path/to/my_ifconfig