wu-ftpdによるanonymous FTPサーバーの構築 |
最終更新:
ネットワークに接続されたFreeBSDマシンに、wu-ftpdというソフトをインストールすることによって簡単に高機能なanonymous FTPサーバーを構築することができます。
以下の作業はroot権限で行います。
FreeBSDの場合、portsにwu-ftpdがありますのでこれでインストールします。
#cd /usr/ports/net/wu-ftpd #make ; make install
この原稿執筆時のportsによるwu-ftpdのバージョンはwu-ftpd-2.4.2b16です。
ここでは仮にanonymous FTP用のディレクトリを/home/ftp、ftpのユーザーIDを100とします。
#vipw ・ ftp:*:100:::0:0:anonymous:/home/ftp:/nonexistent ・
ついでにファイルをアップロードする人のためのグループを作成しておくと良いでしょう。
#vi group ・ ftp-admin:*:1003:root,rin,hiroki ・
#cd /home #mkdir ftp
作成したディレクトリはモード変更して書き込み不可にします。
#chmod 555 ftp
更に必要なディレクトリを作成します。
#cd /home/ftp #mkdir -p usr/bin #mkdir pub #mkdir etc
ここでは、ファイルの固め送りに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
別に/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は消去して構いません。
オリジナルの/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:
これも最低限必要な情報のみに限定すべきです。
必ずしも必要ではないのですが、etc/の下にメッセージファイルを置くと起動の際に読み込まれます。
welcome.msg | anonymousでログインに成功したときに読み込まれる。 |
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
#chown root.ftp-admin pub #chmod 775 pub
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
次に、設定ファイルftpaccessとftpconversionsを編集します。
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
inetdからwu-ftpdが起動されるように、inetd.confを書き換えます。
#vi /etc/inetd.conf ・ ftp stream tcp nowait root /usr/local/libexec/ftpd ftpd -al ・気をつけなければならないのは、最後の -alオプションです。
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` #
anonymousでftpにログインし、動作確認をして下さい。
COPYRIGHT 1999 Hiroki Hayashi ALL RIGHTS RESERVED.