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 <rootid>] (-r|-|<caps>) <filename> [ ... (-r|-|<capsN>) <filenameN> ]
Note <filename> 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
編集:最後の20本の出力ラインstrace setcap cap_sys_admin,cap_sys_ptrace,cap_syslog=ep perf
:
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<<CAP_SETFCAP, permitted=0, inheritable=0}) = -1 EPERM (Operation not permitted)
dup(2) = 3
fcntl(3, F_GETFL) = 0x2 (flags O_RDWR)
fstat(3, {st_mode=S_IFCHR|0620, st_rdev=makedev(0x88, 0x1), ...}) = 0
write(3, "unable to set CAP_SETFCAP effect"..., 72unable to set CAP_SETFCAP effective capability: Operation not permitted
) = 72
close(3) = 0
exit_group(1) = ?
+++ exited with 1 +++
答え1
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
すべてが正しく機能していることを確認するために、インストール前にテストしました。
インストールが完了したら、次に示すコマンドを実行できました。性能安全文書は予想通りです。
答え2
この質問は2年が経ちましたが、とにかく答えることが役に立つと思いました。
Aにも同様の問題がありましたが、それが/usr/bin/perf
シェルスクリプトであることに気づきました。
$ file /usr/bin/perf
/usr/bin/perf: Bourne-Again shell script, ASCII text executable
それは呼び出されます/usr/lib/linux-tools/6.5.0-26-generic/perf
(私のカーネルバージョンは6.5.0-26-genericです)、実際の実行可能ファイルを呼び出す/usr/lib/linux-hwe-6.5-tools-6.5.0-26/perf
とついに動作します。setcap
$ sudo setcap cap_sys_admin,cap_sys_ptrace,cap_syslog=ep /usr/lib/linux-hwe-6.5-tools-6.5.0-26/perf