FTP サーバの設定
Last Modified: Tue Dec 27 00:06:02 JST 2011

目次

FTP の概要

FTP はファイル転送をサポートするインターネット・サービスのひとつだ。 多くのサービスがそうであるように、FTP もサーバ・クライアント・モデルに基づいて実装されている。 FTP クライアント(ftp コマンド)を使ってサーバに接続すると、ファイルシステムに自由にアクセスできるようになる。 サーバからファイルを取ってくるダウンロードや、ファイルを送り込むアップロードなどを行うことができる。

FTP サーバへのアクセスには、ユーザ FTP と anonymous FTP の2種類がある。 ユーザ FTP は、ホストにアカウントを持つ一般ユーザ向けのサービスで、 ホストにログインしたとき同様にファイルシステムにアクセスすることができ、 またアップロードやダウンロードも自由に行える (パーミッションさえあれば)。 anonymous FTP(匿名 FTP)は、ホストにアカウントがなくとも使える便利なサービスだ。 だがユーザ FTP と違ってパスワード認証がないため、パーミッションの代わりの制限を用意しなければならないし、きちんと対策を施さないと重大なセキュリティ問題を引き起こす。

wu-ftpd のインストール

FreeBSD には標準の FTP サーバが付いているが標準的な機能しか持っていないため、 別のものに入れ替えることが望ましい。 お勧めなのは wu-ftpd だ。 サポートサイトは WU-FTPD で、さまざまな情報がここに集められている。 現在のところ最新版は 2.6.0 だ。

インストール手順は次の通り。

  1. ソースの展開
      # tar zxf wu-ftpd-2.6.0.tar.gz
      # cd wu-ftpd-2.6.0
    
  2. コンパイル
    2.5.0 まではへんちくりんな build スクリプトを使っていたが、 2.6.0 からは configure ですっきりまとめられたようだ。
    そのまま使うと、なんと /usr/sbin とかにインストールされて気持悪いので、 --prefix を使って /usr/local にずらすほうがよい。
      # ./configure --prefix=/usr/local
      # make
    
  3. インストール
    'make install' で OK。
      # make install
    
    prefix を変更した場合、プログラム本体は /usr/local/sbin/in.ftpd となる。
  4. 設定ファイルのコピー
    build スクリプトはコピーしてくれないので、自分でコピーする。
      # cd doc/examples
      # cp ftpaccess ftpconversions ftpusers /usr/local/etc
    
    内容は、もちろん変更しなければならない。 ftpaccessftpconversions の項を参照すること。
  5. inetd.conf の変更
    ftp サービスのエントリを書き換える。
      ftp  stream  tcp  nowait  root  /usr/local/sbin/in.ftpd  in.ftpd -a
    
  6. inetd の再起動
    HUP する。
      # killall -HUP inetd
    

ftpaccess ファイル

ftpaccess は wu-ftpd の動作を決定するファイルだ。 デフォルトでは /usr/local/etc に置かれる。 まず、サンプルとして付いてくるファイルの内容を説明しよう。 これを参考にして、自分のサイトに合わせて変更を行えばよい。

これ以外に、次の設定を追加するとよい。

ftpconversions ファイル

ftpconversions ファイルも、ftpaccess 同様 /usr/local/etc に置かれる。 こちらのファイルでは tar や gzip などダウンロード時に利用できるアーカイブなどのファイル変換プログラムの設定を行う。

FreeBSD で使う場合、gzip や compress、tar のパスが異なっているので、それなりに変更する必要がある。 ファイルを編集して正しいパスにするか、パス名に合わせてプログラムをコピーするなどの対応をしておく。

guest グループ設定

guest と指定されたユーザ(またはグループ)は、アカウント・ユーザでありながら anonymous ユーザと同様にアクセス時にユーザのホームディレクトリに chroot される。 ホームディレクトリ以外のファイルシステムへのアクセスを禁止することができるわけだ。 guest 指定はユーザ名またはグループ名で行える。 ftpaccess ファイルに次の書式で設定する。

/etc/passwd の各ユーザのホームディレクトリのエントリを書き換えると、ftp アクセスしたときに chroot すべきディレクトリと、デフォルトで cd するべきディレクトリを指定することもできる。 エントリが「/usr/home/guest/./incoming」となっていると、「/usr/home/guest」に chroot され、incoming ディレクトリがログイン時のカレントディレクトリとなる。

guestgroup、guestuser と逆の働きをする realgroup、realuser というオプションもある。

guestuser *
realgroup admin

このように設定すると、admin グループ以外のすべてのユーザを guest とすることができる。

guest グループに入れられたユーザは、ftp アクセスしたとき /bin/ls が見えなくなってしまう。 このままだとディレクトリのリストが見られないので、ホームに /bin/ls をコピーしておかなければならない。

anonymous FTP サーバ

ユーザ名を anonymous としてサーバにアクセスすると、アカウントのパスワードではなくメールアドレスを尋ね、その上で匿名ユーザとしてログインを許すのが anonymous FTP サーバだ。 anonymous FTP は誰にでも使える便利なサーバだが、匿名性を隠れ蓑にイタズラを仕掛けられる可能性もあるので、むやみに許可するべきではない。 明確な理由や目的がない限り、設定しないようにすべきだ。

  1. ユーザ ftp の作成
    anonymous サーバを立てるには、ftp という名前のアカウントを作成する。 ftpd は anonymous を受け付けると、ユーザ ftp でログインを許可するのである。 ftp ユーザを作成するときは、一般ユーザと同様に作成してはいけない。 次の点に注意して、注意深く設定する。
  2. ftp ディレクトリの準備
    anonymous ディレクトリに、次のようなディレクトリとファイルを用意する。 特に注意すべきなのはオーナーシップとパーミッションだ。 うっかりアクセスをオープンにすると、ls コマンドをトロイの木馬に置き換えられたりする。 次のような指針を参考にしてほしい。
  3. アップロードを許可する場合
    アップロードを許可するのは、はっきりいって無謀としか言いようがないが、もしどうしてもやりたいなら、受付専用の incoming ディレクトリを作成する。 incoming のオーナーシップは root.wheel、パーミッションは 733 にしておく。 この場合、anonymous ユーザは incoming ディレクトリにファイルをアップロードすることはできるが、ファイルのリストを得ることはできない。 incoming にアップロードされたファイルは、管理者が pub のしかるべき場所へ移動して公開することになる。
    アップロードを許可する場合は、ftpaccess ファイルにも変更が必要だ。 具体的には upload オプションを使って、次のように設定する。
      upload /usr/local/share/ftp  *          no
      upload /usr/local/share/ftp  /incoming  yes   ftp ftp  0666
    
    yes 以降の引数は、アップロードされるファイルの uid、gid、パーミッションを示す。

[back to index]