Plan9 ではサービス空間を編成できます。さらに Pegasus では、実ホストごと、仮想ホストごと、ユーザごとに独立したサービス空間を与えられます。
編成は基本的に
/lib/namespace.httpdによって行われます。
編成の結果生まれる httpd の標準的な名前空間は
/bin # CGI で使用 /dev # CGI で必要になるかも /doc # ドキュメントルート /env # CGI で使用する /etc # アクセス制限で使用する /lib # CGI で必要になるかも /mnt # ユーザと仮想ホストのサポートに必要 /proc # プロセス制御に必要 /rc # CGI で必要 /sys # CGI で必要かも /tmp # CGI で必要です。これらの全てが必要な訳ではありません。例えば CGI を使用しないシステムで、ユーザも仮想ホストも存在しないなら
/doc /mntだけが必要です。
名前空間はシステム管理者が /lib/namespace.httpd
で準備しますが、実ホスト、仮想ホスト、ユーザも編成に参加できます。(この場合には無制限と言うわけにはいきません。) それによって /bin
や /sys
などに自分のコマンドやファイルを追加できます。
/doc
と /etc
は特殊です。これらの中身はアクセスの対象となった実ホスト、仮想ホスト、ユーザのものと置き換わります。/doc
はドキュメントルート、/etc
には passwd
, allow
, rewrite
, namespace_80
などのドキュメントに対する制御ファイルが置かれるので、ドキュメントの管理者自身がアクセス権を持つ必要があるからです。
実ホスト、仮想ホスト、ユーザは各々サービス空間を与えられます。例えばユーザ alice
は
/usr/alice/webを web のサービスを行うために与えられます。この場合
/usr/alice/web/docが
alice
のホームページになります。(alice
がホームページを持つためにシステムファイルの変更は必要ありません。) この doc
はサービス空間の中では/docとして見えます。
alice
が/usr/alice/web/etcを持てば、この
etc
はサービス空間の中では/etcとして見えます。サービス空間の中の
/etc
の passwd
や allow
や rewrite
は実際には alice
のファイルなので、alice
は自分のデータに対する制御ができることになります。/usr/alice/etc/namespace_80はサービス空間の中では
/etc/namespace_80として見えますが、このファイルはシステム管理者が
/lib/namespace.httpd
で準備した名前空間をさらに再編したい場合に使用されます。以上ではユーザ alice
を例にとりましたが、実ホスト、仮想ホストに対しても同様です。/sys/lib/httpd.rewriteで行なわれます。