我使用的是 Centos 7。基本上,我只是希望任何用户都能执行 ICMP 或 TCP 跟踪路由。有没有办法配置,traceroute
使得-T
或-I
标志不需要 root 权限即可执行?
答案1
在我的 Kubuntu 中traceroute
不允许普通用户使用-T
或-I
。/usr/bin/traceroute
是一个符号链接,最终它指向/usr/bin/traceroute.db
如下所示的内容:
$ ls -l /usr/bin/traceroute.db
-rwxr-xr-x 1 root root 68768 Aug 29 2016 /usr/bin/traceroute.db
$ getcap /usr/bin/traceroute.db
$ # empty
$
为了实现你想要的,这对我有用:
sudo setcap cap_net_raw+eip /path/to/traceroute_regular_file
为了完整起见,恢复方法如下:
sudo setcap cap_net_raw-eip /path/to/traceroute_regular_file
setcap
无法解析符号链接,这就是为什么您需要查找常规文件。 在我的情况下是/usr/bin/traceroute.db
; 我对 CentOS 了解不够,无法判断是否涉及符号链接。 调查一下。
如果我是你,我会setcap
先尝试复制(目标文件系统必须支持扩展属性)。只有在确认复制按预期工作后,我才会更改系统范围的文件。
请注意,替换可执行文件的系统升级很可能会忽略旧文件的额外功能,同时创建新文件。当新文件替换旧文件时,traceroute
将有效地失去该功能。
总的来说,解决方案如下:如何用setcap
命令设置能力?还有man 7 capabilities
:
从内核 2.2 开始,Linux 将传统上与超级用户相关的权限划分为不同的单元,称为能力,这些单元可以单独启用和禁用。能力是每个线程的属性。
[…]
CAP_NET_RAW
- 使用RAW和PACKET套接字;
- 绑定到任意地址进行透明代理。
[…]
自内核 2.6.24 起,内核支持使用 将功能集与可执行文件关联
setcap(8)
。文件功能集存储在名为 的扩展属性(请参阅setxattr(2)
和xattr(7)
)中security.capability
。 […]