BusyboxベースのLinuxシステムでrootユーザーとしてアクセスできる場合は、使用方法特定の制限付きLinuxセット能力(7)ビジボックス以外に他のツールは必要ありませんか?
答え1
したがって、まずこの作業にはいくつか必要です。libcap
基本ではない方法でソースから構築されたツール - したがって、これがあなたが望んだ答えではないことを認めます(ビジーボックスのみ)...しかし、バイナリは小さいので、次の方法を見てください。
このlibcap
ディストリビューションには、busyboxを使用してソースから構築されたカーネルをテストするサブディレクトリがあります。libcap
私は数年間カーネルのバグと修正/機能を分類するためにこのツールを使用してきました。ここでナビゲートできます。
https://git.kernel.org/pub/scm/libs/libcap/libcap.git/tree/kdebug
それがすることの一つは実行ですquicktest.sh
libcap
busybox ターゲット内で実行するときの互換性テストのコレクションです。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
接続する静的ファイルがあり、すべて完全に静的バイナリの場合は、ソースからビルドしてくださいcapsh
。setcap
ただし、このシステムでは次のことができます。
# ./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"