FTP とは File Transfer Protcol(ファイル転送プロトコル)の略である。
つまり、ネットワークを経由してファイルをやり取りするための仕組み。
これはサーバからファイルをダウンロード・アップロードするときによく用いられる。
ここでは wu-ftpd-2.6.0 を用いて FTP サーバーを構築する方法を解説する。
なお、OS(オペレーティングシステム)のインストールについては再構築資料 "基本システムのインストール" を参照し、終えておくこと。
wu-ftpd には debian パッケージも存在するが、
専攻サーバでは最新版を利用するために、
以下の手順でソースファイルを取得しコンパイルする。
必要なファイルは以下の2つ。
これらを提供している ftp サイトより各々 /home/green/ にダウンロードする。
次に、取得したこれらのファイルをソースファイルとして保管する
ディレクトリを用意する。green では /home/green/src 。
$ mkdir /home/green/src
ここに、先ほどのファイルをコピーしておく。
$ cp wu-ftpd-2.6.0.tar.gz /home/green/src/.
ファイル 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/
wu-ftpd のコンパイルとインストールの手順は、
"通例よく見かけるコンパイルとインストールの手順"と少々異なる。
ここで言う"通例よく見かけるコンパイルとインストールの手順"とは、以下の手順である。
$ ./configure
$ make
# make install
※因みに wu-ftpd 製作グループによると、
wu-ftpd も将来的には上記の手順に移行する予定であるそうだ。
■ 下準備
wu-ftpd では次のように行う。
まず、個々のコンピュータ環境に応じたコンパイル&インストールを行うよう、
次のコマンドを実行する。
$ ./bulid lnx
ここで lnx は、Linux 系OSを用いていることを指定している。
■ 設定ファイル配置先の変更
次に、wu-ftpd の動作設定ファイルを置くべきディレクトリを変更するため、
コンパイル前にソースファイルの一部を編集する。
何も編集せず、変更を加えない場合、
wu-ftpd の動作設定ファイルは /etc/ に置かなければならない。*1
ディレクトリ /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
とすればインストールは完了である。
インストール時に FTP サーバとして機能するための基本的な設定は行われる。
しかし詳細な設定は設定ファイルを作成するか編集して行う必要がある。
wu-ftpd の設定ファイルは /etc/wu-ftpd-2.6.0/ に置かれる次の3つ。
他に 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
である。
wu-ftpdの全体的な動作設定を行う。
「クラス定義」、「同時アクセス数」、
そして green では anonymous FTP サービスの設定が主な設定項目。
green の /etc/wu-ftpd-2.6.0
その他設定項目については 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" に変更してファイルのアップロードができないように設定している。
/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
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 の設定ファイルを用いたミラーリングの方法について説明する。
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 と順に実行
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 ファイルの設定内容を説明する。
※行頭の番号は説明のためにつけたもので、実際のファイルには含まれていない。
※ 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/) は正規表現を用いている。
こちらは次に説明する 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"
UNIX には定期的に行う作業を自動的に行うための cron というツールが用意されている。 さらに debian では /etc/cron.daily/、 /etc/cron.weekly/ といったフォルダを用意している。 これらのフォルダに格納されたプログラムをそれぞれ毎日、 毎週実行することで設定を簡単にしている。 fmirror の実行スクリプトはデフォルトで /etc/cron.daily に格納されている。
greenの/etc/cron.daily/fmirror
※行頭の番号は説明のためにつけたもので、実際のファイルには含まれていない。
以上のミラーリングの行程を簡単に説明すると次のようになる。
大澤文孝、永安悟史、松枝知直:
1999、インターネットサーバ構築術 Linux編、工学社。
Cricket Liu、Adrian Nye 共著、小川正夫、本多淳子 監訳、加藤勝明 著:
1997、FTP サーバ構築ガイド、オライリー・ジャパン。