最小限の Busybox ベースのシステムで機能が制限されたプロセスを開始します。

最小限の Busybox ベースのシステムで機能が制限されたプロセスを開始します。

BusyboxベースのLinuxシステムでrootユーザーとしてアクセスできる場合は、使用方法特定の制限付きLinuxセット能力(7)ビジボックス以外に他のツールは必要ありませんか?

ベストアンサー1

したがって、まずこの作業にはいくつか必要です。libcap基本ではない方法でソースから構築されたツール - したがって、これがあなたが望んだ答えではないことを認めます(ビジーボックスのみ)...しかし、バイナリは小さいので、次の方法を見てください。

このlibcapディストリビューションには、busyboxを使用してソースから構築されたカーネルをテストするサブディレクトリがあります。libcap私は数年間カーネルのバグと修正/機能を分類するためにこのツールを使用してきました。ここでナビゲートできます。

https://git.kernel.org/pub/scm/libs/libcap/libcap.git/tree/kdebug

それがすることの一つは実行ですquicktest.sh libcapbusybox ターゲット内で実行するときの互換性テストのコレクションです。kdebug/../../linux/テストするシステムを構築するために、この相対位置にいくつかのカーネルソースコードがあるとします。基本的なアイデアは、libcapソースコードを解凍/git複製し、次のことです。

$ git clone git://git.kernel.org/pub/scm/libs/libcap/libcap.git
$ cd libcap/kdebug
$ make

この操作を初めて試してみると、qemuこのビジボックスのターゲットを起動するために必要な依存関係がたくさんあるため、ビルドに失敗する可能性があります(これを列挙する方法は実際にはReadmeで説明する必要があります)。ただし、インストール後はバイナリはほとんどありませんbusybox

qemu上記のタスクを実行できる場合は、テストが完了した後にこのコマンドラインを使用して管理システムと対話することもできます。

$ make shell

[終了とCtrl-dの両方でqemuを終了]。

微妙なタスクを実行したい場合は、quicktest.shカスタムビルド./capshなどのバイナリを使用して./setcapバスボックスベースのシステム内で権限を使用してタスクを実行する方法を示す多くの例があります。ホストシステムにglibc接続する静的ファイルがあり、すべて完全に静的バイナリの場合は、ソースからビルドしてくださいcapshsetcap

ただし、このシステムでは次のことができます。

# ./capsh --iab="^cap_net_raw" --secbits=15 == --print
Current: cap_net_raw=eip
Bounding set =cap_chown,cap_dac_override,cap_dac_read_search,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_linux_immutable,cap_net_bind_service,cap_net_broadcast,cap_net_admin,cap_net_raw,cap_ipc_lock,cap_ipc_owner,cap_sys_module,cap_sys_rawio,cap_sys_chroot,cap_sys_ptrace,cap_sys_pacct,cap_sys_admin,cap_sys_boot,cap_sys_nice,cap_sys_resource,cap_sys_time,cap_sys_tty_config,cap_mknod,cap_lease,cap_audit_write,cap_audit_control,cap_setfcap,cap_mac_override,cap_mac_admin,cap_syslog,cap_wake_alarm,cap_block_suspend,cap_audit_read,cap_perfmon,cap_bpf,cap_checkpoint_restore
Ambient set =cap_net_raw
Current IAB: ^cap_net_raw
Securebits: 017/0xf/4'b1111 (no-new-privs=0)
 secure-noroot: yes (locked)
 secure-no-suid-fixup: yes (locked)
 secure-keep-caps: no (unlocked)
 secure-no-ambient-raise: no (unlocked)
uid=0(root) euid=0(root)
gid=0(root)
groups=0(root)
Guessed mode: UNCERTAIN (0)

これは、権限をroot単一の機能に制限する方法を示しています。cap_net_raw実行するジョブには2つのオプションがあります。

  • バイナリにいくつかのファイル機能を追加し、それを実行するようにユーザー(ルート上)を変更します。
# ./setcap cap_net_raw=ep ./yourbinary
# ./capsh --user=nobody -- -c "./yourbinary"
  • または、上記のcapshメカニズムを使用して権限を削除し、環境機能を使用してプログラムの実行時に権限を持つrootユーザーを制限します。nobody
# ./capsh --user=nobody --iab="^cap_net_raw" -- -c "./yourbinary"

おすすめ記事