[Powered by FreeBSD]

wu-ftpdによるanonymous FTPサーバーの構築

最終更新:


ネットワークに接続されたFreeBSDマシンに、wu-ftpdというソフトをインストールすることによって簡単に高機能なanonymous FTPサーバーを構築することができます。

wu-ftpdの主な特徴


anonymous FTP サーバーの構築

以下の作業はroot権限で行います。


(1)wu-ftpdのインストール

FreeBSDの場合、portsにwu-ftpdがありますのでこれでインストールします。

  #cd /usr/ports/net/wu-ftpd
  #make ; make install

この原稿執筆時のportsによるwu-ftpdのバージョンはwu-ftpd-2.4.2b16です。


(2)ftpというユーザーをつくる

ここでは仮にanonymous FTP用のディレクトリを/home/ftp、ftpのユーザーIDを100とします。

  #vipw
  ・
  ftp:*:100:::0:0:anonymous:/home/ftp:/nonexistent
  ・

ついでにファイルをアップロードする人のためのグループを作成しておくと良いでしょう。

  #vi group
  ・
  ftp-admin:*:1003:root,rin,hiroki
  ・

(3)anonymous FTP用のディレクトリを作成します。

  #cd /home
  #mkdir ftp

作成したディレクトリはモード変更して書き込み不可にします。

  #chmod 555 ftp

更に必要なディレクトリを作成します。

  #cd /home/ftp
  #mkdir -p usr/bin
  #mkdir pub
  #mkdir etc

(3)-1 anonymous FTPに必要な実行ファイル類をコピーします。

ここでは、ファイルの固め送りにtarとgzip, compress,uncompressを使う事を前提とします。

  #cd /home/ftp/usr/bin
  #cp /usr/bin/tar /usr/bin/gzip /usr/bin/compress /usr/bin/uncompress ./

実行ファイル類はモード変更して実行のみ可能にします。

  #chmod 111 *

さらにこのディレクトリをモード変更して書き込み不可にします。

  #chmod 555 /home/ftp/usr/bin
  #chmod 555 /home/ftp/usr

そしてftp/binからftp/usr/binへシンボリックリンクを張ります。

  #ln -s /home/ftp/usr/bin /home/ftp

(3)-2 anonymous FTPに必要な設定ファイル類をetc/に作成します。

(3)-2-1 パスワード・データベースファイルの作成

別に/etc/passwdまたは/etc/pwd.dbをそのままコピーしても動くのですが、セキュリティ上問題があります。anonymous FTPに最低限必要な情報だけに限定させたpwd.dbを別に作成すべきです。

オリジナルの/etc/master.passwdをもとにして作成します。

  #cp /etc/master.passwd /home/ftp/etc/ftp.passwd
  #cd /home/ftp/etc
  #vi ftp.passwd
  root:*:0:0::0:0:System Administrator:/root:/nonexistent              
  daemon:*:1:1::0:0:Owner of many system processes:/root:/nonexistent
  operator:*:2:20::0:0:System &:/usr/guest/operator:/nonexistent
  bin:*:3:7::0:0:Binaries Commands and Source,,,:/:/nonexistent
  news:*:8:8::0:0:News Subsystem:/:/nonexistent
  man:*:9:9::0:0:Mister Man Pages:/usr/share/man:/nonexistent
  ftp:*:1003:::0:0:anonymous:/home/ftp:/nonexistent
  hiroki:*:10044:10000::0:0::/home/hiroki:/nonexistent
  rin:*:10056:10000::0:0::/home/rin:/nonexistent
  nobody:*:65534:65534::0:0:Unprivileged user:/nonexistent:/nonexistent

パスワードフィールドは全部で構いません。シェルも特に指定する必要はありません。

最低限の情報のみに限定すべきです。

作成したら、pwd.dbファイルに変換します。

  #pwd_mkdb -d /home/ftp/etc/ ftp.passwd

pwd.dbファイルが生成したら、spwd.dbおよびftp.passwdは消去して構いません。

(3)-2-2 グループファイルの作成

オリジナルの/etc/groupをもとにして作成します。

  #cp /etc/group /home/ftp/etc/
  #cd /home/ftp/etc/
  #vi group
  wheel:*:0:
  daemon:*:1:
  tty:*:4:
  mail:*:6:
  bin:*:7:
  news:*:8:
  man:*:9:
  staff:*:20:
  guest:*:31:
  ftp-admin:*:1003:
  user:*:10000:
  nogroup:*:65533:
  nobody:*:65534:

これも最低限必要な情報のみに限定すべきです。

(3)-2-3 メッセージ類の作成

必ずしも必要ではないのですが、etc/の下にメッセージファイルを置くと起動の際に読み込まれます。

welcome.msganonymousでログインに成功したときに読み込まれる。
msg.dead同じく、アクセス数超過などでログインに失敗したときに読み込まれる

以下に、ftp.dges.tohoku.ac.jpでのwelcome.msgおよびmsg.deadの例を示します。

welcome.msgの例

  #vi welcome.msg
  * Welcome to DGES archive server! 
  
  If you have any request for this server, please don't 
  hesitate to write to ftp-admin@dges.tohoku.ac.jp!
  
  * There are some extensions to the FTP server such that if you
  specify a filename (when using a RETRIEVE command) such that:
  
  True Filename Specified Filename  Action
  ------------- ------------------- ---------------------------------------
  .Z            Uncompress file before transmitting
  .gz           Gunzip file before transmitting
      .Z        Compress  before transmitting
      .gz       Gzip  before transmitting
      .tar      Tar  before transmitting
      .tar.Z    Tar and compress  before
                                    transmitting
      .tar.gz   Tar and gzip  before
                                    transmitting
     .tar.Z   Tar and compress  before
                                    transmitting
     .tar.gz  Tar and gzip  before 
                                    transmitting
  ==========================================================================

msg.deadの例

  #vi msg.dead
  TOO BUSY! TRY AGAIN LATER,PLEASE!

用意した設定ファイル類全体をモード変更して、書き込み不可にします。

  #cd /home/ftp
  #chmod -R 444 etc

(3)-3 最後に、pubディレクトリのモードを変更し、グループftp-adminのみ書き込み可にします。

  #chown root.ftp-admin pub
  #chmod 775 pub

(4)wu-ftpdの設定

wu-ftpdをインストールすると、/usr/local/etc/の下にwu-ftpd用の設定ファイル見本がインストールされます。これをコピーして使用します。

  #cd /usr/local/etc
  #cp /etc/ftpusers.example /etc/ftpusers.org
  #cp ftpusers /etc/
  #cp ftpaccess.example ftpaccess
  #cp ftpconversions.example ftpconversions

次に、設定ファイルftpaccessftpconversionsを編集します。

ftpaccessの例

  #vi ftpaccess
  loginfails 2             <---2回ログインに失敗したら接続を切断。
  class   all   real,guest,anonymous  *  <--クラス宣言。

  limit   all   20   Any              /etc/msg.dead <--アクセス数20を上限とする。上回った場合、msg.deadを表示して接続を切断。

  readme  README*    login
  readme  README*    cwd=*
   
  message /etc/welcome.msg            login  <-- 歓迎メッセージの場所とファイル名を指定
  message .message                cwd=*
  
  compress        yes             all    <--固め送りを許可
  tar             yes             all     <--まとめ送りを許可

  passwd-check rfc822 enforce       <--anonymousによるログインの時、パスワードがメイルアドレスの文法と照合しているかどうか確認。照合していない場合、接続を切断。

  log commands real
  log transfers anonymous,real inbound,outbound

  delete  no      guest,anonymous
  overwrite       no      guest,anonymous
  rename  no      guest,anonymous  <--以下、anonymousやguestはファイルの書き込みや上書きなどができない。
  chmod   no      guest,anonymous
  umask   no      anonymous   

  email ftp-admin@ftp.dges.tohoku.ac.jp  <--管理者用メイルアドレス。/etc/aliases等で設定しておきましょう。

ftpconversionsの例

  #vi ftpconversions
   :.Z:  :  :/usr/bin/gzip -d -c %s:T_REG|T_ASCII:O_UNCOMPRESS:UNCOMPRESS  <--以下、デフォルトではgzipやcompress,tarのディレクトリが/bin/になっているので修正。
   :   : :.Z:/usr/bin/compress -c %s:T_REG:O_COMPRESS:COMPRESS
   :.gz: :  :/usr/bin/gzip -cd %s:T_REG|T_ASCII:O_UNCOMPRESS:GUNZIP
   :   : :.gz:/usr/bin/gzip -9 -c %s:T_REG:O_COMPRESS:GZIP
   :   : :.tar:/usr/bin/tar -c -f - %s:T_REG|T_DIR:O_TAR:TAR
   :   : :.tar.Z:/usr/bin/tar -c -Z -f - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+COMPRESS
   :   : :.tar.gz:/usr/bin/tar -c -z -f - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+GZIP

(5)wu-ftpdの起動

inetdからwu-ftpdが起動されるように、inetd.confを書き換えます。

  #vi /etc/inetd.conf
  ・
  ftp     stream  tcp     nowait  root    /usr/local/libexec/ftpd ftpd -al
  ・
気をつけなければならないのは、最後の -alオプションです。
aオプションがないと、ftpaccess、ftpconversionsの設定内容が反映されません。

TCP wrapperを使用している場合

今はほとんどのサーバーがTCP wrapperを導入していると思いますが、tcpdによってftpdのアクセス制限をする場合は、inetd.confの記述は以下の様になります。

・
ftp     stream  tcp     nowait  root    /usr/local/libexec/tcpd /usr/local/libexec/ftpd -al
・

最後に、inetdを再起動します。

  #kill -HUP `cat /var/run/inetd.pid`
  #

(6)確認

anonymousでftpにログインし、動作確認をして下さい。


前ページに戻る


COPYRIGHT 1999 Hiroki Hayashi ALL RIGHTS RESERVED.