[目次] [前のページ/次のページ]
green FTP サーバの構築

1.Introduction

FTP とは File Transfer Protcol(ファイル転送プロトコル)の略である。
つまり、ネットワークを経由してファイルをやり取りするための仕組み。 これはサーバからファイルをダウンロード・アップロードするときによく用いられる。
ここでは wu-ftpd-2.6.0 を用いて FTP サーバーを構築する方法を解説する。

なお、OS(オペレーティングシステム)のインストールについては再構築資料 "基本システムのインストール" を参照し、終えておくこと。


2.wu-ftpd のインストールと設定

(2.1) wu-ftpd のインストール

(2.1.1) wu-ftpd の取得

wu-ftpd には debian パッケージも存在するが、 専攻サーバでは最新版を利用するために、 以下の手順でソースファイルを取得しコンパイルする。

必要なファイルは以下の2つ。
これらを提供している ftp サイトより各々 /home/green/ にダウンロードする。

○ wu-ftpd-2.6.0.tar.gz
-> ftp://ftp.wu-ftpd.org/pub/wu-ftpd/
○ ftp.bin.linux.i386.tar.gz
-> ftp://ftp.wu-ftpd.org/pub/wu-ftpd/binaries/intel/linux/

次に、取得したこれらのファイルをソースファイルとして保管する ディレクトリを用意する。green では /home/green/src 。

$ mkdir /home/green/src

ここに、先ほどのファイルをコピーしておく。

$ cp wu-ftpd-2.6.0.tar.gz /home/green/src/.

(2.1.2) wu-ftpd の展開

ファイル wu-ftpd-2.6.0.tar.gz は 複数のファイルがまとめて圧縮された状態にある。 このままではコンパイルすることはできないので、元に戻す必要がある。 (これを展開もしくは解凍と呼ぶ)
そこで、ファイル wu-ftpd-2.6.0.tar.gz を ディレクトリ /home/green/ に展開する。

$ cd /home/green/
$ tar xvpzf wu-ftpd-2.6.0.tar.gz

展開した結果として作られたディレクトリ wu-ftpd-2.6.0 に移動する。

$ cd wu-ftpd-2.6.0/

(2.1.3) wu-ftpd のコンパイルとインストールの手順

wu-ftpd のコンパイルとインストールの手順は、 "通例よく見かけるコンパイルとインストールの手順"と少々異なる。 ここで言う"通例よく見かけるコンパイルとインストールの手順"とは、以下の手順である。

$ ./configure
$ make
# make install

※因みに wu-ftpd 製作グループによると、 wu-ftpd も将来的には上記の手順に移行する予定であるそうだ。

■ 下準備

wu-ftpd では次のように行う。

まず、個々のコンピュータ環境に応じたコンパイル&インストールを行うよう、 次のコマンドを実行する。

$ ./bulid lnx

ここで lnx は、Linux 系OSを用いていることを指定している。

■ 設定ファイル配置先の変更

次に、wu-ftpd の動作設定ファイルを置くべきディレクトリを変更するため、 コンパイル前にソースファイルの一部を編集する。 何も編集せず、変更を加えない場合、 wu-ftpd の動作設定ファイルは /etc/ に置かなければならない。*1

*1
これは、/etc/ に設定ファイルが置かれるという前提で、 wu-ftpd が作られているため。 なお、編集しなくとも、オプションスイッチを利用することで /etc/ 以外のディレクトリに変更することはできる。 しかし、この手法では変更先に 任意のディレクトリを指定することはできないため 直接ソースファイルを編集する方法を選ぶ。

ディレクトリ /etc/ には他ソフトウェアの設定ファイルが 入っており、そこに wu-ftpd の動作設定ファイルも そのまま一緒に混ぜてしまうと、 wu-ftpd 関連のファイルとその他のファイルの区別が 直感的に出来ず、賢明ではないと言える。

具体的には、green では /etc/wu-ftpd-2.6.0/ に置く。
ディレクトリ /etc/ に ディレクトリ wu-ftpd-2.6.0 が存在しない場合は、 ここで作成しておこう。

# mkdir /etc/wu-ftpd-2.6.0

編集するソースファイルは pathnames.h.noac 。
上の通り作業していれば、/home/green/wu-ftpd-2.6.0/src/ にある。

vi や emacs でこのファイルを開き書き換える。
ここでは、書き換える必要のある部分だけ抜き出した。
すなわち、<73>行、<74>行、<75>行、<195>行目を、

#define _PATH_FTPACCESS  "/etc/wu-ftpd-2.6.0/ftpaccess"
#define _PATH_CVT        "/etc/wu-ftpd-2.6.0/ftpconversions"
#define _PATH_PRIVATE    "/etc/wu-ftpd-2.6.0/ftpgroups"
#define _PATH_FTPHOSTS   "/etc/wu-ftpd-2.6.0/ftphosts"

と変更する。

■ FTP サービスの一時停止

インストールを行う前に、外部から ftp サービスを利用できないよう、 安全のため一時的に停止させる。

まず /etc/inetd.conf を編集する。<29>行目の ftp の項目を、

#ftp	stream	tcp	nowait	root	/usr/sbin/tcpd	/usr/sbin/in.ftpd

の様に、行頭に # をつけコメントアウトする。

次に、行った変更を有効にするため inetd を再起動する。

# ps aux

として inetd のプロセス番号を確認し、

# kill -HUP [inetd のプロセス番号]

として inetd を再起動する。

詳しくは http://www.ep.sci.hokudai.ac.jp/~epcore/dvlop/TEBIKI.ep_security.html を参照のこと。

■ インストール

$cd /home/green/wu-ftpd-2.6.0
# ./build install

とすればインストールは完了である。

(2.2) wu-ftpd の設定など

(2.2.1) 概要

インストール時に FTP サーバとして機能するための基本的な設定は行われる。 しかし詳細な設定は設定ファイルを作成するか編集して行う必要がある。

wu-ftpd の設定ファイルは /etc/wu-ftpd-2.6.0/ に置かれる次の3つ。

ftpaccess
wu-ftpdの全体的な動作設定を行う。編集の必要あり。
ftpconversions
ファイルを圧縮して転送する際の圧縮モードの設定など。 ここでは特に編集する必要はない。
ftpusers
FTPアクセスを禁止するユーザアカウントを記述する。 特に編集する必要はない。

他に shutdoun.msg のファイルが /etc/wu-ftpd-2.6.0 に置かれる。 これは shutdoun 時の表示メッセージであるので特に編集する必要が無い。

pathmag、msg.toomany、welcome.msg の 3 ファイルを /etc/wu-ftpd-2.6.0/ に作成するとよい。 これらはログイン時などの表示メッセージのファイルであるので 無くても良い。ファイルの中身は、
green の /etc/wu-ftpd-2.6.0/shutdoun.msg
green の /etc/wu-ftpd-2.6.0/path.mag
green の /etc/wu-ftpd-2.6.0/msg.toomany
green の /etc/wu-ftpd-2.6.0/welcome.msg
である。

(2.2.2) ftpaccess の編集

wu-ftpdの全体的な動作設定を行う。 「クラス定義」、「同時アクセス数」、 そして green では anonymous FTP サービスの設定が主な設定項目。

green の /etc/wu-ftpd-2.6.0

class
ユーザーのグループ化を行う。
構文:
class [クラス名] [タイプ名] [アドレス]

クラス名:
任意の名前
タイプ名:
クラスに含めるユーザーのグループ。 real、guest、anonymous を任意に指定する。
アドレス:
相手の IP・ドメインを指定する。

※green の場合
class all real,guest,anonymous *
したがって、クラス名"all"に"real,guest,anonymous"を含め、 "*"すなわちあらゆる場所からのアクセスを許可する。

limit
各種制限事項(同時アクセス数ならびに接続可能時間)を設定。
構文:
limit [クラス名] [同時アクセス数] [アクセス可能時間]  [アクセス不可時に表示するメッセージファイル]

クラス名:
制限を上記の class で定義したクラスが指定できる。

※green の場合
limit all 10 Any /etc/wu-ftpd-2.6.0/msg.toomany
したがってクラス"all"に対し同時に10人までのアクセスを許可する。 アクセス可能時間は制限しない。 アクセス不可時には /etc/wu-ftpd-2.6.0/msg.toomany の内容を表示する。

その他設定項目については man ftpaccess および各参考文献を参照のこと。

anonymous FTP について
anonymous FTP サービスとは不特定多数のユーザーを対象に ファイルの配信・受信を行うサービスである。 一般的にネットワーク上でファイルのライブラリを 提供する FTP サーバの構築に用いられる。 アクセスの際、ユーザ名として"anonymous"又は"ftp"を、 パスワードには各人のメールアドレスを用いてログオンを行う。

※green の場合
anonymous FTP に関して注意すべき設定は次の2ヶ所

1) anonymous FTP ユーザのメールアドレスのチェック

# passwd-check <none|trivial|rfc822> [<enforce|warn>]
passwd-check rfc822 enforce

この行では anonymous FTP ユーザがログイン時に入力する メールアドレスが rfc822 フォーマットに 適合する (有効なメールアドレスと考えられる)かどうかをチェックしている。

2) anonymous FTP ユーザによるファイルアップロードの可否

# FTP-home-dir archiv-dir allow? owner group mode dirs?
# (as in /etc/passwd)
upload /home/ftp * no
upload /home/ftp /pub/incoming no ftp daemon 0666 nodirs

デフォルトの設定では anonymous FTP ユーザにも /home/ftp/pub/incoming ディレクトリには ファイルのアップロードができるようになっている。 これはセキュリティ上好ましくないので、"allow?" の列を "no" に変更してファイルのアップロードができないように設定している。

(2.2.3) ディレクトリの作成と設定

/etc/ の passwd に ftp がないので、ftp を加える。

$ sudo -s

でルートになり、

# vipw

以下のように書き加える。

ftp:x:77:80:Anonymous FTP user:/home/ftp:/bin/false

次に、

# vi group

として ftp:x:80: を加える。
次に、/home/ftp を作り、/home/ftp 以下に etc、pub を作る。 また、それらのパーミッションも以下のように変更する。

# mkdir /home/ftp
# chmod 555 /home/ftp
# mkdir etc
# chmod 111 etc
# mkdir pub
# chmod 555 pub

cksum、compress、gzip、ls、md5sum、tar ファイルの作成。

ftp.bin.linux.i386.tar.gz を展開することにより これらのファイルを /home/ftp/bin 以下に作成する。 /home/green 以下に ftp.bin.linux.i386.tar.gz を持っていく。 green にスイッチユーザーして、/home/green で ftp.bin.linux.i386.tar.gz を展開する。

# su green
$ tar xvpzf ftp.bin.linux.i386.tar.gz

green のスイッチユーザーをやめる。 展開すると ftp/bin というディレクトリが生成され、 ftp/bin 以下に cksum、compress、gzip、ls、md5sum、tar ができる。 これらのファイルを /home/ftp/bin 以下にコピーする。

#cp ftp/bin/* /home/ftp/bin

コピーしたら、パーミッションをすべて 111 に変更する。

# chmod 111 *

次は /home/ftp/etc の設定。

#cd ../etc
#vi group

として、

root::0:
staff:::

を書き加える。

同様に、

# vi passwd

として、

ftp:*:500:1:
bin:*:2:2:
root:*:0:3:

を書き加える。

今作った /home/ftp/etc/group、 /home/ftp/etc/passwd のパーミッションの変更。

# chmod 444 *

次に /home/green/wu-ftpd-2.6.0/doc/examples/ 以下の ftpaccess、ftpconversons、ftphosts、ftpgroups を /etc/wu-ftpd-2.6.0/ 以下にコピーする。

# cd /home/green/wu-ftpd-2.6.0/doc/examples/
# cp ftpaccess ftpconversions ftphosts ftpgroups /etc/wu-ftpd-2.6.0/
# cd /etc/wu-ftpd-2.6.0/
# chmod 444 *

また、以下のようにリンクを張っておく。

# ln -s /etc/ftpusers ftpusers


3.FTP mirror

(3.1) 概要

green は主に専攻サーバーの構築に必要なファイル、 パッケージを取得するために様々なサイトをミラーリングしている。

[ 取得するファイルやパッケージ、各々のミラー先 ]
Debian ftp://ftp.jp.debian.org/
OTP ftp://starbow.st.ryukoku.ac.jp/pub/security/tool/opie/
inn ftp://ftp.isc.org/isc/inn/
wu-ftpd ftp://ftp.wu-ftpd.org/pub/wu-ftpd/
qmail ftp://ftp.jp.qmail.org/qmail/
ezmlm ftp://ftp.jp.qmail.org/ezmlm/
smtp ftp://ftp.cac.washington.edu/imap/
imap ftp://ftp.win.ne.jp/pub/network/mail/qmail/

green ではミラーリングの自動化のために専用のアプリケーションを導入している。 今回は Debian パッケージに含まれている"fmirror version 0.8.4"を用いた。 以下 fmirror の設定ファイルを用いたミラーリングの方法について説明する。

(3.2) インストール

dselect で行う。 Debian GNU/Linux にはソフトウェアのインストールを簡単に行うために dselect、apt-get、dpkg といったコマンドが用意されている。 ここでは dselect を用いる方法を解説する( ソフトウェアのインストール、dselect より引用)。

まず root としてログインし、
# dselect
を実行。

[A]ccess
"ftp" を選択する。
以下設定する箇所のみを書く。 コロンのあとに何も書かれていない場合はリターンを押したことを意味する。
・Enter ftp site []:
dennou-h.ees.hokudai.ac.jp
・Use passive mode [y]:
・Enter username [anonymous]:
・Enter password [root@green.sci.hokudai.ac.jp]:
自分のメールアドレスを書く
・Enter debian directory [/pub/]:
/arch/cc-env/Linux/debian-jp
・Go through an authenticated FTP proxy [n]:
・Enter space seperated list of distributions to get[]:
dists/slink/main dists/slink/non-free dists/slink/contrib dists/slink-jp/main dists/slink-jp/contrib dists/slink-jp/non-free (スペースで区切る)
・Enter directory to download binary package files to (relative to /var/lib/dpkg/methods/ftp/) [debian]:

[U]pdate
リターンを押す

[S]elect
スペースキーを押してファイル一覧画面になったら、 /(スラッシュ)に続けて"fmirror"と入力する。
fmirror の行で"+"を押す(インストールするパッケージに加えられる)
fmirror の依存するパッケージの一覧が表示されるので、 リターンを押す

[I]nstall
fmirror と依存するパッケージがインストールされる。

[C]onfig[R]emove[Q]uit と順に実行

(3.3) 設定

fmirrorの設定ファイルは /etc/fmirror に置かれる。 ここには実際にミラーリングを行う際の設定と ミラーリングの実行を記述したシェルスクリプトである *.conf ファイルと、 cron による自動ミラーリングを意識した config ファイルがある。
/etc/fmirror/debian.conf など /etc/fmirror/*.conf の中身は、
green の /etc/fmirror/debian.conf
green の /etc/fmirror/OTP.conf
green の /etc/fmirror/inn.conf
green の /etc/fmirror/wu-ftpd.conf
green の /etc/fmirror/qmail-smtp.conf
green の /etc/fmirror/ezmlm.conf
green の /etc/fmirror/imap.conf
green の /etc/fmirror/imap-patch.conf
green の /etc/fmirror/config
を参照のこと。
ここでは debian.conf を例にして *.conf ファイルの設定内容を説明する。
※行頭の番号は説明のためにつけたもので、実際のファイルには含まれていない。

(3.3.1) generic.conf の設定内容

<7>:username
ミラーリング先の ftp サーバに ログオンする際に使用するユーザー名。
ここでは anonymous としている。
<8>:passwd
green 管理者のメールアドレスを入れる。
<9>:host
ミラーリングするサーバのドメイン名もしくは IP アドレス。
ここでは ftp.jp.debian.org とする。
<10>:remotedir
リモート(ミラーリングするサーバ) のミラーリングを行うディレクトリ。 ここで指定している。/ とする。
<11>:localdir
ローカル(green)のミラーリングを行うディレクトリ。
ここでは /home/ftp/pub/common/Linux/ を指定している。
<17-18>:exclude
指定するパターンにマッチするファイルはミラーリングしない。

※ bin、etc、lib 各ディレクトリのミラーリング除外
<11>行目で指定している localdir(green の /home/ftp/) には 元から bin/、etc/、lib/ といったディレクトリが存在する。 これらは anonymous FTP ユーザーが利用するための ls コマンドなどを含んでいるが、 ミラーリングによってこれらのディレクトリが上書きされた場合、 anonymous FTP でログインした際に ファイルが表示できなくなるなどの問題が生じる。 そこで <20-21>行では exclude 構文を用いて これらのディレクトリをミラーリングの対象から除外している。 この設定はデフォルトでインストールされる generic.conf には 含まれていないので管理者が記述しなければならない。

<21>行目に、

exclude: p ^(bin/|etc/|lib/)

と書き加える。^(bin/|etc/|lib/) は正規表現を用いている。

(3.3.2) configの設定内容

こちらは次に説明する cron によるミラーリングのための 各種環境変数の設定を行っている。
重要なのは<30>行目である。

NIGHTLY_JOBS="wu-ftpd OTP inn qmail-smtp ezmlm imap imap-patch"

とする。ここで変数 NIGHTLY_JOBS に指定した文字列に .conf を付けた名前のファイルが cron によるミラーリングの設定に用いられることになる。 ここでは debian wu-ftpd OTP inn qmail-smtp ezmlm imap imap-patch となっているため debian.conf 、wu-ftpd.conf 、... ファイルが使われる。 ただし debian は容量が非常に大きいため毎日ミラーせず、 以下のように設定することで毎週日曜日のみミラーを行うようにした。

DAY[0]="debian"

(3.4) cron による自動化

UNIX には定期的に行う作業を自動的に行うための cron というツールが用意されている。 さらに debian では /etc/cron.daily/、 /etc/cron.weekly/ といったフォルダを用意している。 これらのフォルダに格納されたプログラムをそれぞれ毎日、 毎週実行することで設定を簡単にしている。 fmirror の実行スクリプトはデフォルトで /etc/cron.daily に格納されている。

greenの/etc/cron.daily/fmirror
※行頭の番号は説明のためにつけたもので、実際のファイルには含まれていない。

(3.4.1) /etc/cron.daily/fmirror の内容

<27>: confdir
設定ファイルを格納したディレクトリを指定している。 デフォルトは /etc/fmirror。
<28>: logdir
ミラーリングのログを格納するディレクトリを指定している。 デフォルトは /var/log/fmirror。
<34>: . $confdir/config
上で説明した /etc/fmirror/config を実行することにより各種設定を行う。
<59-60>:
/etc/fmirror/debian.conf を設定ファイルに用いてミラーリングを行う。

(3.5) ミラーリングの流れ

以上のミラーリングの行程を簡単に説明すると次のようになる。

  1. cron により /etc/cron.daily/fmirror が実行される。
  2. /etc/cron.daily/fmirror は /etc/fmirror/config を実行する。
  3. /etc/fmirror/config はミラーリング設定ファイルとして /etc/fmirror/debian.conf を読み込む。
  4. /etc/fmirror/debian.conf を設定ファイルとしてミラーリングが行われる。


4.参考文献

大澤文孝、永安悟史、松枝知直: 1999、インターネットサーバ構築術 Linux編、工学社。
Cricket Liu、Adrian Nye 共著、小川正夫、本多淳子 監訳、加藤勝明 著: 1997、FTP サーバ構築ガイド、オライリー・ジャパン。


更新略歴:
2000/06/12 河野仁之
2000/05/19 原山洋平
2000/04/10 原山洋平
2000/04/08 原山洋平