首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在perf上设置功能(setcap)

如何在perf上设置功能(setcap)
EN

Unix & Linux用户
提问于 2021-12-03 13:07:42
回答 1查看 910关注 0票数 3

我想用perf工具。我按照指示设置了一组特权用户,允许他们不受限制地执行性能监视和可观察性(如这里所指示的:https://www.kernel.org/doc/html/latest/admin-guide/perf-security.html)。我添加了这个组,并限制了不属于组的用户的访问权限。当将功能分配给perf工具时,我开始遇到问题:

代码语言:javascript
复制
setcap cap_sys_admin,cap_sys_ptrace,cap_syslog=ep perf

我得到一个无效的参数错误说

代码语言:javascript
复制
fatal error: Invalid argument
usage: setcap [-q] [-v] [-n ] (-r|-|)  [ ... (-r|-|)  ]

Note  must be a regular (non-symlink) file.

但是运行stats perf给了我这个

代码语言:javascript
复制
  File: ./perf
  Size: 1622        Blocks: 8          IO Block: 4096   regular file
Device: 10307h/66311d   Inode: 35260925    Links: 1
Access: (0750/-rwxr-x---)  Uid: (    0/    root)   Gid: ( 1001/perf_users)
Access: 2021-12-03 13:08:48.923220351 +0100
Modify: 2021-11-05 17:02:56.000000000 +0100
Change: 2021-12-03 12:31:49.451991980 +0100
 Birth: -

也就是说这个文件是一个普通的文件。有什么问题吗?如何设置Perf工具的功能?

Linux发行版: Ubuntu 20.04

编辑:strace setcap cap_sys_admin,cap_sys_ptrace,cap_syslog=ep perf的最后20行输出:

代码语言:javascript
复制
munmap(0x7f825054c000, 90581)           = 0
prctl(PR_CAPBSET_READ, CAP_MAC_OVERRIDE) = 1
prctl(PR_CAPBSET_READ, 0x30 /* CAP_??? */) = -1 EINVAL (Invalid argument)
prctl(PR_CAPBSET_READ, 0x28 /* CAP_??? */) = 1
prctl(PR_CAPBSET_READ, 0x2c /* CAP_??? */) = -1 EINVAL (Invalid argument)
prctl(PR_CAPBSET_READ, 0x2a /* CAP_??? */) = -1 EINVAL (Invalid argument)
prctl(PR_CAPBSET_READ, 0x29 /* CAP_??? */) = -1 EINVAL (Invalid argument)
brk(NULL)                               = 0x55de3e858000
brk(0x55de3e879000)                     = 0x55de3e879000
capget({version=_LINUX_CAPABILITY_VERSION_3, pid=0}, NULL) = 0
capget({version=_LINUX_CAPABILITY_VERSION_3, pid=0}, {effective=0, permitted=0, inheritable=0}) = 0
capget({version=_LINUX_CAPABILITY_VERSION_3, pid=0}, NULL) = 0
capset({version=_LINUX_CAPABILITY_VERSION_3, pid=0}, {effective=1<
EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2021-12-07 10:58:44

我也经历过这种情况,通过从源代码构建和安装最新版本的libcap,我能够让它正常工作。这也许不是最好的解决办法,但对我有效。

libcap-2.53

代码语言:javascript
复制
$ git clone https://kernel.googlesource.com/pub/scm/linux/kernel/git/morgan/libcap
$ cd libcap
$ git checkout libcap-2.53
$ make
$ make test
$ make sudotest
$ sudo make install

我在安装前做了测试以确认一切正常。

一旦安装好它,我就能够像预期的那样运行perf-安全文档中列出的命令。

票数 3
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/680014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档