Kenji Arisawa E-mail: arisawa@aichi-u.ac.jp Aichi University Kurozasa 370, Miyoshi-cho Aichi, Japan
通常の Web サーバではサーバルートはアクセス制限に対して何の意味も持っていません。この事は CGI を使用した場合に直ちに問題になります。即ち Web のサーバは一見するとクライアントからのアクセス可能なファイルを制限しているように見えても、CGI プログラムからはシステムの全てのファイルが見えてしまいます。この事は重大なセキュリティ上の問題をもたらしかねません。そのためにエンドユーザによる CGI の使用は禁止されるかあるいは厳重な統制下に置かれるのが普通です。
サーバルートの概念に本質的な意味を最初に与えたのは Plan9 第2版の標準 httpd です。 このサーバでは、Plan9 がプロセス毎に名前空間を編成できる事を利用して httpd がサービスする名前空間を、サーバルートの下に綴じ込めることができました。従ってこのサーバの下では CGI プログラムから見える名前空間は、指定されたサーバルートが名前空間のルート "/" となります。つまり CGI プログラムは本質的に指定された名前空間の中に綴じ込められるのです。
しかしながら Plan9 第2版の標準 httpd は CGI 環境が不自由でした。CGI プログラムの配置が固定されていたのと、POST メソッドがサポートされていなかったためです。この問題は Charles Forsyth によって解決されました。(筆者はそのためにずっと彼の httpd を使用してきました。)
Pegasus はこれまでの Plan9 上のサーバのこの素晴らしいアイデアを引き継ぐ事にしました。
http://some.dom.com/pathname # サーバの正式なページ http://some.dom.com/~alice/pathname # ユーザのページ http://other.dome.com/pathname # 仮想ホスト(IP が異なる) http://vertual.dom.com/pathname # 仮想ホスト(IP が同じ)いろいろな方法でクライアントからアクセスされます。
現状の Web サーバの大きな問題点は、名前空間がこれらの間で共有される事にあります。(コンピュータの仕組みに例えると、全てのプロセスがアドレス空間を共有している初期のパソコンとよく似ている。論理アドレスに相当する機能を提供していない。)
この事は CGI プログラムが他人のファイルにアクセス可能である事を意味します。この事はユーザ間の相互干渉の可能性をもたらします。
Pegasus はこの問題を次のように解決しました。
Pegasus ではどのホームページも単一のドキュメントルート(/doc) を持ちます。Web のブラウザからそのように見えているだけではなくて、サービスを実行しているサーバの名前空間のレベルで実際に単一です。
この事はどの CGI プログラムも他人のファイルを見る事ができない(従ってアクセスできない事)を意味します。これは現在の所 Pegasus だけが持つ特徴です。
Pegasus ではドキュメントルートはサービス空間の中では "/doc" に固定されています。既に述べた様にサーバルートはサービス空間の中では "/" に固定されていますが、実際の名前空間の下ではユーザごとに異なるサーバルートが存在するのです。
例えば(特に指定しなければ)
/usr/alice/webはユーザ alice のサーバルートです。alice は
/usr/alice/web/docの下にドキュメントを作成します。
Pegasus は以下の条件を満たすファイルを CGI として使用します。