  Virtual FTP-server with wu-ftpd
  Winfried Trumper, <winni@pilot.org>
  v1.2, January 27 1997
  吉峯 幸郎, <yoshimin@ms.civilnet.com.tw>
  v1.2j, May 26 1997

  仮想匿名 ftp サイトを設定する方法

  JF より：この文書は、1997年1月時点での原文の翻訳です。現在と事情が異な
  る場合があるので、ご注意ください。

  1.  はじめに

  Linux は複数の“ホスト”を１台のマシン上で稼動できます。多くのユーザー
  が既に１つ以上の WWW サービスを Linux ボックス上で動かしています。例え
  ば：

       www.sharpers.com                (192.168.55.37)
       www.usurers.com                 (192.168.55.38)
       www.swindlers.com               (192.168.55.39)

  これらはあたかも３つの異なるホストのように見えますが、実はたった１台の
  Linux PC によりサービス提供されています。

  この技術は“マルチホーミング (multihoming)”と呼ばれる機能と Linux の
  持つ、複数の IP アドレスを１つのインターフェース（ イーサネットカード
  またはモデム）に割当てられる機能によるものです。このおかげで、ネット上
  で複数のアドレスやホスト名に対応する Linux システムを構築する場合で
  も、複数のイーサネットカードは必要ありません。 Linux は追加 IP アドレ
  スを“仮想インターフェース”と呼ばれる形で制御します。“仮想インター
  フェース”は物理的には同じハードウェアに対応していながら、論理的にはソ
  フトウェア（とカーネル）によって IP アドレスとして区別されます。

  仮想インターフェースはメインインターフェースと同様の名前が付けられ、単
  にサフィックスとして割当てられた番号でそれぞれを区別します。“IP エイ
  リアス”はこの仮想インターフェースに対する用語です。上記の仮想ホストは
  "ifconfig" コマンドで見ると以下のようになります（編集してあります）：

       interface IP-address     broadcast-address       netmask
       ------------------------------------------------------------
       eth0      192.168.55.37    192.168.55.63     255.255.255.224

       eth0:0    192.168.55.38    192.168.55.63     255.255.255.224
       eth0:1    192.168.55.39    192.168.55.63     255.255.255.224
       eth0:2    192.168.55.40    192.168.55.63     255.255.255.224
       eth0:3    192.168.55.41    192.168.55.63     255.255.255.224
            ^-- IP エイリアス番号

  IP エイリアスの機能を使うには Linux カーネル に“モジュール”が必要で
  す。このモジュールはカーネルのコンパイル時、またはランタイムに以下のコ
  マンド（root として実行）によって使えるようになります：

  insmod ipalias

  最近の配布パッケージではこのモジュールは提供されているはずなので、ここ
  ではどのようにモジュールを作成するかといったことについては触れません
  （ヒント：分からなければ Linux Kernel-HOWTO (日本語訳) を参照）。

  前述のホストの IP エイリアスは、起動時に、簡単なシェルスクリプトで作成
  されます。

       #!/bin/sh

       NETMASK="255.255.255.224"      # あなたのネットマスクに変更
       BROADCAST="192.168.55.63"      # あなたのブロードキャストアドレスに変更
       MAIN_IF="eth0"                 # メインインターフェース

       IPALIASES="192.168.55.38   192.168.55.39   192.168.55.40 \
                  192.168.55.41   192.168.55.42   192.168.55.43 \
                  192.168.55.44   192.168.55.45   192.168.55.46"

       # 以下は変更しないで下さい。
       i=0
       for ALIAS in $IPALIASES
       do
           /sbin/ifconfig  ${NETTYPE}:${i}  ${ALIAS} \
                           broadcast ${BROADCAST}  netmask ${NETMASK}
           /sbin/route add -host ${ALIAS} dev ${NETTYPE}:${i}
           i=$[$i+1]
       done

  IP エイリアスに関し、まだ疑問がある場合は Linux "IP Alias mini-HOWTO
  (日本語訳)" と Linux カーネルソースの "Documentation/aliases.txt" を参
  照して下さい。（通常は "/usr/src/linux" にあります。）

  2.  仮想サービスとサーバー

  ホスト名が仮想インターフェースに対応する場合は、一般的にそのホストを“
  仮想ホスト”と呼びます。仮想ホスト（または仮想インターフェース）でサー
  ビスを動かしているデーモンを“仮想サーバー”と呼びます。

  2.1.  仮想 WWW サーバー

  既に３つの仮想 WWW サーバーの例を前記で紹介しました：

       www.sharpers.com, www.usurers.com, www.swindlers.com

  著者の知る限り、すべてのメジャーな http デーモン（例：うまく設計されて
  いる "Roxen Challenger" や広く使われている "Apache"）の仮想ホストの設
  定方法は非常に容易でドキュメント類も既に整備されています。簡単に言え
  ば、 単に www ポート（ポート番号 80）を WWW サーバーを動かしたい IP ア
  ドレス/ホスト名に割当てた仮想ネットワーク・インターフェースにバインド
  するだけです。なにもトリックはありません。

  これに関する詳細は Linux "Virtual Web mini-HOWTO" を参照して下さい。

  2.2.  仮想メールアドレス

  最も単純なケースとして以下のような仮想ホストと所属しているドメイン宛て
  のすべてのメールを受けとる場合：

       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

  2.3.  仮想 ftp サーバー

  仮想 ftp サーバーというコンセプトは、著者の知る限り、どの ftp デーモン
  でもサポートされていません。

  広く使われている "wu-ftpd" では Brian Grossman <brian@SoftHome.Net> が
  作成した anonymous FTP サービス を仮想インターフェースごとに区別するた
  めのパッチがあります。入手方法とパッチ方法は３章で紹介します。

  これ以外に同様のパッチは見当たりません。

  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 を既に自分でコンパイルしてい
  るかバイナリを入手していることを確認したうえで、取り敢えず他の疑問点は
  すべてこのドキュメントの最後までおいておきましょう。

  まず現実的な例を示したうえで、著者があるお客様のためにどのようにしたか
  紹介します（ただマシン名を架空のものにしただけです）。

  o  (a) 異なる anonymous ftp サーバーを構成するため "/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

  o  (b) anonymous ftp サービスに必要なファイルを既に設定してある
     anonymous-ftp ディレクトリ "/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

  o  (c) "/etc/passwd" ファイルを編集して anonymous ftp アカウントのホー
     ムディレクトリを "/home/ano-ftp" に変更します。

       ftp:*:11:11:Anonymous FTP:/home/ano-ftp:/bin/sh
                                 ^^^^^^^^^^^^^
                                 ホームディレクトリ

  以上の3ステップが基本設定で、これで3つの仮想ホストはそれぞれ分けられた
  ftp エリア を使用できます。著者の場合、本当の作業はここからで、それぞ
  れの incoming ディレクトリ毎にディスク割当量を設定（各グループにディス
  クスペースの使用量を制限）しなければならなかったのでちょっと複雑になり
  ます。

  o  (d) wu-ftpd の設定ファイル "/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 サーバーにアップロードされるファイルはそれぞれ異なるユーザ
  ーに属するようになり、ディスク割当量の設定が行えるようになります。

  o  (e)ディスク割当量の設定

     まずは "/usr/doc/quotas.txt" と Linux "Quota mini-HOWTO (日本語訳)"
     を参照しましょう。

     o  * "/etc/fstab" の "/home/an-ftp" パーティションのマウントオプ
        ションに"usrquota=/etc/quota/ano-ftp.users" を追加します。

     o  * "touch" コマンドで "/etc/quota/ano-ftp.users" を作成します。

     o  * "quotaon" を実行して割当てを有効にします。

     o  * 割当てを "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 kb)。

  3.  入手方法とパッチ方法

  wu-ftpd のマルチホーム・パッチ(20kb)は以下よりダウンロードできます：

  o  <ftp://ftp.softhome.net/pub/users/brian/multihomed-wu-
     ftpd-2.4-23.patch>

  入手の際は copyright をよく読んで下さい。

  "wu-ftpd" のソースはネット上のいたるところにあります。 archie を使って
  一番近いサーバーを探して入手して下さい。ソースを解凍した際に作成された
  ディレクトリに移動して以下を実行します：

       patch < ../multihomed-wu-ftpd-2.4-23.patch

  これでソースにパッチが当てられます。wu-ftpd の FAQ は、以下で入手でき
  ます。

  o  <http://www.hvu.nl/~koos/wu-ftpd-faq.html>

  以上です。

  4.  日本語訳について

  [協力：Linux JFプロジェクト]
  [翻訳：吉峯 幸郎, yoshimin@ms.civilnet.com.tw](1997/05/26)

  (sgml conversion: y.senda, ysenda@pop01.odn.ne.jp, 2001/09,
  なお、変換時に 1996/10/22版から1997/01/27版に更新しました。実質 5, 6
  行の更新です。)

