web-dev-qa-db-ja.com

プロセスが機能するために必要なLinux機能を見つける方法は?

プロセスが機能するために必要なLinux機能がわからないという困難な状況にあります。最良の方法、または必要なキャップを見つける方法は何ですか?

私が今考えることができる唯一のことは、capshを使用し、プロセスですべてのキャップを削除することです。その後、プロセスは失敗し、機能するまで(--drop = CAP_XZYを削除して)キャップを追加し始めます。

より良い提案はありますか?

11
rand0m

私がこの中で少し前に出くわした別の方法 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のインストール手順(capableを含む)が利用可能です ここ 。詳細については、冒頭で述べたブログ投稿を参照してください。また、capableにはカーネル4.4以降が必要であり、古いカーネルの代替手段もブログ投稿で入手できます。

注:私は作成者ではありません。また、ツール開発者とは一切関係がありません。以前は完全なroot権限を実行する必要があった複雑な監視アプリケーションの機能プロファイルを開発するために個人的に使用し、このトレーサーが非常に役立つことがわかったため、より多くのユーザーに提供したいと思いました。

5
tomix86

予想よりも簡単であることがわかりました。 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
7
rand0m