有没有办法配置 traceroute 使得 -T 或 -I 标志不需要 root 权限来执行?

有没有办法配置 traceroute 使得 -T 或 -I 标志不需要 root 权限来执行?

我使用的是 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。 […]

相关内容