GNU/Linux >> Linux の 問題 >  >> Linux

プロセスが機能するために必要な Linux の機能を調べる方法は?

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 .


Linux
  1. Linuxコマンドが何をするかを知る方法

  2. Linux –特定のプロセスの名前空間を見つける方法は?

  3. Linux でどのプロセスがファイルをロックしているかを調べるにはどうすればよいですか?

  1. Linuxでファイルを使用しているプロセスを見つける方法は?

  2. 実行している Linux のバージョンを確認するにはどうすればよいですか?

  3. Linux ボックスに接続されているハードディスクを確認するにはどうすればよいですか?

  1. Linuxで開いているすべてのポートのリストを見つける方法

  2. 実行しているLinuxバージョンは何ですか?調べる方法は次のとおりです

  3. Linuxでゾンビプロセスを見つけて殺す方法