2016-05-29 241 views

回答

1

ping可执行文件是setuid root的:

$ ls -l /bin/ping 
-rwsr-xr-x 1 root root 35712 Nov 8 2011 /bin/ping 
3

在现代的发行版,ping使用扩展的文件属性授予CAP_NET_RAW给非特权用户。

例在这里我的Debian的测试:

[email protected]:~$ ls -l /bin/ping 
-rwxr-xr-x 1 root root 57048 Mar 1 15:49 /bin/ping 
[email protected]:~$ filecap /bin/ping 
file     capabilities 
/bin/ping  net_raw 

...这是比SUID更好,安全明智的:只有一个能力在这里,而不是完整的根集(37种能力,我的4.5内核) 。

编辑:几件事情。

第一:而不是filecap,你可能想要使用getcap

后者随附了“常规”lipcap及其CLI工具,无论发行版如何,您都可以在系统上确信它们。与前者相反,这与libcap-ng自带。

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

其结果是,尽管规范的确有发言权tcpdump一些AppArmor的设置,也不用为ping(这是免费的,而不是SUID =全根电源),也没有例如用于dumpcap(进程中运行数据包捕获的wireshark),这将意味着sudo,这也是完全的根权力(但至少有一个密码)。希望上游的开发者能够正确地做到这一点:在源代码级别上,iputils可以提供性能下降,例如pingdumpcap,所以它取决于集成商(distro软件包维护者)。