我想用perf工具。我按照指示设置了一组特权用户,允许他们不受限制地执行性能监视和可观察性(如这里所指示的:https://www.kernel.org/doc/html/latest/admin-guide/perf-security.html)。我添加了这个组,并限制了不属于组的用户的访问权限。当将功能分配给perf工具时,我开始遇到问题:
setcap cap_sys_admin,cap_sys_ptrace,cap_syslog=ep perf我得到一个无效的参数错误说
fatal error: Invalid argument
usage: setcap [-q] [-v] [-n ] (-r|-|) [ ... (-r|-|) ]
Note must be a regular (non-symlink) file.但是运行stats perf给了我这个
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行输出:
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<发布于 2021-12-07 10:58:44
我也经历过这种情况,通过从源代码构建和安装最新版本的libcap,我能够让它正常工作。这也许不是最好的解决办法,但对我有效。
$ 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-安全文档中列出的命令。
https://unix.stackexchange.com/questions/680014
复制相似问题