私は、プロセスが動作するために必要なLinuxの機能を知りません。 何が最善の方法ですか、どのような上限が必要かを知る方法はありますか?プロセスが動作するために必要なLinuxの機能を確認するには?
私が今考えることのできる唯一のことは、プロセス上でcapshを使い、すべてのキャップを削除することだけです。プロセスは失敗し、動作するまで大文字を追加し始めます(--drop = CAP_XZYを削除します)。
もっと良い提案がありますか?
私は、プロセスが動作するために必要なLinuxの機能を知りません。 何が最善の方法ですか、どのような上限が必要かを知る方法はありますか?プロセスが動作するために必要なLinuxの機能を確認するには?
私が今考えることのできる唯一のことは、プロセス上でcapshを使い、すべてのキャップを削除することだけです。プロセスは失敗し、動作するまで大文字を追加し始めます(--drop = CAP_XZYを削除します)。
もっと良い提案がありますか?
私はこのblog post by Brendan Greggでしばらく前に遭遇してきた別の方法は、使用することです能力トレーサ - 可能。以下
サンプル出力である:
$ 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は、すべての実行中のプロセスの効果的な機能を一覧表示することができますが、それは能力が実際にプロセスで必要とされているチェックの信頼性の高い方法を提供していません、理由:
のソースがの場合、githubで入手できます。 BCCのインストール手順(対応可能を含む)は、hereが利用可能です。 詳細については、冒頭で述べたブログ記事を参照してください。また、対応するにはカーネル4.4+が必要であることに注意してください。古いカーネルの代替手段もブログのポストにあります。
注:私は著者ではなく、私はツール開発者とは何ら関係していません。かつてフルルート特権を必要としていた複雑な監視アプリケーションの機能プロファイルを開発するために個人的に使用して以来、より多くのユーザーに提供したいと思っていました。
これはすばらしい答えです。ありがとうございました! – rand0m
予想よりも簡単です。 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
私は、インストーラが必要な機能を設定することを期待しています。 – Barmar
もしあなたがプロセスが何をしているのか正確に説明すれば...? – Paul
@Paul ok具体的な例を作りましょう: '#capsh --drop = cap_net_raw - -c" ping localhost " ping:icmpオープンソケット:操作が許可されていません。" この場合、私はpingに必要なキャップを落としますpingを実行します。もちろん、それは動作しません。このシナリオを考えると、pingにcap_net_rawが必要であることをどのようにして知ることができますか?プロセスが特定の上限を必要とするものを行う状況があります。どのようにして見つけ出すことができますか? – rand0m