Virtual FTP-server with wu-ftpd Winfried Trumper, v1.2, January 27 1997 吉峯 幸郎, v1.2j, May 26 1997 仮想匿名 ftp サイトを設定する方法 JF より:この文書は、1997年1月時点での原文の翻訳です。現在と事情が異な る場合があるので、ご注意ください。 1. はじめに Linux は複数の“ホスト”を1台のマシン上で稼動できます。多くのユーザー が既に1つ以上の WWW サービスを Linux ボックス上で動かしています。例え ば: www.sharpers.com (192.168.55.37) www.usurers.com (192.168.55.38) www.swindlers.com (192.168.55.39) これらはあたかも3つの異なるホストのように見えますが、実はたった1台の Linux PC によりサービス提供されています。 この技術は“マルチホーミング (multihoming)”と呼ばれる機能と Linux の 持つ、複数の IP アドレスを1つのインターフェース( イーサネットカード またはモデム)に割当てられる機能によるものです。このおかげで、ネット上 で複数のアドレスやホスト名に対応する 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 サーバー 既に3つの仮想 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 が 作成した 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 を既に自分でコンパイルしてい るかバイナリを入手していることを確認したうえで、取り敢えず他の疑問点は すべてこのドキュメントの最後までおいておきましょう。 まず現実的な例を示したうえで、著者があるお客様のためにどのようにしたか 紹介します(ただマシン名を架空のものにしただけです)。 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ブロック = 1 kb)。 3. 入手方法とパッチ方法 wu-ftpd のマルチホーム・パッチ(20kb)は以下よりダウンロードできます: o 入手の際は copyright をよく読んで下さい。 "wu-ftpd" のソースはネット上のいたるところにあります。 archie を使って 一番近いサーバーを探して入手して下さい。ソースを解凍した際に作成された ディレクトリに移動して以下を実行します: patch < ../multihomed-wu-ftpd-2.4-23.patch これでソースにパッチが当てられます。wu-ftpd の FAQ は、以下で入手でき ます。 o 以上です。 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 行の更新です。)