Last modified: Mon Feb 18 2002
この文書では, FTP(File Transfer Protocol) サービスを提供するための FTP サーバーの構築の基本設定についてご説明します.
Table of Contents
Wu-ftpd は Redhat Linux 7.x などに標準で用意されている FTP サーバーです. 通常は, インストール時にサーバー用途のシステムを選択することでインストールされます.
無ければ CD-ROM に入っていますので後から手動でインストールすればいいでしょう.
ただし, Wu-ftpd には今までにもセキュリティホールが発見されたりしていますので, 特にセキュリティ面で注意が必要な FTP サーバーを公開する以上,
最新版をインストールするようにしましょう. 何と言っても不特定多数のユーザーからのアクセスを許可する anonymousFTP サービスを提供するには,
細心の注意が必要です. この項では anonymousFTP サービスを公開する手順についてご説明していきます.
■ anonymousFTP サービスのための設定
まずユーザー ftp が必要です。いくつかのディストリビューションではインストール時点に作られています。ユーザー ftp のホームディレクトリ /home/ftp(*1)
も必要ですがこれもはじめに作られていることが多いでしょう。無ければ useadd などで作りましょう。また /home/ftp のパーミッションは 755
か 555 にしておきましょう。
*1. 個々の環境によって異なることがあります.
/home/ftp には次のようなディレクトリ構成になっていればいいでしょう。パーミッションは bin/ と etc/ を 111 、 lib/ と
pub/ を 755 にしておくとします。
bin/ etc/ lib/ pub/
まず /home/ftp/bin の下に次のコマンドを置きます。無ければそれぞれをコピーして置けばいいでしょう.
compress
cpio
gzip
ls
tar
次に /etc/passwd を参考に /home/ftp/etc にpasswd を作ります。一例を示します。
root:*:0:0:::
bin:*:1:1:::
operator:*:11:0:::
ftp:*:14:50:::
nobody:*:99:99:::
次に、同じように /home/ftp/etc/group を作ります。一例を示します。
root::0:
bin::1:
daemon::2:
sys::3:
adm::4:
ftp::50:
次にアクセスしたユーザーに見せるメッセージのファイル /home/ftp/etc/welcometo.msg を作ります。逆にアクセス制限オーバー時のためのメッセージファイルを作ることができます。
■ Wu-ftpd の設定ファイル
Wu-ftpd の設定ファイルは次のファイルです。
/etc/ftpaccess
/etc/ftpgroups
/etc/ftpusers
/etc/ftpconversions
/etc/ftphosts
(1) /etc/ftpaccess
サーバーのアクセスにおける諸設定を行うファイルです。例えば、
chmod no guest, anonymous
という記述は、anonymousとguestに対してchmodを制限しています。主な設定内容は次のとおりです.
| greeting brief --->ログインメッセージの出力指定(*1) class all real,guest,anonymous * ---> クラスの定義(*2) loginfails 5 ---> ログイン失敗の限度回数 limit all 20 MoFr1600-1800 /etc/ftp_over --->アクセス数制限(*3) readme README* login ---> readme ファイルを出力します。 readme README* cwd=* message /etc/welcometo.msg login ---> メッセージファイルの場所を指定 message .message cwd=* compress yes all ---> compress でのアップロードを許可 tar yes all chmod no guest,anonymous ---> no のところは guest と anonymous に許可しない delete no guest,anonymous overwrite no guest,anonymous rename no guest,anonymous log transfers anonymous,real inbound,outbound shutdown /etc/shutmsg passwd-check rfc822 warn ---> ログイン時にパスワードがメイルアドレスか確認、 warn は警告、 enforce は切断(*4) |
*1. brief はホスト名が出力されます。他に full(サーバーについての詳細情報)がありますがおすすめはできません。
*2. all を指定することでホストを限定せずすべてのユーザーに対してということになります。
*3. この例では, 月〜金曜日の17時〜18時 にアクセス数が20を越えた場合, アクセス拒否して指定パスのファイルに書かれたメッセージを出力します.
全曜日は Any を記述.
*4. rfc822 はパスワードに "ホスト @ ドメイン"を要求します。none であればパスワードは不要です。
(2) /etc/ftpusers
ログインを制限するユーザー名を設定します。ここに書かれているユーザーはログインが許可されません。例えばデフォルトではrootが書かれていますがこれは消すべきではありません。
(3) /etc/ftphosts
ホストのログインの設定をします。
Allow ユーザー名 ドメイン又はIPアドレス
と書くとログインを許可することになります。Allowの部分をDenyにするとログインを禁止することになります。
(例)
allow yamada 192.168.0.64
この例ではユーザー yamada だけにログイン許可しています。
これら設定ファイルの内容を書き間違えるとログイン出来なくなりますので注意が必要です。
■ スーパーサーバーの設定と FTP サーバーの起動
FTP サーバーを起動する前にデーモンの設定やアクセス制御の状態などを確認しておきます.
TCP Wrappers で制御する場合には次のファイルの設定を確認する必要があります.
/etc/inetd.conf
/etc/services
ftp でのアクセスを許可するためにはまず、 /etc/inetd.conf の ftp サービスの行を確認し、コメントアウトされていたらはずします。次に /etc/hosts.deny に以下のように編集します。
ALL : ALL
これでまずすべてのアクセスを禁止します。次にアクセスを許可するIPアドレスの範囲かドメインなどを /etc/hosts.allow に以下のように書きます。
ALL : 127.0.0.1
in.ftpd : .hoge.gr.jp
これで hoge.gr.jp に属するユーザーに対してのみアクセスを許可します。できないことになります。
次に /etc/services の内容を確認します. このファイルに次の記述が必要です。
ftp-data 20/tcp
ftp 21/tcp
TCP Wrapper を使ってる場合は, /etc/inetd.conf に次の記述があることを確認します。
ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a
このように書かれていれば問題ありません.
ここまでの設定が済めば再起動します。
# kill -HUP `cat /var/run/inetd.pid`
次に Xinetd によって制御している場合について触れてみましょう. この場合, Wu-ftpd の設定ファイルは /etc/xinetd.d 以下に置いてあります. 次の表のような内容になっていればいいでしょう.
| service ftp { disable = no socket_type = stream wait = no user = root server = /usr/sbin/in.ftpd server_args = -l -a only_from = 192.168.1.0/24 log_on_success += DURATION USERID log_on_failure += USERID nice = 10 } |
Xinetd の設定についての詳細は下記の文書をご参照ください.
関連文書: Xinetd の設定 / サービスの設定
ProFTPD は, Wu-ftpd に変わる, より安全性の高い FTP サーバーとして採用されることが増えてきています. この項ではその ProFTPD
の設定についてご説明していきます.
■ anonymousFTP サービスのための設定
まず, /etc/group を確認し, ユーザー ftp が ftp グループに属しているか確認します. デフォルトで ProFTPD が採用されているディストリビューションでは問題ないでしょう.
後から ProFTPD をインストールしたような場合は確認し, 設定する必要があるかも知れません. /etc/group と /etc/passwd にそれぞれ設定することになるでしょう.
次に /etc/passwd を確認します. ユーザー ftp の行を見てみましょう.
ftp:x:14:50:FTP User:/var/ftpd:
このようになっていたらシェルの設定を追加します.
ftp:x:14:50:FTP User:/var/ftpd:/bin/false
ログインシェルとして /bin/false を追加します. これによりセキュリティが向上します. 更にこのシェルを使えるように /etc/shells に次の1行を書き加えます.
/bin/false
■ 設定ファイルの編集
(1) /etc/proftpd/proftpd.conf
ProFTPD の設定ファイルは, /etc/proftpd/proftpd.conf です. 下表にその内容を示します.
| ServerName "ProFTPD Default Installation"
--->(1) ServerType standalone --->(2) DefaultServer on Port 21 --->(3) Umask 022 --->(4) MaxInstances 30 --->(5) User nobody --->(6) DefaultRoot ~ --->(8) ExtendedLog /var/log/proftpd.log --->(9) <Directory /*> <Anonymous ~ftp> MaxClients 10 --->(12) DisplayLogin welcome.msg --->(13) <Limit WRITE> </Anonymous> |
(1) サーバーの名前
(2) standalone は ProFTPD を単独起動する, inetd は inetd または xinetd 経由で起動
(3) ポート番号. ただし inetd や xinetd 経由時はそちtらの設定が優先される
(4) ファイル作成時のマスクの設定
(5) 接続できるクライアントの最大数
(6) デーモンを起動するユーザー名. 通常はこのまま
(7) デーモンを起動するグループ名. 通常はこのまま
(8) ~ は上位ディレクトリに行けないようにする. 特定のディレクトリのみアクセスさせるにはディレクトリ名をフルパスで指定
(9) ログファイル
(10) on にするとサーバー上のファイルに書込み権限を与えるので off にする
(11) anonymousFTP の場合はこのままにしておく
(12) anonymous で接続できるクライアントの最大数
(13) ログイン時のメッセージが書かれているファイル名の指定
(14) アクセス制限の設定. この例ではすべて書込み禁止
(2) /etc/ftpusers
ログインを制限するユーザー名を設定します。ここに書かれているユーザーはログインが許可されません。例えばデフォルトではrootが書かれていますがこれは消すべきではありません。
■ スーパーサーバーの設定と FTP サーバーの起動
ProFTPD がデフォルトで採用されているディストリビューション (Turbolinux 7 Server など) では初期設定で "standalone"
になっていて単独起動するようになっていますが, ここではスーパーサーバーを使って起動する場合の事例をご説明してみましょう. まず inetd の場合です.
TCP Wrappers を使っている場合, /etc/inetd.conf の次の行を確認します.
ftp stream tcp nowait root /usr/sbin/in.ftpd in.ftpd
このようになっていたら次のように編集します.
ftp stream tcp nowait root /usr/sbin/tcpd /usr/local/sbin/proftpd
Xinetd の場合は, 次のような設定ファイルになります.
| service ftp { disable = no socket_type = stream wait = no user = root server = /usr/sbin/in.proftpd server_args = log_on_success += DURATION USERID log_on_failure += USERID nice = 10 } |
Xinetd の設定についての詳細は下記の文書をご参照ください.
関連文書: Xinetd の設定 / サービスの設定
■ FTP ディレクトリの作成
上記の Wu-ftpd 同様に FTP ディレクトリを作成します. ディストリビューションによっては /var/ftpd のようになっている場合もあります. これは /home/ftp などに変更しても構いません. そしてその下にクライアントがアクセスするディレクトリとして例えば pub などを作成します.
# mkdir /home/ftp/pub
グループを変更します.
# chgrp ftp /home/ftp/pub
所有者を変更します.
# chown ftp /home/ftp/pub
このようにディレクトリを作成していきますが, パーミッションに注意してください.
いよいよ ProFTPD を起動します. すでに起動していないかどうか次のコマンドで確認します.
# ps ax | grep -i proftpd
起動していなければ次のコマンドを実行し, 起動します. この例では単独起動させます.
# /etc/init.d/proftpd start
または
# /etc/rc.d/init.d/proftpd start