FTPサーバを立ち上げる(wu-ftpd)


wu-ftpd

FTP とは File Transfer Protocol の略で、ネットワーク上でファイルを転送する プロトコルです。FTP を提供する側には ftpd があり、クライアントには ftp クライアントがあります。UNIX 系 OS には、システムに標準で ftpd が付属しており、 OS をインストールした時点ですぐに FTP サーバとして動作させることが できます。
クライアントから FTP する場合、サーバ側が個人を認証し、確認した時のみ利用 できる FTP と、誰でも(匿名)利用できる anonymous FTP があります。誰でも利用 できる場合には、大きな危険を伴う場合がありますので、それなりに機能を強化した ftpd が必要になります。
ここでは、システム標準の ftpd より高機能である wu-ftpd をインストールして、 anonymous FTP サーバを構築します。wu-ftpd は、システム付属の ftpd に比べて 下記のようなメリットがあります。 以上のメリットにより、インターネット上で FTP サービスを行うには事実上の標準に なっています。

wu-ftpdのインストール

wu-ftpd のソースファイルは、例えば以下の URL
ftp://ftp.jaist.ac.jp/pub/net/wu-ftpd/
より入手できます。

FreeBSD や Linux を使用している場合には、バイナリパッケージを利用すると 便利です。ただし、wu-ftpd-2.4.2(beta18)VR10 以前のものは、重大なセキュリティ ホールがあるということなので注意が必要です。
今回は Vine Linux 1.1 に anonymous FTP サーバを構築するため、 RPM パッケージの wu-ftpd-2.5.0-5.5.x.i386.rpm と anonftp-2.6-1.i386.rpm を インストールしました。
# rpm -Uvvh wu-ftpd-2.5.0-5.5.x.i386.rpm
# rpm -Uvvh anonftp-2.6-1.i386.rpm
Vine Linux 1.1 ではデフォルトで FTP サーバは wu-ftpd になっているので、 インストールした段階で wu-ftpd が使用できます。 ここでは、ソースファイルから wu-ftpd をインストールする場合について 説明します。wu-ftpd-2.6.0 からは GNU Autoconf に対応しているため、
% tar xvfz wu-ftpd-2.6.0.tar.gz
% cd wu-ftpd-2.6.0
% ./configure
% make
% su
Password:
# make install
でインストールできます。

wu-ftpdの設定

インストールが終了したら、anonymous FTP の設定をする前に、普通に FTP ができる ようにします。
まずは、クライアントからの FTP の要求が来たときに、wu-ftpd の ftpd が起動する ように /etc/inetd.conf ファイルを編集します。wu-ftpd の ftpd は /usr/sbin/in.ftpd としてインストールされるため、/etc/inetd.conf ファイルの ftpd のパスを /usr/sbin/in.ftpd に変更します。例として、FreeBSD の場合は、
変更前
ftp      stream  tcp     nowait  root    /usr/libexec/ftpd ftpd -l
変更後
ftp      stream  tcp     nowait  root    /usr/sbin/in.ftpd in.ftpd -l -a
のように変更します。ftpd のオプションは man ftpd で確認して下さい。
次に、inetd の変更を更新させるため、inetd を再起動します。次のようにして inetd のプロセス番号を調べて、kill コマンドで HUP シグナルを送ります。
% ps ax | grep inetd
  189  ??  Is     0:00.18 inetd
97812  p4  D+     0:00.00 grep inetd
# kill -HUP 189
ここで一度、ftp コマンドを使用して、wu-ftpd が動くか確認してみます。 FTPサーバのホスト名を hogehoge とすると、
% ftp hogehoge
Connected to hogehoge
220 hogehoge FTP server (Version wu-2.6.0(5) Mon Nov 8 00:11:49 JST 1999) ready.
Name (hogehoge:sakai): 
のように表示されれば wu-ftpd が動いています。

Anonymous FTP の設定

Anonymous(匿名)で FTP を使用するには、FTP用のアカウントを作成する必要が あります。Vine Linux 1.1 では、デフォルトで
ユーザ   ftp    ユーザID    14
グループ ftp    グループID  50
が作成されているので、新しく作成する必要はありません。例として、FreeBSD で 上記のユーザとグループを作成する場合について説明します。
まず、/etc/group ファイルを編集し、以下の行を付け加えます。
# vi group
以下の行を追加
ftp:*:50:ftp
次に vipw を実行し /etc/passwd ファイルを編集します。ユーザ ftp のホーム ディレクトリ(Anonymous FTP でログインするディレクトリ)を、ここでは /home1/ftp とします。環境に応じて変更してください。
以下の行を付け加えます。ログインシェルは必要無いため、 FreeBSD では /sbin/nologin 、Vine Linux では /bin/true として、実効性の無い シェルを指定します。
# vipw
以下の行を追加
ftp:*:14:50::0:0:Anonymous FTP User:/home1/ftp:/sbin/nologin
以上で Anonymous FTP 用のアカウント ftp の作成は終了です。

次に、Anonymous FTP 用のアカウント ftp のディレクトリ(Anonymous FTP でログイン するディレクトリ)を作成し、オーナーとアクセス権を設定します。
# cd /home1
# mkdir ftp
# chown ftp.ftp ftp
# chmod 555 ftp
次に、ftp ディレクトリの下に、ネットワークで公開するファイルを置くディレクトリ pub を作成します。また、オーナーとアクセス権を変更します。
# cd /home1/ftp
# mkdir pub
# chown ftp.ftp pub
# chmod 775 pub
次に、ユーザが接続した時に使用するコマンドを格納するディレクトリ bin を作成 します。また、オーナーとアクセス権を設定します。
# cd /home1/ftp
# mkdir bin
# chown root.root bin
# chmod 111 bin
また、この bin ディレクトリに ls , tar , compress , gzip をコピーし、 アクセス権を設定します。
# cd /home1/ftp/bin
# cp /bin/ls .
# cp /bin/tar .
# cp /usr/bin/compress .
# cp /usr/bin/gzip .
# chmod 111 *
次に、ftp アカウントの設定ファイルを格納するディレクトリ etc を作成し、 オーナーとアクセス権を設定します。
# cd /home1/ftp
# mkdir etc
# chown root.root etc
# chmod 111 etc
この etc ディレクトリには passwd ファイルと group ファイルを置きます。 これらのファイルは、ftpデーモンが ftp ディレクトリにあるファイルの所有者や グループを表示するために参照するものです。
/etc/passwd ファイル、/etc/group ファイルをコピーして、root と ftp のエントリ のみ残して、表示する必要の無いアカウントは削除します。
# cd /home1/ftp/etc
# cp /etc/passwd .
# vi passwd
root と ftp のエントリのみ残して、後は削除
root と ftp のエントリは、ホームディレクトリを / 、シェルは /bin/true 等の実効性の無いシェルを指定
# cp /etc/group .
root と ftp のエントリのみ残して、後は削除
# chmod 444 *
次に、bin ディレクトリに格納してあるコマンドを実行するのに必要な共有ライブラリ を格納するディレクトリ lib を作成し、オーナーとアクセス権を設定します。
# cd /home1/ftp
# mkdir lib
# chown root.root lib
# chmod 111 lib
bin ディレクトリに格納してあるコマンドの共有ライブラリの依存関係を知るには、 以下のようにします。
% ldd /bin/ls
  libwcsmbs.so.0 => /lib/libwcsmbs.so.0 (0x40007000)
  libc.so.6 => /lib/libc.so.6 (0x4000b000)
  /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x00000000)
これらの共有ライブラリを lib ディレクトリにコピーします。
# cd /home1/ftp/lib
# cp /lib/libwcsmbs.so.0 .
# cp /lib/libc.so.6 .
# cp /lib/ld-linux.so.2
以上で、とりあえず anonymous FTP の設定は終了です。ここで一度 anonymous で ftp してみます。FTPサーバのホスト名を hogehoge とします。
% ftp hogehoge
Connected to hogehoge
220 hogehoge FTP server (Version wu-2.5.0(1) Wed Aug 25 14:13:56 EDT 1999) ready.
Name (hogehoge:sakai): ftp
331 Guest login ok, send your complete e-mail address as password.
Password:
230 Guest login ok, access restrictions apply.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
これで anonymous で ftp ができるようになりました。ls コマンド等で ディレクトリの中身が表示されることを確認しておきます。
ただ、現在は何故か ls でディレクトリの所有者やグループが番号で表示されて しまい、名前では表示されません。原因を解明中です。

ゲストユーザによるFTP

例えば、外部の人間に対して、アカウントを与えないが、ファイルの アップロードのみを許可したい場合を考えます。
この場合は、以下のような設定を行います。 まず、ゲストユーザとして、以下のようなアカウントを作成します。
ユーザ              guest (UIDは任意)
グループ            guest (GIDは任意、FreeBSDでは Gid 31 として既存)
ホームディレクトリ  /home1/guest/./ (/home1/guest を仮想 / ディレクトリとする)
シェル              /bin/true (実効性の無いシェル)
まず、ゲストユーザが所属するグループの作成を行います。
# vi /etc/group
以下の行を追加(Vine Linux)
guest::31:guest
次に、ゲストユーザアカウントを作成します。
# vipw
以下の行を追加(Vine Linux)
guest:*:3000:31:Guest User:/home1/guest/./:/bin/true
ゲストユーザアカウントのパスワードを設定します。
# passwd guest
/home1/guest ディレクトリを仮想 / (root) ディレクトリとするため、 ホームディレクトリを /home1/guest/./ とします。
また、実効性の無いシェル /bin/true を /etc/shells に登録しておきます。
あとは、anonymous FTP サーバと同じように設定を行います。 /home1/guest ディレクトリ以下に pub , etc , bin , lib ディレクトリを作成し、 必要なファイルをコピーし、必要に応じて編集し、適切なアクセス権とオーナーを 設定します。

各種設定ファイルの編集

Anonymous FTP が使用する各種設定ファイルを編集します。wu-ftpd の設定ファイル としては、/etc 以下のディレクトリにある ftpaccess , ftpusers , ftpconversions , ftpgroup , ftphosts があります。 以下に、各種設定ファイルの意味について説明します。

戻る

sakai@oak.eg.t.kanazawa-u.ac.jp
Last modified: Wed Jun 21 20:44:21 JST 2000