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