如何在没有root的情况下运行linux perf

如何在没有root的情况下运行linux perf

我想对我的应用程序进行基准测试。到目前为止,我使用的是 gnu time,但 perf 会产生更好的统计数据。

原则上,我想走专门的性能用户的路线,而不是允许所有用户进行一些与安全相关的事情,不是因为我意识到特定的危险,而是因为我不了解安全含义。因此,我想避免降低所讨论的性能的偏执设置在这个问题中

阅读kernel.org 上的性能安全性(请注意,该文档似乎暗示这应该适用于 Linux 5.9 或更高版本),我这样做了:

# addgroup perf_users
# adduser perfer
# addgroup perfer perf_users
# cd /usr/bin
# chgrp perf_users perf
# chmod o-rwx perf
# setcap "cap_perfmon,cap_sys_ptrace,cap_syslog=ep" perf
# setcap -v "cap_perfmon,cap_sys_ptrace,cap_syslog=ep" perf

返回perf: ok.

# getcap perf返回 perf cap_sys_ptrace,cap_syslog,cap_perfmon=ep

这与他们获得的链接不同 perf = cap_sys_ptrace,cap_syslog,cap_perfmon+ep

我的Linux是5.10.0-5-amd64 #1 SMP Debian 5.10.24-1

如果我现在perf与用户一起运行perfer,我仍然收到错误消息

Error:
Access to performance monitoring and observability operations is limited.
Consider adjusting /proc/sys/kernel/perf_event_paranoid setting to open
access to performance monitoring and observability operations for processes
without CAP_PERFMON, CAP_SYS_PTRACE or CAP_SYS_ADMIN Linux capability.
More information can be found at 'Perf events and tool security' document:
https://www.kernel.org/doc/html/latest/admin-guide/perf-security.html
perf_event_paranoid setting is 3:
  -1: Allow use of (almost) all events by all users
      Ignore mlock limit after perf_event_mlock_kb without CAP_IPC_LOCK
>= 0: Disallow raw and ftrace function tracepoint access
>= 1: Disallow CPU event access
>= 2: Disallow kernel profiling
To make the adjusted perf_event_paranoid setting permanent preserve it
in /etc/sysctl.conf (e.g. kernel.perf_event_paranoid = <setting>)

我试图用上述所有方法来规避它。

你们中有人知道如何在不降低偏执设置的情况下获得 perf 运行 perf 吗?

答案1

执行此操作的标准方法包括但不限于

  1. 使用 visudo 添加用户或组来运行特定命令 https://www.digitalocean.com/community/tutorials/how-to-edit-the-sudoers-file

  2. 使用 chmod 设置 SUID 或 GUID 粘性位 https://www.redhat.com/sysadmin/suid-sgid-sticky-bit

相关内容