我正在浏览 ping 表单的代码iputils http://www.skbuff.net/iputils/适用于 Linux 的包。
我注意到ping 使用原始套接字 https://sourceforge.net/p/iputils/code/ci/HEAD/tree/ping.c#l142 SOCK_RAW
,任何用户空间应用程序都需要 root 权限才能使用。
Linux 发行版的开发人员如何设法为非 root 用户提供 ping 命令?
在现代发行版上,ping 使用扩展文件属性向非特权用户授予 CAP_NET_RAW。
我的 Debian 测试示例如下:
jbm@sumo:~$ ls -l /bin/ping
-rwxr-xr-x 1 root root 57048 Mar 1 15:49 /bin/ping
jbm@sumo:~$ filecap /bin/ping
file capabilities
/bin/ping net_raw
...这比 SUID 更好,安全性方面:这里只有一种功能,而不是完整的根集(我的 4.5 内核有 37 种功能)。
编辑:有几件事。
第一:代替filecap
,你可能想使用getcap
.
后者带有“常规”lipcap
及其 CLI 工具,无论发行版如何,您的系统上都肯定有这些工具。与前者相反,后者带有libcap-ng
.
第二:关于Ubuntu。
事实上,现在我在办公室,Debian 测试主机上有几个 Ubuntu LTS VM(14.04 和 16.04)来宾,我可以看到Canonical 确实使用 SUID 位而不是扩展文件属性。他们似乎依赖 AppArmor MAC,我想说我们这里有一个很好的例子来说明为什么这可能不是最好的主意first措施:正确处理的行政文书工作量很大。
因此,虽然 Canonical 确实有一些 AppArmor 设置tcpdump
,他们不为ping
(相反 SUID = 免费的完全 root 权限),也不是例如dumpcap
(运行数据包捕获的进程wireshark
),这意味着sudo
,这又是完全的 root 权限(但至少有密码)。希望上游开发人员做正确的事情:在源代码级别可以对 iputils 进行功能删除,例如ping
or for dumpcap
,所以这取决于集成商(发行版包维护者)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)