getpcapsはUbuntu 20.04およびLinux 5.11.0-38-genericでは動作しません

getpcapsはUbuntu 20.04およびLinux 5.11.0-38-genericでは動作しません

StackOverflowで見ましたhttps://stackoverflow.com/a/64000118/8507296命令を使用してプロセスを確認する機能

getpcaps <pid>

psコマンドの出力

$ ps
    PID TTY          TIME CMD
   9618 pts/0    00:00:02 zsh
  12797 pts/0    00:00:00 bash
  12920 pts/0    00:00:00 ps

PCAPの取得

$ getpcaps 9618
9618: =

システムメッセージ

$ uname -a
Linux Vostro-5568 5.11.0-38-generic 
#42~20.04.1-Ubuntu SMP Tue Sep 28 20:41:07 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

その他

しかし、同じ答えには、以下のように私に役立つ別の方法があります。

$ cat /proc/<PID>/status | grep Cap
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
CapBnd: 000001ffffffffff
CapAmb: 0000000000000000
$ capsh --decode=000001ffffffffff
WARNING: libcap needs an update (cap=40 should have a name).
0x000001ffffffffff=cap_chown,cap_dac_override,cap_dac_read_search,cap_fowner,
cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_linux_immutable,
cap_net_bind_service,cap_net_broadcast,cap_net_admin,cap_net_raw,cap_ipc_lock,
cap_ipc_owner,cap_sys_module,cap_sys_rawio,cap_sys_chroot,cap_sys_ptrace,
cap_sys_pacct,cap_sys_admin,cap_sys_boot,cap_sys_nice,cap_sys_resource,cap_sys_time,
cap_sys_tty_config,cap_mknod,cap_lease,cap_audit_write,cap_audit_control,cap_setfcap,
cap_mac_override,cap_mac_admin,cap_syslog,cap_wake_alarm,cap_block_suspend,
cap_audit_read,38,39,40

ベストアンサー1

そのステータスファイルで表示されているゼロ以外の値は次のとおりです。境界設定(実際の機能の上限です)。境界セットは、プロセスが持つことができる機能を制限するために使用されます。ゼロ以外の値がシステムデフォルトです。したがって、興味深い値ではありません。これが意味するのは、これが実行中のシステムの既知の機能であることです。その価値は興味深いデフォルトから変更された場合。

Cap*このステータスファイルには、個々のエントリに関連する大量のデルタ履歴があります。ただCapInhCapPrmそしてCapEff最初から(~1999?)存在しました。 POSIX.1e(ドラフト仕様、このドラフトの最後に知られているコピーへのリンクについては、このページの下部を参照してください。)。libcapこのプログラムを提供するライブラリは、getpcapsもともとこの仕様で説明されている機能のためのユーザースペースAPIの実装として開発されました。テキストは次のように表現されます。能力仕様にはこれら3つの機能のみが含まれています。バナー

仕様によれば、CapInhとはプロセスの実際の機能CapPrmであり、 、 のみ実際にプロセスに直接的な権限を付与します。CapEffCapPrmCapEff

後でCapBndプロセスがビットのみを削除できるプロセス固有の境界セットが作成されました(モジュロユーザーネームスペースコンテナのバグが最近修正されました)。後でCapAmb追加されました。これら2つのベクトルの意味は次のとおりです。無邪気に継承可能 - 子は親の正確なコピーを継承しますexec*()。これはとCapPrmの意味とは大きく異なりますCapEff

この意味論とテキスト表現の遺産(約20年前)について考えると、AとBの概念をサポートするために、3つのタプルであるI、A、およびBに対して異なるテキスト表現を作成しました。 IAB タプルです。することができますcap_iabマニュアルページまたは文書pam_cap.so。 IABテキスト形式はpam_cap.so設定構文に使用されます。 Bは実際には次のように表されます。CapBndデフォルトは興味深いゼロ値であることを強調してください。これらのメカニズムはすべて、次に重点を置いて詳細に説明します。能力継承はここから

試してみる例(比較目的):

$ getpcaps 1

こんなことあるよたくさん能力...=ep。ここでは、どのように動作するかについて詳しく学ぶことができます。libcapこれ。最新バージョンでは、コマンドラインオプションが見つかった場合にサポートgetpcapsされます。--iab興味深い(デフォルト以外のIAB値)プロセスのテキスト出力を追加します[..IAB..]。リリースノートにはこのサポートがありますlibcap-2.54

どのバージョンをインストールしたかはよくわかりませんがlibcap、書く時点では最新バージョンですlibcap-2.60。このプログラムは、あなたが見ている名前のない関数(38、39、40)をすべて知っています。実際、Evenlibcap-2.60バージョンはcapsh以下をサポートしています。

$ capsh --explain=40
cap_checkpoint_restore (40) [/proc/self/status:CapXXX: 0x0000010000000000]

    Allows a process to perform checkpoint
    and restore operations. Also permits
    explicit PID control via clone3() and
    also writing to ns_last_pid.

おすすめ記事