如何用非 root 用户通过 ip 这个命令创建 tap 设备?

2022-06-20 13:52:11 +08:00
 kgdb00
用 root 用户执行以下命令可以创建 tap 设备:
ip tuntap add mode tap tap0

用普通用户执行会报错:
ioctl(TUNSETIFF): Operation not permitted

我用如下命令设置了 /usr/sbin/ip 文件的 capabilities 还是不行。
setcap cap_net_admin+ep /usr/sbin/ip
1637 次点击
所在节点    Linux
6 条回复
kgdb00
2022-06-20 15:09:23 +08:00
用 fedora / ubuntu 发行版的 ip 命令都不行,用自己编译的 ip 命令,设置 capabilities 后就可以,真奇怪。
tomychen
2022-06-20 21:15:33 +08:00
不考虑安全问题的话
chmod +s /usr/sbin/ip
qbqbqbqb
2022-06-21 13:38:00 +08:00
你看一下 /usr/sbin/ip 是不是链接到 /usr/bin/ip 的软链接。软链接上没法设置 capabilities ,得在实际的文件上设置。
kgdb00
2022-06-21 13:42:24 +08:00
@qbqbqbqb 不是软链接,你可以在 fedora 36 或 ubuntu 20.04 上试一试
qbqbqbqb
2022-06-21 13:49:28 +08:00
刚刚查了一下资料,确实是 ip 命令本身的问题。ip 命令在启动的时候检测到非 root 就会扔掉一些 capabilities.

源代码:
https://github.com/shemminger/iproute2/blob/main/ip/ip.c (注意到 main 函数里调用了 drop_cap )
https://github.com/shemminger/iproute2/blob/main/lib/utils.c ( drop_cap 函数实现)
qbqbqbqb
2022-06-21 13:52:48 +08:00
如果你自己编译的 ip 命令没有链接 libcap 的话就不会有 drop_cap 这个功能

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/860861

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX