ProFTPdのカスタマイズ
2006年1月16日 掲載
ProFTPdの設定を変更するには、viなどのエディタで「/etc/proftpd.conf」を編集します。編集が終わったら、変更を有効にするためProFTPdを再起動します。「/etc/rc.d/init.d/proftpd restart」もしくは「service proftpd restart」と入力します。作業はもちろんスーパーユーザーで行ってください。
ログインにかかる時間を短縮する
標準の設定ではログインにかなり時間がかかります。これはFTPサーバーが接続してきたユーザーの情報を確認する手順に手間取るため。次の2行を/etc/proftpd.confに追加すると、ユーザー名とパスワードを入力するとすぐにログインできるようになります。追加する場所はどこでもかまいませんが、<×××>〜<×××>で囲まれた中は避けるようにします。
IdentLookups off UseReverseDNS off
IdentLookupsとはログイン時に指定したユーザー名だけでなく、接続元のコンピュータでのユーザー名も確認する機能です。セキュリティを向上させる手段として設けられていますが、実際には簡単に詐称ができるのであまり意味はありません。また、接続元のコンピュータではIdentサーバーを起動しておかなければ、この機能を有効にする意味がありません。ログインに時間がかかるだけなので無効にしておきます。
UseReverseDNSとは接続してきたユーザー名のIPアドレスを逆引きし、ホスト名を求めます。うまく逆引きができないとタイムアウトするまでログインが保留されます。こちらも無効にしておくことをおすすめします。
アクセスできるディレクトリを制限する
FTPサーバーにログインしたユーザーは、サーバーの中のすべてのディレクトリを見ることができます。パーミッションの設定によって禁止されている場所は閲覧や読み出し、書き込みができないのですが、万が一、不正侵入されたときはここからさらなる攻撃につながるかもしれません。FTP接続したときに移動できるディレクトリを制限しておくべきです。
/etc/proftpd.confに「DefaultRoot ~」という一行を追加します。追加する場所はどこでもかまいませんが、<×××>〜<×××>で囲まれた中は避けるようにします。これでログインしたユーザーはホームディレクトリの中しか見られなくなります。「~」とはユーザーのホームディレクトリを表します。ユーザーにホームディレクトリのpublic_htmlディレクトリだけを操作させたいなら「DefaultRoot ~/public_html」と指定します。また、どのユーザーに対しても/var/ftpディレクトリだけを公開したいなら「DefaultRoot /var/ftp」とします。それ以外のディレクトリには移動できなくなります。
DefaultRoot ~ ユーザーのホームディレクトリ以外に移動できない DefaultRoot ~/public_html ホームのpublic_html以外には移動できない DefaultRoot /var/ftp どのユーザーも/var/ftp以外には移動できない
しかし、サーバーの管理者だけはサーバー全体にアクセスしたいこともあるはず。そんなときは「DefaultRoot ~ !wheel」と指定します。これは「wheel」というグループに属するユーザーだけは「DefaultRoot ~」の設定から除外するというもの。「wheel」の部分は必要に応じてほかのユーザー名に変更してもかまいません。ちなみに「wheel」とは管理者グループのことであり、詳しくは「ルートになれるユーザーを制限する」を参照してください。
アクセスできるユーザーを制限する
サーバーに多数のユーザーを登録している場合、そのうちの誰かのパスワードがもれると、そこがセキュリティの穴になる可能性があります。FTPを利用しないユーザーはFTPサーバーにログインできないように設定できます。下のような記述を/etc/proftpd.confのどこかに追加してください。追加する場所はどこでもかまいませんが、<×××>〜<×××>で囲まれた中は避けるようにします。
<Limit Login>
Order allow,deny
AllowUser user1,user2,user3 許可するユーザー名をカンマで区切って並べる
Deny all
</Limit>
外部からのアクセスを禁止する
家庭内LANからのアクセスだけを許可し、外部からのアクセスを禁止します。ルーターでTCP/20とTCP/21を閉じておけば外部からアクセスされることはありませんが、念を入れるなら設定しておきます。上と同じように<Limit>ディレクティブを使います。以下は192.168.0.××のIPアドレスからのアクセスだけを許可する設定です。必要に応じてIPアドレスは変更してください。127.0.0.1とはサーバー自体を示すループバックアドレスです。
<Limit Login>
Order allow,deny
Allow from 127.0.0.1,192.168.0.0/24 192.168.0.××だけアクセスを許可する
Deny all
</Limit>
上のユーザーを限定する「AllowUser」と同時に指定すると、「または」の関係になるところに注意してください。AllowUserで指定したユーザーはどこからでも接続でき、それ以外のユーザーも192.168.0.××からは接続ができます。
anonymousによる接続を無効にする
ProFTPdの標準設定では、ユーザー名に「anonymous」と指定するだけで誰でもFTPサーバーにアクセスできます。見られるのは/var/ftpディレクトリだけであり、読み込みだけで書き込みはできない設定になっていますが、見知らぬ人にログインを許すのは避けるべき。不特定多数に対してデータを配布する用途でなければ、anonymousによるログインを禁止します。
/etc/proftpd.confには<Anonymous ~ftp>と</Anonymous>で囲まれた範囲がありますが、その間の行頭にすべて「#」を付けてコメントアウトします。以下のように変更してください。
#<Anonymous ~ftp>
#
# User ftp
# Group ftp
:
:(中略)
:
# <Limit WRITE>
# DenyAll
# </Limit>
#
#</Anonymous>
ちなみに<Anonymous ~ftp>とは、ユーザー名「ftp」のホームディレクトリを不特定多数の「Anonymos」でログインしたユーザーに公開するという設定です。/etc/passwdファイルを見てみると、ユーザーftpのホームディレクトリは/var/ftpです。つまり、標準設定では/var/ftpの中身がすべての人に公開されます。不特定多数の人にファイルを配布したいときは、このディレクトリにデータを入れておくといいでしょう。
もしほかのディレクトリを公開したいときは<Anonymous /var/ftp/data>のようにディレクトリ名を明示します。
詳細なログを記録する
FTPサーバーへのアクセスについて、詳細なログを記録するように設定しましょう。標準設定では/var/log/xferlogに記録が残されますが、/etc/proftpd.confに以下の設定を追加するとより詳細なログを残せます。追加する場所はどこでもかまいませんが、<×××>〜<×××>で囲まれた中は避けるようにします。
なお、あらかじめログを保存するための/var/log/proftpdディレクトリを作成しておきましょう。スーパーユーザーになって、「mkdir /var/log/proftpd」で作成します。
LogFormat allinfo "%t : %u (%a [%h]) : [%s], %T, %m (%f)" LogFormat write "%t : %u : %F (%a)" LogFormat read "%t : %u : %F (%a)" LogFormat auth "%t : %u (%a [%h])" ExtendedLog /var/log/proftpd/all.log ALL allinfo ExtendedLog /var/log/proftpd/write.log WRITE write ExtendedLog /var/log/proftpd/read.log READ read ExtendedLog /var/log/proftpd/auth.log AUTH auth
これ以外の設定
ほかにもProFTPdはさまざまな細かい設定が可能です。詳しくはProFTPdのウェブサイトを参照してください。インフォサイエンス社が日本語訳したウェブサイトです。