プロセスが機能するために必要なLinux機能がわからないという困難な状況にあります。最良の方法、または必要なキャップを見つける方法は何ですか?
私が今考えることができる唯一のことは、capshを使用し、プロセスですべてのキャップを削除することです。その後、プロセスは失敗し、機能するまで(--drop = CAP_XZYを削除して)キャップを追加し始めます。
より良い提案はありますか?
私がこの中で少し前に出くわした別の方法 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を使用すると、実行中のすべてのプロセスの有効機能を一覧表示できますが、信頼できる方法は提供されません。プロセスに実際に必要な機能を確認する理由は次のとおりです。
capableのソースは、 github で入手できます。 BCCのインストール手順(capableを含む)が利用可能です ここ 。詳細については、冒頭で述べたブログ投稿を参照してください。また、capableにはカーネル4.4以降が必要であり、古いカーネルの代替手段もブログ投稿で入手できます。
注:私は作成者ではありません。また、ツール開発者とは一切関係がありません。以前は完全なroot権限を実行する必要があった複雑な監視アプリケーションの機能プロファイルを開発するために個人的に使用し、このトレーサーが非常に役立つことがわかったため、より多くのユーザーに提供したいと思いました。
予想よりも簡単であることがわかりました。 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