更改“perf_event_paranoid”的安全隐患

Mar*_*ing 9 profiling linux-kernel perf

我想使用该perf实用程序为我的程序收集测量值。它在带有 Debian 9 的共享集群机器上运行,默认情况下 /proc/sys/kernel/perf_event_paranoid设置为 3,因此不允许我收集测量值。在更改它之前,我想知道这意味着什么。

是否只是安全性允许其他用户分析由其他用途运行的内容并因此获得洞察力?我们不关心这个,因为无论如何它都是用户的内部圈子。或者也许是性能,这也会影响其他人?

Ste*_*itt 11

这只是安全性,性能不受影响(至少,在perf未运行时;即使如此,perf的影响应该是最小的)。更改perf_event_paranoid不会改变系统的性能特征,无论是否perf正在运行。

内核文档中详细讨论了的安全含义perf。建议为有权访问的用户设置一个组perf,并perf为该组设置适当的功能,而不是更改perf_event_paranoid

cd /usr/bin
groupadd perf_users
chgrp perf_users perf
chmod o-rwx perf
setcap cap_sys_admin,cap_sys_ptrace,cap_syslog=ep perf
Run Code Online (Sandbox Code Playgroud)

并将自己添加到perf_users组中。

内核的 5.8 版增加了一个专用功能,因此cap_sys_admin可以将最后一个命令简化为:

setcap cap_perfmon,cap_sys_ptrace,cap_syslog=ep perf
Run Code Online (Sandbox Code Playgroud)

  • 需要注意的是,在某些 Linux 发行版(例如 Ubuntu 18.04LTS)上,`/usr/bin/perf` 实际上是一个 `bash` 脚本,它调用当前内核的“真正的”`perf` 二进制文件。为了让它在这种情况下工作,您需要设置相应的功能。 (5认同)