Использование perf из учетной записи пользователя
Я следую admin-guide/perf-security.html из документации ядра, чтобы настроить perf с учетной записью пользователя. Вкратце, я настроил возможности двоичного файла и сменил владельца группы на . Однако мой пользователь, похоже, не может использовать perf.
От использованияperf stat $(which ls)
на книжном черве Debian я получаю ошибку:
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_event_paranoid
, который, согласно perf-security.html, предназначен для непривилегированных пользователей, тогда как группа должна состоять из привилегированных пользователей. На вопрос на unix.stackexchange об учетных записях пользователей perf , точно такой же, как и у меня, ответа не было.
Для репликации :
В корневой оболочке создайте группу и измените двоичный файл perf, чтобы изменить принадлежность группы и запретить доступ другим:
PERFBIN=$(which perf)
groupadd perf_users
chgrp perf_users $PERFBIN
chmod o-rxw $PERFBIN
Теперь включите возможности двоичного файла,
setcap "cap_perfmon,cap_sys_ptrace,cap_syslog=ep" $PERFBIN
setcap -v "cap_perfmon,cap_sys_ptrace,cap_syslog=ep" $PERFBIN
getcap $PERFBIN
Наконец, либо добавьте пользователя вperf_users
группа сusermod -a -G perf_users $USER
или добавьте/etc/sudoers.d/perf
файл с содержимым$USER ALL = (: perf_users) $PERFBIN
и использовать какsudo -g perf_users perf stat $(which ls)