Brendan Gregg によるこのブログ投稿で少し前に見つけた別の方法は、機能トレーサー - capable を使用することです。 .
以下はサンプル出力です:
$ sudo /usr/share/bcc/tools/capable
TIME UID PID COMM CAP NAME AUDIT
11:31:54 0 2467 capable 21 CAP_SYS_ADMIN 1
11:31:54 0 2467 capable 21 CAP_SYS_ADMIN 1
11:31:59 1000 2468 ls 1 CAP_DAC_OVERRIDE 1
11:31:59 1000 2468 ls 2 CAP_DAC_READ_SEARCH 1
11:32:02 0 1421 timesync 25 CAP_SYS_TIME 1
11:32:05 1000 2469 sudo 7 CAP_SETUID 1
11:32:05 0 2469 sudo 6 CAP_SETGID 1
特定のプロセスに対してカーネルによって行われた機能チェックを記録するという大きな利点があります。これにより、実際に必要な機能に対してアプリケーションをプロファイリングできます。権限を絞り込み、非特権ユーザーとして実行します。
pscap の間 有効なを一覧表示できます 実行中のすべてのプロセスの機能を検証するため、どの機能が実際にプロセスで必要とされているかを確認する信頼できる方法を提供しません。理由は次のとおりです。
- プロセスは、許可されたセットに機能 X を持ち、特権操作を実行するために短い時間のみ有効なセットに上げることができます。
- プロセスは、より広範な一連の機能を使用して開始し、昇格された特権を必要とする初期化を実行し、一部 (またはすべて) の機能を削除することができます (例:raw ソケットを開く ping)。
- 機能ベースの方法で既に実行されているプロセスに対してのみ機能します。新しく開発されたアプリケーションに必要な最小限の機能セットを決定しなければならないとしたらどうでしょうか?
- アプリケーションに対して行われた権限チェックと、アプリケーションが実行する操作を関連付けることはできません。capable 単一のチェックのタイムスタンプを取得します。
capable のソース github で利用できます。 BCC のインストール手順 (対応を含む) 詳細については、最初に述べたブログ投稿を参照してください。また、対応するにはカーネル 4.4+ が必要であることにも注意してください。古いカーネルの代替もブログ投稿で利用できます。
注:私は作者ではありませんし、ツール開発者とは何の関係もありません。以前は実行に完全なルート権限が必要だった複雑な監視アプリケーションの機能プロファイルを開発するために個人的に使用したことがあり、このトレーサーが非常に役立つことがわかったため、より多くのユーザーに提供したかっただけです.
予想よりも簡単であることがわかりました。 libcap-ng (https://people.redhat.com/sgrubb/libcap-ng/) をインストールし、pscap
を使用します .
Ubuntu 16.04 では、以下でインストールできます:
sudo apt-get install libcap-ng-utils
サンプル出力の抜粋:
ppid pid name command capabilities
1 468 root systemd-journal chown, dac_override, dac_read_search, fowner, setgid, setuid, sys_ptrace, sys_admin, audit_control, mac_override, syslog, audit_read
1 480 root lvmetad full
1 492 root systemd-udevd full
1 1040 root rpc.idmapd full
1 1062 root rpc.gssd full
1 1184 messagebus dbus-daemon audit_write +
1 1209 root NetworkManager dac_override, kill, setgid, setuid, net_bind_service, net_admin, net_raw, sys_module, sys_chroot, audit_write
最近の libcap2 更新に基づく
1:(短いオプション):getpcaps
説明:
ここから:
<ブロック引用>getpcaps は、コマンド ラインで指定された pid 値によって示されるプロセスの機能を表示します。
例:
$ getpcaps <PID>
PID: = cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_raw,cap_sys_chroot,cap_mknod,cap_audit_write,cap_setfcap+i
2:(少し長いオプション):/proc ステータスと capsh
説明:
proc はプロセス情報の疑似ファイルシステム、つまりすべてのプロセスに関する情報を表示できるディレクトリです。
capsh について:
<ブロック引用>
このツールを使用して、Linux 機能のサポートと使用を調査し、制限することができます。このツールは、特定のタイプの機能テストと環境作成のための便利なラッパーを提供します。
また、機能の状態を要約するのに役立ついくつかのデバッグ機能も提供します。
例:
$ cat /proc/<PID>/status | grep Cap
(ほとんどのシステムで):
CapInh: 00000000a80425fb (Inherited capabilities)
CapPrm: 0000000000000000 (Permitted capabilities)
CapEff: 0000000000000000 (Effective capabilities)
CapBnd: 00000000a80425fb (Bounding set)
CapAmb: 000000000000000 (Ambient capabilities set)
capsh
を使用 16 進数から機能名にデコードするユーティリティ:
capsh --decode=00000000a80425fb
0x00000000a80425fb=cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_bind_service,cap_net_raw,cap_sys_chroot,cap_mknod,cap_audit_write,cap_setfcap
(*) capsh
をダウンロードできます :sudo apt-get install git libpcap-dev
.