Plan9のセキュリティアーキテクチャ(その0)
ここ数年,仮想化技術と並んでホットな話題がセキュリティ技術だ.SELinuxに代表されるセキュアOSみたいな硬そうなものから,OLPCのBitfrostのような子供たちが使うセキュリティアーキテクチャはどうあるべきかという提案など,単純な技術的な枠組だけではない,幅広い視点からの議論が行われている(んだと思う).
さて,古典的なUNIXのセキュリティアーキテクチャは,ファイルに対して,ユーザ(uid)/グループ(gid)ごとに読み書き実行の権限を設定するものだ.この権限は,パーミッションと呼ばれる.
パーミッションがらみで,セキュアOSやソフトウェアの脆弱性などの議論で出てくるのが,suidの存在だ.例えば,passwdコマンドはパスワードファイル(/etc/passwd)を書き変えるけど,このファイルはオーナであるrootにしか書込み権限がない.つまり,普通に考えると一般ユーザがパスワードファイルを変更できない.そこで,passwdコマンドにsuidビットをセットすることで,誰がpasswdコマンドを実行しても,パスワードファイルを変更できるようにした.pingのようなプログラムでも同様だ.suidビットがセットされたプログラムは,ファイルのオーナ(passwdの場合はroot)の権限で実行することを意味する.
おそらく最初は,フィールドが余っているし使えるんじゃないとかいう,ハックだったんだと思うけど,当初のUNIXが想定していた単純な運用には十分だっただろう.ただし,この利便性の半面,suidプログラムのセキュリティホールをついてroot権限を奪われてしまう危険性が生まれた.諸刃の剣なのだ.
ちなみに,Dennis Ritchieは,suidに関する特許(US patent #4135240)を取っている.もちろん,その危険性は把握していて,Plan9の設計者たちはsuidを捨てた.そもそも,Plan9にはrootユーザすら存在しない.代わりにあるのはホストオーナだ.
ホストオーナや認証回りの話は全然わかってないので,調べてみる予定.