gpt4 book ai didi

sockets - 非 root 用户的 ping 如何在 Linux 发行版上实现?

转载 作者:太空宇宙 更新时间:2023-11-03 16:53:59 24 4
gpt4 key购买 nike

我正在浏览 ping 表单的代码 iputils用于 Linux 的软件包。

我注意到ping uses raw sockets 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 个功能)。

编辑:几件事。

首先:您可能想使用 getcap 而不是 filecap

后者带有“常规”lipcap 及其 CLI 工具,无论发行版是什么,您都可以肯定在您的系统上拥有这些工具。与 libcap-ng 附带的前者相反。

第二:关于 Ubuntu。

的确,现在我在办公室,我的 Debian 测试主机上有几个 Ubuntu LTS VM(14.04 和 16.04) guest ,我可以看到 Canonical 确实使用了 SUID 位而不是扩展文件属性。他们似乎依赖于 AppArmor MAC,我想说我们这里有一个很好的例子,说明为什么这可能不是作为第一个措施的最佳想法:正确执行它的管理文书工作量很大.

因此,虽然 Canonical 确实有一些 AppArmor 设置用于 tcpdump,但它们没有用于 ping(取而代之的是 SUID = full root power for free),也不是例如 dumpcap(为 wireshark 运行数据包捕获的进程),这将暗示 sudo,这又是完整的 root 权限(尚未至少有密码)。希望上游开发人员做正确的事:在源代码级别可以删除功能,无论是对于像 ping 这样的 iputils 还是对于 dumpcap,所以这取决于集成商(发行包维护者) ).

关于sockets - 非 root 用户的 ping 如何在 Linux 发行版上实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37512291/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com