Plan9でバーチャルサーバ

このページでは、Plan9のサーバを使って、バーチャルサーバを設定します。ここに来るまでの設定はここを見て下さい

バーチャルサーバの機能としては、自ドメインでのWebサーバ、メールの転送があれば一応の用を果たすでしょう。また、注意点として、他の同居サーバが見えない必要があります。この他のサーバが見えないというのは、UNIX系のOSでは難しいところです。

このページでは、moroo.orgというドメインをバーチャルホスティングすることを例に設定していきます。管理者のIDはmorooとします。

管理者の設定

以下の設定はcpu/authサーバのコンソールから行います。というより、コンソールからしか行えません

下記の様にして管理者の ユーザの設定を行います

disk/kfscmd allow
disk/kfscmd 'newuser moroo'
auth/changeuser moroo
Password: password
Confirm password: password
assign Inferno/POP secret? (y/n) y
make it the same as the plan 9 password? (y/n) y
Expiration date (YYYYMMDD or never)[return = never]: 
Post id: 
User's full name:Moroo Jun
Department #: 
User's email address: jun@moroo.com
Sponsor's email address: 

user moroo installed for Plan 9

次に、このユーザでログインし、設定をします

/sys/lib/newuser
mail -c

mailの設定

メールの受信の設定を行います。

/mail/lib/smtpd.confのourdomainsに自分のドメイン、ここではmoroo.orgを追加します

別名の設定をします。/mail/lib/rewriteに下記の設定を入れます

rewrite:moroo\.org!(.*) translate       "/bin/upas/aliasmail -n /usr/moroo/.aliases \1"

ドメインの管理者レベルで別名が設定できる様にします。まず、.aliasesの内容ですが下記の様にします。

/usr/moroo/.aliases.local

別名の設定そのものは.aliases.localに書きます

jun     moroo@nifty.com

この設定で、jun@moroo.orgに来たメールはmoroo@nifty.comに転送されます。

Webの設定

/sys/lib/httpd.rewriteに下記の記述を追加します。

http://www.moroo.org   /usr/moroo/doc

URLの最後に/をつけると動作しません。

ドキュメントを入れるディレクトリ/usr/moroo/doc/を作成し、index.htmlを置きます。

/sys/lib/httpd.rewrite に下記の設定を追加します。

http://www.moroo.org    /virtual/moroo

ディレクトリ/usr/web/virtualを作成します。さらに、/usr/web/virtual/morooを作成します。httpdは起動されたときに/usr/webを/に閉じ込めます。

名前空間の制限

このままでも誠実なユーザしか使わないのならいいのですが、悪意のあるユーザがいる可能性がありますので、他のユーザ、システムファイルが見えないように名前空間を閉じ込めます。

ユーザがログインする場合、各ユーザのlib/profileが実行されます。そこで、lib/profileをいじって名前空間を閉じ込めてしまいます。

ユーザに見せるのは、/bin と 自分のディレクトリだけにします。

lib/profileを下記のものと置き換えます。

bind -a $home/bin/rc /bin
bind -a $home/bin/$cputype /bin
bind -c $home/tmp /tmp
bind $home/lib/lib $home/lib
bind /bin /usr/virtual/bin
bind /env /usr/virtual/env
bind /tmp /usr/virtual/tmp
bind $home /usr/virtual/usr
bind /usr/virtual /
prompt=('% ' '       ')

ftpしたときに制限されないのでlib/namespace.ftpも操作します

lib/namespace.ftpを置き換えます

# root
mount -aC #s/boot /root $rootspec
bind -a $rootdir /

bind -c #e /env
bind $home/lib/lib $home/lib
bind -c $home /
cd /

問題点

現状ではPlan9はDNSのセカンダリサーバになれません。また、ゾーン転送に対応してません。このため、DNSは単独で動かすか、UNIXなどのサーバに頼る必要があります。