Logo address

Plan9 System

2017/06/20 改訂作業中

システム構成

2017/06/20

Plan9 は分散システムである。機能別に異なるハードウェアに処理を分担させられる。

以下のように多様な組み方がある

(a) ファイルサーバー + 認証サーバー + CPUサーバー + Plan9端末
(b) {ファイルサーバー + 認証サーバー} + CPUサーバー + Plan9端末
(c) {ファイルサーバー + 認証サーバー + CPUサーバー} + Plan9端末
(d) {ファイルサーバー + 認証サーバー + CPUサーバー + Plan9端末}

ここに { ... } は、1つのハードウェアに纏める意味。

Plan9 端末

Plan9 端末とは、Plan9用に設計された端末で、1台のハードウェアを専用に割り当てても良いが、他の OS の中に同居させても良い。筆者の場合には MacBook を Plan9 端末の代わりに使っている。(その方が使いやすい)
MacBook を使った場合、端末環境は

のいずれかであろう。かっては 9vx と言う選択肢もあったが、最近の Mac の環境では動かないと思う。

端末としての使いやすさは drawterm が圧倒的に上である。理由は Mac との間でファイル転送、Cut&Paste が可能であるから...

CPU サーバー

インターネットなどへのサービスを行うためのサーバー。
安全性や負荷を考慮すると、(a) あるいは (b) のように、独立している方が良い。
筆者の場合には、研究室に設置していた時には、初期には (a) の構成、やがて (b) の構成に変更した。現在は家庭内にあるので、(c) の構成である。
Bell-Labs では (a) の構成で運用していたらしい。(複数の CPU サーバーがあったらしい)

認証サーバー

認証を行うサーバー。殆ど負荷はかからないはず。独立して持つ理由はないと思える。(b) 構成のように、ファイルサーバーと兼ねる方が簡便。

ファイルサーバー

Plan9 のファイルシステムは、他の OS と異なり、カーネルの外に出ている。そのために、好みのファイルシステムを選ぶことが可能である。現在ではファイルシステムの選択は、主に2つの中から選択されるであろう。

筆者は CWFS を推奨する。理由は堅牢、シンプル、性能。
いずれにせよ、毎日バックアップが自動的に取られ、過去のシステムの状態が見れる。


Plan9端末の単体システム

Plan9は分散OSであるが PC上で単体でも動作する。単体で使用したPlan9は軽快で柔軟なOSである。PC-Plan9 は MS-DOS からコマンドで立ち上げる。そのあと10数秒でPlan9システムが立ち上がる。終了処理に1秒とかからない。読者がもしもUNIXやWindowの重さにうんざりしているならば、Plan9の単体システムは魅力的に映るだろう。
Plan9のシステムは単体として使用しても以下の魅力を持っている。
1. 軽快
2. UNIX風に使用出来る
3. UNIXの多くのツールが使用出来る
4. UNIXと異なりマウスとグラフィックスが活用されている
5. Plan9の香りを楽しむ事ができる
6. OSの全てのソースが提供されている
7. 匿名のネットワークサービスを実行できる

Plan9の全てをインストールするのに500MBを消費する。
Plan9を単体で使用するには1GB程度のハードディスク(SCSIまたはIDE)と32MB程度のメモリがあれば十分であろう。使い古しのコンピュータで構わない。

単体システムとしての普通の設定はローカルディスクを使用した Plan9 端末としての設定である。このシステムでは認証メカニズムを持っていない。従ってユーザ none (UNIX の nobody に相当する)以外はネットワークからのサービスを受けることができない。しかしこの下で、
1. anonymous ftp
2. Web
3. メールの中継
4. DHCP
等、認証を伴わないサービスを実行できる。

Plan9 における anonymous ftp や Web の安全性は UNIX と比較にならないほど高い。マイナーと言うだけでインターネットでは安全性が極めて高くなる。その上、UNIX と異なり ftp は初めから匿名サービスに使える様に設計してある。さらに Plan9 はインターネットでのセキュリティを守る為の高度な仕組みを持っている。そしてアクセス管理が容易である。従って、Web や ftp のサーバは持ちたいがクラッカーとの消耗戦はやりたくないと言う筆者の様な人間は Plan9 単体システムを持つが良い。

Plan9における認証メカニズムは、そこらの OS (UNIX を含む)のようなルーズなものではない。Plan9 ではカーネルが認証に関与している(UNIX は違う。UNIX は単にアプリケーションが意地悪しているだけである)。 認証メカニズムを持たないと言う事は、認証されるべきユーザとしてネットワークからサービスを受けることは本質的に不可能な事を意味している。

認証サーバだけの単体システム

サーバ仕様の単体システムも構築可能である。この場合には telnet や ftp 等、 UNIX で行われている通常の認証を伴うサービスを実行できる。さらに Plan9 第3版で導入された drawterm が使える。(但し現在の版では drawterm をサービスするにはサーバのマウスと競合する。従ってサーバはマウスの使用を止めなくてはならない。)
drawterm は他の OS (Windows、Linux、FreBSD)からPlan9にアクセスする時のツールであり、 telnet と異なりグラフィック端末である。

認証サーバをネットワークからアクセスさせた場合の危険性は、パスワード情報がサーバに同居している事にある。(この点では UNIX と変わらない。) ディスク上に置かれている Plan9 のパスワード情報はサーバキーで暗号化されている。サーバーキーもまたディスク上に置かれている。それはホストオーナーだけが読み取れる。
暗号化には DES が使用されている。従って DES の安全性のレベルで安全であると言える。(もっとも UNIX と異なり生のパスワードをネットワークに流さないので安心感はある。)

Plan9 では UNIX と異なり、匿名サービスのアクセス空間をカーネルの機能として奇麗に閉じ込めることができる。この点では UNIX よりも遥かに安全性が高い。

UNIX でも同様であるが、問題は屡々システム管理のミスから発生する。従って認証情報はインターネットにサービスするコンピュータの中に置かないのがベストである。

通常のユーザは何時でも暗号化されたパスワードデータベースにアクセスできるので、信頼できるユーザだけが使用するサーバ、例えば研究室等のワークステーション、として割り切った方が良いだろう。

H2 Plan9端末+認証サーバ
Plan9端末と認証サーバを組み合わせると UNIX よりも遥かに堅牢なシステムができ上がる。即ちPlan9端末で UNIX と同等のサービスを行い、かつ、認証情報を完全にユーザから隔離する事が可能である。認証サーバは CPU パワーを要求されない。使い古しのパソコンで十分である。Plan9端末のハードディスクは認証サーバのハードディスクとは別に持つ必要がある。

Plan9 端末でネットワークサービスを行うには /rc/bin/termrc の終わりの方で、

aux/listen -d /rc/bin/service tcp
aux/listen -d /rc/bin/service il
を実行させればよい。il を含む行は、認証サーバから Plan9 端末をマウントする場合に必要になる。
複数のユーザを抱え込まない限り CPU サーバを持つ必要はない。Plan9 端末と認証サーバの組み合わせによって、CPU サーバが行える殆どのサービスが提供できる。
telnet, ftp, ssh, mail, ...
の UNIX で行われている古典的なサービスから、さらに自宅に Plan9 端末を備えていれば、Plan9 独自の
cpu, import, ...
などが使用できる。

CPUサーバ+認証サーバ+Plan9端末

この場合にはPlan9端末は常時稼働させる必要はない。Plan9 端末はディスクを持つ必要もないが、まあ、CPU サーバのバックアップだと思って持っていた方がよいであろう。

CPUサーバのユーザは telnet や ftp で CPUサーバにアクセスする必要はない。自分のPC をPlan9端末にしてCPUサーバにアクセスした方がずっと使い心地が良い。この事はフロッピーディクス1枚で実現できるのである。(もっとも回線の能力が問題になるが...)

Plan9第3版ではさらに便利になった。Plan9端末の代わりに、Linux や Windows から drawterm で CPU サーバにアクセスできるようになったのである。従って
Plan9端末+認証サーバ
の組み合わせよりも有利であると言える。もっとも安全性から言えば、CPUサーバにはサーバキーが存在する分だけPlan9端末を使ったインターネットサービスに劣る。

もしもPlan9端末を常時稼働させる気があるならインターネットへの匿名サービスは全てディクレスのPlan9端末で行うと良い。CPUサーバには非匿名のサービスのみを許すのである。この利点はPlan9端末からはCPUサーバのディスクに対して disk/kfscmd allow を発行できないことにある。

フルシステムとしての Plan9

分散OSとしてのPlan9が想定する基本的なシステム編成は、
1. CPU サーバ
2. ファイルサーバ
3. 認証サーバ etc
4. Plan9 端末
である。
ユーザはPlan9端末(Plan9の動作するワークステーション)を用いて、研究所や大学のどこからでもファイルサーバのファイルをマウントし、CPU サーバの CPU 資源を使用できる。どの端末を用いても全く同じファイルシステムの中で作業が可能である。

UNIX では UNIX ホストを使用する場合には telnet や rlogin を使用する。その場合ホストの CPU資源とファイル資源を使用することになる。端末(UNIXワークステーション)は端末エミュレータを提供するだけであり、その機能は概して貧弱である。結果として操作性は極めて悪い。またユーザが通常使用するワークステーションとホストの環境は大きく異なっている為、同じプログラムが動かない。移植するには多くの手直しが必要になる。ホストの運営に文句があっても管理者は大抵は耳を傾けてくれない。UNIXユーザにとってUNIXホストは可能ならば使いたくはない存在である。結果としてホストは見放され、ワークステーションが特定のユーザによって私物化されていく。そしてそれはそれで良い結果をもたらさないのだ。

Plan9端末はグラフィック端末である。ユーザは端末のCPU資源やファイル資源を使用しても構わないが、高性能なCPUや(後に解説する)WORMベースのファイルサーバを持ったシステムではそれらを使いたがるだろう。どのプログラムも端末で実行してもCPUサーバで実行しても(速度の違いを別にすれば)同じ結果をもたらす。プログラムの手直しは不要である。そもそもPlan9ではCPUサーバのCPU資源を借りるに telnet や rlogin のようなツールを使わない。Plan9 ではその代わり cpu コマンドが存在する。このコマンドは単にプログラムの実行を端末のCPUではなくCPUサーバのCPUに切り替えてくれる。CPUはどちらの場合も同じファイルシステムの下で動作し、ユーザは環境の違いを殆ど意識する必要がない。

CPUサーバを使用するメリットはもう一つ存在する。大抵の場合Plan9端末にはローカルなIPアドレスが割り振られているだろう。そうでなくても DNS には登録されていないだろう。つまりそのままではインターネットへのアクセスに何かと不便なのである。
CPUサーバにはグローバルなIPアドレスが割り振られておりDNSにも登録されていると考えてよい。ちょうどUNIXホストのような存在である。従ってPlan9端末は cpu コマンドを実行する事によって CPUサーバからインターネットにアクセスできることになる。

Plan9端末が立ち上がると自動的にファイルサーバのファイルシステムがマウントされる。従ってPlan9端末に付属するハードディスクには個々のユーザに関する一切の情報が不要である。その点でディスクレスのX端末とよく似ているが、Plan9端末ではディスクはスワッピングの為に使用されている。また cpu コマンドを投入しなければ端末の CPU 資源が使用される。
Plan9端末の立ち上がりは速い。PCベースのPlan9端末はMS-DOSのコマンドで立ち上げる。コマンドを投入してからloginが表示されるまでに数秒、パスワードを入れ実際に端末が立ち上がるまで10数秒程度である。終了にはコマンドは不要である。いきなりリセットしても電源を切っても構わない。
UNIXワークステーションやWIndowなどに比べて端末として非常に扱い易い存在であることが分かるであろう。

ユーザにとってファイルサーバを使用するメリットは、どの端末からも等しく自分のホームディレクトリを使用出来ることにある。Plan9のファイルサーバは素晴らしく安定している。ファイルサーバではユーザが作成したプログラムが実行される事はない。Plan9のファイルサーバの安定性は唯1つの特定のプログラムだけが実行されていることに起因するのだろう。
本格的なPlan9のファイルサーバはWORM(Write Once Read Many)をベースにしている。
追記型の光ディスクはデータが消えないと言う意味で現在最も信頼できるディスクである。但し光ディスクはアクセス速度が遅いのでハードディスクをキャッシュとして使用する。(ハードディスクはキャッシュでしかないのである。) その下で以下のようなバックアップシステムを実現する。

これまでのシステムではファイルを過去の状態に戻すのはもっぱらシステム管理者であった。利用者はシステムライブラリなどの変更が発生した時に、古いライブラリを使いたくても使えない。(リリースしたプログラムのバグが開発者に報告された場合に屡々このようなニーズが発生する。)
これまでのシステムでは利用者が誤って自分の大切なファイルを台無しにした時にシステム管理者に復旧をお願い出来たであろうか? 現実にはシステムのバックアップ作業は管理者による管理者の為の作業でしかないのである。単純にシステムクラッシュに対する保険である。

ところがWORMベースのファイルシステムを採用するPlan9システムでは事情は全く異なっている。毎朝5時になるとファイルサーバは自動的にファイルシステムのバックアップを採る。バックアップ情報は差分だけであり、WORM に書き込まれる。
Plan9のバックアップサービスは全ての利用者が等しくその恩恵に預かれる。使用者はコマンド1つでシステム内のどのファイルをも簡単に過去の状態に戻せるのである。管理者の世話にならず、また誰にも迷惑をかけないで。
利用者が誤って自分のファイルを全て消したとしても、直ちにその日の朝の状態には戻せる。昨日の仕事が基本的に間違っていた場合にも一昨日の状態には戻せる。利用者は作業に入る前にバックアップの為の tar コマンドを必要としないのだ。Plan9ではもはやバックアップは保険ではなく日常的なツールに変貌した。


単体システムとしてのPlan9とは異なり、分散システムとしてのPlan9は極めてセキュリティの高いシステムである。(カーネルにバグがなければ)システムプログラムのバグが及ぼす被害の範囲はそれを実行したユーザに限定され、システムファイルへは影響を及ぼさない。(筆者が心配する問題は唯一つだけであり、それはシステム資源を食い潰す可能性である。) そしてシステムの稼働中は管理者ですらユーザのファイルを勝手に覗き見する事は不可能である。

Plan9のセキュリティ対策の根底には以下のような考え方があるのではないかと思われる。
コンピュータと言うものはアラジンの魔法のランプのようなもので、OSにいかなる対策を施そうとも魔人(システム)は所詮はアラジン(電源を入れた人間)の言う事を聞くのだ。従って管理者は端末を信用してはならない。管理者が信用出来るのは彼だけが触れる事の出来るコンピュータ、即ち、サーバだけである。OS設計はこの事を考えた厳格さを持たなければならない。
逆に言えばアラジンに逆らおうとするのはOS設計としては無駄な努力と言うものだ。単体システムは悪意のユーザを想定する必要は無いのであり、(UNIXの様に)ガチガチに保護を固めても使いにくくなるばかりで、適度な割り切りが必要である。