2006年3月19日

[selinux-users:01471] VFS Capability

海外@週末プログラマです

SELinuxとは直接関係ないのですが、Linuxで特権分割を行うためのコードを書
いてみました。

カーネルパッチ http://www.kaigai.gr.jp/pub/vfs_capability-version.1-2.6.16-rc6.patch
設定プログラム http://www.kaigai.gr.jp/pub/fscaps-1.0-kg.i386.rpm

一応、特定のプログラムのexec時にケーパビリティを付与することを意図した
コードになっているのですが、実際には有効に使われてはいません。
結局、rootだったら全特権を付与、一般ユーザなら特権は付与しない、という
コードになっています。

上記のパッチ+設定プログラムの組み合わせで、特定プログラムにケーパビリ
ティを付与することができます。
以下に通常はSUIDされている ping コマンドを、一般ユーザ権限で動作させる
設定例を示します。

[root@xxxxx fscaps]# setfcaps cap_net_raw=ep ping
↑pingコマンドに cap_net_raw ケーパビリティをセット
(ケーパビリティの設定には CAP_SYS_ADMIN が必要)

[kaigai@xxxxx fscaps]$ getfcaps ping
ping = cap_net_raw+ep
[kaigai@xxxxx fscaps]$ ls -l ping
-rwxr-xr-x 1 kaigai users 36608 3月 19 00:51 ping
↑Set User-ID bitは立っていない。

[kaigai@xxxxx fscaps]$ getfcaps ping
ping = cap_net_raw+ep
↑cap_net_raw ケーパビリティを持っている(Effective, Permitted)

[kaigai@xxxxx fscaps]$ id
uid=1001(kaigai) gid=100(users) 所属グループ=100(users) context=user_u:system_r:unconfined_t
↑特権ユーザではない

[kaigai@xxxxx fscaps]$ ./ping gw
PING gw.myhome.cx (60.35.180.202) 56(84) bytes of data.
64 bytes from gw.myhome.cx (60.35.180.202): icmp_seq=1 ttl=239 time=36.6 ms
64 bytes from gw.myhome.cx (60.35.180.202): icmp_seq=2 ttl=239 time=31.2 ms
64 bytes from gw.myhome.cx (60.35.180.202): icmp_seq=3 ttl=239 time=32.5 ms
↑普通にpingコマンドが使える

ちなみに、この方法はXATTRを利用しているのですが、これとは別に隠しファイルに
inode<->ケーパビリティの設定情報を格納するアプローチでやっている人がいます。
Olaf Dietsche という人なのですが、↓以下にパッチなどがあります。
http://www.olafdietsche.de/linux/capability/

コメントなど頂ければ嬉しいです。
--
KaiGai Kohei

投稿者 xml-rpc : 2006年3月19日 22:29
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/33548
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。