我从 man pthread_setname_np编译了示例程序
g++ -pthread example.cpp
我设置了我的程序 a.out 的 cap_net_raw 能力。
sudo setcap 'cap_net_raw=+eip' a.out
令人惊讶的是,程序在执行时失败:
$./a.out
Created a thread. Default name is: a.out
pthread_setname_np: Permission denied
当我删除它起作用的功能时..
$sudo setcap 'cap_net_raw=-eip' a.out
$./a.out
Created a thread. Default name is: a.out
The thread name after setting it is THREADFOO.
Done
所以对我来说,当我添加一项功能时,我似乎拥有更少的权限。有人可以解释一下吗?
感谢您的回复;-)
一些附加信息:
- 我的目标支持功能我使用 ping 命令和 CAP_NET_RAW 检查了它
- 内核 4.4.32-rt43
- RFS:分机4
- 我将帖子简化为示例程序,我同意将 CAP_NET_RAW 添加到该程序是没有意义的。
- 如果我添加 CAP_DAC_OVERRIDE 它会起作用,但我想避免这种情况。