FTP サーバーの構築

Linux活用日記



Last modified: Mon Feb 18 2002




この文書では, FTP(File Transfer Protocol) サービスを提供するための FTP サーバーの構築の基本設定についてご説明します.


Table of Contents





Wu-ftpd



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


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)
Group nobody --->(7)

DefaultRoot ~ --->(8)
PersistentPasswd off

ExtendedLog /var/log/proftpd.log --->(9)

<Directory /*>
AllowOverwrite on --->(10)
</Directory>

<Anonymous ~ftp>
User ftp
Group ftp
UserAlias anonymous ftp --->(11)

MaxClients 10 --->(12)

DisplayLogin welcome.msg --->(13)
DisplayFirstChdir .message

<Limit WRITE>
DenyAll --->(14)
</Limit>

</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




HOME