ホスト名が仮想インターフェースに対応する場合は、一般的にそのホストを “仮想ホスト”と呼びます。 仮想ホスト(または仮想インターフェース)でサービスを動かしている デーモンを“仮想サーバー”と呼びます。
既に3つの仮想 WWW サーバーの例を前記で紹介しました:
www.sharpers.com, www.usurers.com, www.swindlers.com
著者の知る限り、すべてのメジャーな http デーモン(例:うまく設計され ている "Roxen Challenger" や広く使われている "Apache")の仮想ホストの 設定方法は非常に容易でドキュメント類も既に整備されています。 簡単に言えば、 単に www ポート(ポート番号 80)を WWW サーバーを動かし たい IP アドレス/ホスト名に割当てた仮想ネットワーク・インターフェースに バインドするだけです。なにもトリックはありません。
これに関する詳細は Linux "Virtual Web mini-HOWTO" を参照して下さい。
最も単純なケースとして以下のような仮想ホストと所属しているドメイン宛て のすべてのメールを受けとる場合:
www.sharpers.com, www.usurers.com, www.swindlers.com,
sharpers.com, usurers.com, swindlers.com
"smail" や "sendmail"(Linux マシンでメール処理を行っているデーモン)の 設定は比較的簡単なもので、追加ホスト名/ドメインを以下のファイルに書く だけです:
"/etc/smail/config" ('hostnames=' と 'domains=' エントリ)
あるいは
"/etc/mail/sendmail.cw" (別々の行にそれぞれのホスト名)
smail に「本当の」仮想ドメインを実装する場合は、下記にある smail-FAQ を ご覧ください。
http://www.sbay.org/smail-faq.html
仮想 ftp サーバーというコンセプトは、著者の知る限り、どの ftp デーモン でもサポートされていません。
広く使われている "wu-ftpd" では Brian Grossman <brian@SoftHome.Net> が作成した anonymous FTP サービス を仮想インターフェースごとに区別する ためのパッチがあります。入手方法とパッチ方法は3章で紹介します。
これ以外に同様のパッチは見当たりません。
Brian のマルチホーム・パッチの基本的な考え方は wu-ftpd の "
chroot()
"
を単に
HOME_DIRECTORY_OF_ftp-ACCOUNT/HOSTNAME_THE_USER_TALKS_TO/
としないで、
HOME_DIRECTORY_OF_ftp-ACCOUNT/
とするものです。
以下の例では anonymous ftp 経由で "ftp.swindlers.com" に接続している ユーザーは "/home/ano-ftp/" でなく "/home/ano-ftp/ftp.swindlers.com/" に接続されます。 基本的な設定は単純で、通常の一つだけの anoymous ftp-account の設定と 大きく違わないことが分かるでしょう。
この簡単で効率的な設定方法を考えた Brian に賞賛を!
このパッチを当てたスペシャル版の wu-ftpd を既に自分でコンパイルしている かバイナリを入手していることを確認したうえで、取り敢えず他の疑問点は すべてこのドキュメントの最後までおいておきましょう。
まず現実的な例を示したうえで、著者があるお客様のためにどのようにしたか 紹介します(ただマシン名を架空のものにしただけです)。
/home/ano-ftp
"
ディレクトリを作成します。
mkdir /home/ano-ftp && cd /home/ano-ftp
mkdir ftp.sharpers.com ftp.usurers.com ftp.swindlers.com
作成したディレクトリ構成は以下のとおりです:
/home/ano-ftp/
|-- ftp.sharpers.com
|-- ftp.swindlers.com
`-- ftp.usurers.com
/home/ftp
" から、新たに
作成したディレクトリにコピーします。
cd /home/ano-ftp/ftp.sharpers.com
cp -a /home/ftp/* .
cd ../ftp.swindlers.com
cp -a /home/ftp/* .
cd ../ftp.usurers.com
cp -a /home/ftp/* .
"pub/
" にある不要なファイルを後で削除するのを忘れないように
しましょう(あるいははじめからコピーしない)。
参考として Debian 配布パッケージでの "/home/ftp" を紹介します:
/home/ftp Permissions Owner Group Size
|-- bin d--x--x--x 2 root root
| |-- gzip ---x--x--x 1 root root 45121
| |-- ls ---x--x--x 1 root root 22945
| `-- tar ---------- 1 root root 77769
|
|-- etc d--x--x--x 2 root root
| |-- group -r--r--r-- 1 root root 18
| |-- passwd -r--r--r-- 1 root root 44
| `-- pathmsg -r--r--r-- 1 root root 172
|
|-- lib d--x--x--x 2 root root
| |-- ld-linux.so.1 -r-xr-xr-x 1 root root 21375
| |-- libc.so.5.2.18 -rwxr-xr-x 1 root root 536252
| `-- libc.so.5 -> libc.so.5.2.18
|
|-- pub dr-xr-xr-x 3 root root
| `-- whatever
|
`-- welcome.msg -rw-r--r-- 1 root root 323
/etc/passwd
" ファイルを編集して anonymous ftp アカウント
のホーム
ディレクトリを "/home/ano-ftp
" に変更します。
ftp:*:11:11:Anonymous FTP:/home/ano-ftp:/bin/sh
^^^^^^^^^^^^^
ホームディレクトリ
以上の3ステップが基本設定で、これで3つの仮想ホストはそれぞれ分けら
れた ftp エリア を使用できます。
著者の場合、本当の作業はここからで、それぞれの incoming ディレクトリ
毎にディスク割当量を設定(各グループにディスクスペースの使用量を
制限)しなければならなかったのでちょっと複雑になります。
/etc/ftpd/ftpaccess
" で upload
エリア を使えるようにします。
upload /home/ano-ftp/www.sharpers.de * no
upload /home/ano-ftp/www.sharpers.de /incoming yes sharpers ftp 0660 nodirs
upload /home/ano-ftp/www.swindlers.de * no
upload /home/ano-ftp/www.swindlers.de /incoming yes swindler ftp 0660 nodirs
upload /home/ano-ftp/www.usurers.de * no
upload /home/ano-ftp/www.usurers.de /incoming yes usurers ftp 0660 nodirs
# | | | | |
# アップロードの許可 --+ | | | |
# アップロードファイルのオーナーを設定 ---------+ | | |
# アップロードファイルのグループを設定 ----------------+ | |
# アップロードファイルのアクセス許可権の設定 --------------------+ |
# ディレクトリの作成不許可 ---------------------------+
これで ftp サーバーにアップロードされるファイルはそれぞれ異なる
ユーザーに属するようになり、ディスク割当量の設定が行えるように
なります。
まずは "/usr/doc/quotas.txt
" と Linux "Quota mini-HOWTO
(
日本語訳)" を参照しま
しょう。
/etc/fstab
" の "/home/an-ftp
" パーティションの
マウントオプション
に"usrquota=/etc/quota/ano-ftp.users
" を追加します。touch
" コマンドで "/etc/quota/ano-ftp.users
"
を作成します。quotaon
" を実行して割当てを有効にします。edquota swindlers
" 等で設定します。
user swindlers
の割当て:
/dev/sdb8: blocks in use: 0, limits (soft = 0, hard = 10000)
inodes in use: 1, limits (soft = 0, hard = 1000)
対応するディスクスペースはファイルシステム作成時のブロックサイズ により異なります(標準は 1ブロック = 1 kb)。