【发布时间】:2017-08-02 16:07:03
【问题描述】:
我用 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:ext4
- 我将帖子缩减为示例程序,我同意将 CAP_NET_RAW 添加到该程序是没有意义的。
- 如果我添加 CAP_DAC_OVERRIDE 会起作用,但我想避免这种情况。
【问题讨论】:
标签: c linux pthreads privileges linux-capabilities