ftpd, wu-FTPD

 Solarisで、FTP Serverを構築しましょう。ここでは、広く利用されているwu-FTPDの導入リポートです。ただ、wu-FTPDはバグが多いとか、設定が面倒と言われています。簡単に済ませてしまいたい場合は、ProFTPDを導入した方が遥かに楽ちんです。

 手っ取り早く動作させる最低の準備事項をまとめてみました。wu-FTP入門です。面倒な設定を進めましょう。しかし、wu-FTPDの本体をインストールする前に、Solaris標準のftpdの設定をしなければなりません。設定手順はmanコマンドで見ることができます。

 % man -s 1m ftpd

以下では、ユーザーがログインしたホームディレクトリがルートになるように設定をします。よって、ホームディレクトリにlsコマンドなどがコピーされている必要があります。マニュアルには、それらをオートでコピーしてくれるスクリプト例が記載されていますので、抜き出しておきます。

 % man -s 1m ftpd > mkftpd

リダイレクトしたmkftpdファイルを編集します。以下を抜き出します。

 #!/bin/sh
 # script to setup anonymous ftp area
 #
 
 # verify you are root
 /usr/bin/id | grep -w 'uid=0' >/dev/null 2>&1
 if [ "$?" != "0" ]; then
 echo
 exit 1
 fi
  ・
  ・
  ・
 # uncomment the below if you want a place for people to store things,
 # but beware the security implications
 #if [ ! -d ${ftphome}/pub ]; then
 # mkdir -p ${ftphome}/pub
 #fi
 #chown root ${ftphome}/pub
 #chmod 1755 ${ftphome}/pub


ページ毎に記載されている以下の2行を削除します。

 SunOS 5.8 Last change: 8 Dec 1999 6
 Maintenance Commands in.ftpd(1M)


FTPを利用するにあたり、ftp用のコマンドを追加しておきます。

 # a list of all the commands that should be copied to ${ftphome}/usr/bin
 # /usr/bin/ls is needed at a minimum.
 ftpcmd="
 /usr/bin/ls
 /usr/bin/tar
 /usr/bin/compress
 /usr/bin/gzip
 "


最下行のコメント行を解除しておきます。/pub が公開ディレクトリとなります。

 # uncomment the below if you want a place for people to store things,
 # but beware the security implications

 if [ ! -d ${ftphome}/pub ]; then
  mkdir -p ${ftphome}/pub
 fi
 chown root ${ftphome}/pub
 chmod 1755 ${ftphome}/pub


スクリプトを保存したら、実行します。  保存したファイル

 % chmod +x mkftpd
 # ./mkftpd /export/home/ftp 
 Setting up anonymous ftp area /export/home/ftp


"ftp"という名前のユーザーを作成します。

 # useradd -d /export/home/ftp ftp


Solaris標準の設定は以上で完了です。ftpdは起動時から有効になっているので、そのまま他のマシンからログインできること、chrootされていること (ログインしたホームが"/"になっていること) を確認しておきます。


anonymous FTP


準備が整ったところで、wu-FTPDのソース
をダウンロードします。ミラーServer等に広く配布されています。本家からDLする場合は以下のアドレスから可能です。

 ftp://ftp.wu-ftpd.org/pub/wu-ftpd/

 wu-ftpd-2.6.2.tar.gz

インストール手順にコツはありません。スタンダードにインストールできます。なお、デフォルトで行うと、/usr/sbinにインストールされます。既に、Solaris標準FTPを利用している場合は、in.ftpd等をバックアップしておきます。

 % gzip -dc wu-ftpd-2.6.2.tar.gz | tar xvf -
 % cd wu-ftpd-2.6.2
 % ./configure
 % make
 # make install


/etc/ineted.conf を編集します。最初から存在するエントリをコメントアウトし、以下のように1行追加します。なお、オプションパラメータは必ず付けます。付けないと、後で編集する設定ファイルを参照してくれません。

  # ftp stream tcp6 nowait root /usr/sbin/in.ftpd in.ftpd
  ftp stream tcp nowait root /usr/sbin/in.ftpd in.ftpd -l -i -a -o

 -l  syslogによるログの作成を有効にする。
 -i  サーバーへのアップロードをxferlogに記録する。
 -o  サーバーからのダウンロードをxferlogに記録する。
 -a  ftpaccessの設定を有効にする。


公開する、/export/home/ftp内のpub以外のディレクトリはセキュリティー上、パーミッションを実行のみに変更しておきます。

 # chmod 111 /export/home/ftp/bin  等


デーモンを再起動させます。

 # pkill -HUP inetd


とりあえず、他のマシンから匿名にて接続し、ダウンロードや、pub以外のディレクトリにアクセス制限が掛かることを試します。なお、コンソールからlsコマンドを使うと"550 No files found."となります。既知のバグである報告があります。ls -al 等のようにオプションを付けて実行すれば正しく表示されます。


guest chrooted FTP


Solarisにアカウントを持ち、パスワードによってアクセスできる設定を行います。大まかな流れは、anonymousと同じです。まず、公開するディレクトリを作成します。最初に作成したスクリプトを実行します。ディレクトリ名は任意です。

 # ./mkftpd /export/home/member


作成されたディレクトリも同様にしてパーミッションを変更しておきます。なお、このままユーザーを作成しても、chrootされません。まず、FTP guestグループを作成します。グループ名は任意です。

 


ユーザーを作成する時、グループを指定しておきます。

 


/etc/ftpaccess を編集します。とりあえず、1行追加しておきます。グループ名はFTP guest用に作成したものです。

 guestgroup    ftproot


編集が完了したら、デーモンを再起動させます。

 # pkill -HUP inetd


他のマシンからログインし、chrootされている事を確認します。


ftpaccessファイル


ftpaccessファイルは以下のようにしています。用途に応じてアレンジします。

guestgroup   ftproot
class  all  real,guest,anonymous   *

limit all 10 Any /etc/msgs/msg.dead
loginfails  3

readme README* login
readme README* cwd=*

message /welcome.msg     login
message .message         cwd=*

log   commands  guest
log   security  guest
log   transfers real,guest,anonymous   inbound,outbound

shutdown /etc/shutmsg

email user@hostname


compress   yes all
tar        yes all
chmod      no real,guest,anonymous
delete     no guest,anonymous
overwrite  no guest,anonymous
rename     no guest,anonymous
umask      no anonymous


passwd-check rfc822 enforce

guestgroup
  
  chroot()によってルートディレクトリの変更を受けます。

loginfails

   
 3回ログインに失敗するとサーバーが接続を切ります。

log command guest
    guestユーザーのftpコマンドの記録を残します。

log security guest
    guestユーザーのセキュリティ違反の記録を残します。

log transfers real,guest,anonymous  inbound,outbound
    全てのユーザーのファイル転送(双方向)の記録を残します。

chmod
    全てのユーザーは、モード変更できない。

delete
overwrite
rename
    realユーザー以外は、〜を実行できない。

umask
    anonymousユーザーは、umaskを実行できない。

passwd-check
    (anonymousユーザーの場合)
    RFC822に基づくメールアドレスの正しい形ではない場合切断。


ftpusrs、ftphostファイルは、特に編集しませんでした。アクセスを禁止するユーザーや、ドメインを記載します。必要になったら追加しましょう。ftpconversionsファイルもそのままです。現在の環境では、圧縮、伸長の管理は必要ないでしょう。メッセージファイルも、誰も見ないと思います(今時はGUIだから)。


syslogの設定


wu-ftpdのログの設定を、/etc/syslog.conf に追加します。

 daemon.debug    /var/adm/ftplog


ファイルを作成します。

 # touch /var/adm/ftplog


syslogd に、-HUPを送信し、変更を再読み込みさせます。

 # kill -HUP `cat /etc/syslog.pid` 


コマンド等


現在接続しているユーザーの数を表示します。

 % ftpcount
 Service class all                              - 1 users ( 10 maximum)


現在接続しているユーザーの状態を取得します。

 % ftpwho
 Service class all:
 taro 470 0.0 0.9 2504 2096 ? S 16:51:51 0:00 ftpd: 192.168.1.70:
 taro: IDLE
 - 1 users ( 10 maximum)


ユーザー"taro"は、何もしていませんでした。


2002/04/17