VirtuaBox にて、vnic0 が利用できなくなる現象に遭遇。
こんな message が出力されますた。
Failed to open VNIC "vnic1" in raw mode.
VBox status code: -3100 (VERR_HOSTIF_INIT_FAILED).
終了コード:
0x80004005
コンポーネント:
Console
インターフェース:
IConsole {d5a1cbda-f5d7-4824-9afe-d640c94c7dcf}
いままで、root で動かしていたのを一般ユーザでやるようにしたのですが最小特権制御にぶち当たっていたのが原因だったようです。
/dev/net/vnic0 の permission が crw-rw-rw- だったので、使えると勘違いしていました。お恥ずかしい・・・
/etc/security/device_policy ファイルに、device の read/write が可能な特権(Privileges)が定義されています。
この中に vnic のエントリがあったので、確認してみると read/write には net_rawaccess の権限が必要なことがわかりました。
/etc/security/device_policy
--
vnic read_priv_set=net_rawaccess write_priv_set=net_rawaccess
--
一般ユーザにこの特権を与えればいんじゃね?ということで、まずは、自分に与えられている特権を ppriv $$ で確認します。
E とか I とか P とか L は、特権セットと呼ばれるもので、exec に引き渡される特権(E)や、そのプロセス(ここでは、ksh)が持つ特権(I) などがありますが、無視して・・・
とにかく、自分がコマンドを発行しようと利用している ksh の特権は basic であることがわかります。
$ ppriv $$
1899: ksh
flags =
E: basic
I: basic
P: basic
L: all
この ksh から VirtualBox が呼び出され実行されるので、特権は basic の範囲内で起動されます。
なので、vnic0 を read/write するには、十分な特権が与えられていないことになりエラーとなっていたわけです。
というわけで、下記のコマンドで一般ユーザである kazus に net_rawaccess を与えてあげました。
# usermod -K defaultpriv=basic,net_rawaccess kazus
* defaultpriv を設定する際、basic は必ずつけてください。
でないと、なんにもできなくなります。
* 変更対象となる user が login していると、こう言われます。
UX: usermod: kazus is currently logged in, some changes may not
take effect until next login.
再ログインして、自分の特権を確認。
net_rawaccess が割り当てられていました。
$ ppriv $$
2476: ksh
flags =
E: basic,net_rawaccess
I: basic,net_rawaccess
P: basic,net_rawaccess
L: all
でも、これすると vnic interface の read/write が可能になるのでたとえば一般ユーザで vnic の snoop がとれたりします・・・
使いどころは、考える必要がありますが、まぁ、こんなふうになっていましたということで。
#先日、Least Privilege めんどくせーとさけんでいた罰でしょうか。。。orz