サービス空間
2002/02/01
説明
httpd のサービス空間とは httpd がサービスを行っている時の名前空間です。UNIX のユーザはこの概念には馴染みがないと思えます。なにしろ UNIX では(それだけではなく Plan9 以外の全ての OS では) httpd のサービス空間は httpd が動いているコンピュータの名前空間そのものです。だからそのような名前は必要としないのです。
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で行なわれます。