Plan9のセキュリティアーキテクチャ(その1)
前回はPlan9にはrootはないけど,ホストオーナ(hostowner)ってのがあると書いた.ホストオーナはその名の通り,そのホスト,正確にはローカルマシンの所有者という意味で,誰がホストオーナかは/dev/hostownerをcatすればわかる.ターミナルを使っている場合は,OSを起動したユーザがホストオーナになる.
term% cat /dev/hostowner oraccha
rootユーザがいないって,セキュリティは大丈夫なのとか,initプロセスは誰の権限で動いているのとかいった疑問に対して,調べていこうと思う.
この/dev/hostownerというファイルは,コンソールをつかさどるcons(3)デバイスによって提供されている.consデバイスが提供するファイルを見てみよう./dev/hostowner以外にもたくさんのファイルを提供していることがわかる.
term% ls -l '#c' --rw-rw-r-- c 0 oraccha oraccha 24 Apr 16 2006 '#c/bintime' --rw-rw---- c 0 oraccha oraccha 0 Apr 16 2006 '#c/cons' ---w--w---- c 0 oraccha oraccha 0 Apr 16 2006 '#c/consctl' --r--r--r-- c 0 oraccha oraccha 72 Apr 16 2006 '#c/cputime' --r--r--r-- c 0 oraccha oraccha 0 Apr 16 2006 '#c/drivers' --rw-rw-r-- c 0 oraccha oraccha 48 Apr 16 2006 '#c/hostdomain' --rw-rw-r-- c 0 oraccha oraccha 0 Apr 16 2006 '#c/hostowner' :
consは何を元に/dev/hostownerの値を設定するのだろうか.それは,(ローカル)マシンのブート時に
user[none]:
と聞かれて,ログインしたと思うが,このユーザがホストオーナになる.ということで,boot(8)から情報が渡されているはず.
ホストオーナのログインにはパスワードも聞かれなかったはずだが,これはホストオーナの認証は自動的に行われるから.逆に言うと,物理的にマシンにアクセスされたらおしまいよということ.まぁ,UNIXでもシングルユーザモードでブートされたら同じことだし,この辺のセキュリティに関しては割り切られている.
initプロセスなどはホストオーナの権限で動いている.
term% ps | sed 4q oraccha 1 0:00 0:00 88K Await init oraccha 2 0:53 0:00 0K Wakeme genrandom oraccha 3 0:00 0:00 0K Wakeme alarm oraccha 4 0:00 0:00 0K Wakeme rxmitproc
/dev/hostownerのパーミッションが0664だから,glendaって書き込んじゃえ!ってechoすると,ホストオーナが変わってしまう.
term% echo -n glenda > /dev/hostowner
ホストオーナを変更すれば,ちゃんとinitのユーザにも反映されているのが確認できる.
term% ps | sed 4q glenda 1 0:00 0:00 88K Await init glenda 2 0:53 0:00 0K Wakeme genrandom glenda 3 0:00 0:00 0K Wakeme alarm glenda 4 0:00 0:00 0K Wakeme rxmitproc
この状態で,新しいウィンドウを作成しようとすると,"mount failed: permisson denied"と怒られる.これってどう解釈すればよいのかな.ちなみに,QEMU上のスタンドアローン環境で試している.