Fedora Core 設定2−vsftp





0.vsftpについて

インターネットを経由してftpを行う為の設定です。
その為PASVモードを使いデータポートの範囲を指定しています。
サーバーはローカルアドレスのままで、ルーターから必要なポートのみ許可しています。
この為WAN側から見えるグローバルアドレスをvsftpdに教える必要があります。
またanonymous FTPは禁止しています。

1.確認事項等

vsftpdがインストールされているかチェック
# rpm -q vsftpd
vsftpd-2.0.1-5				<= バージョンの確認

vsftpdがインストールされていない時は
# yum install vsftpd

vsftpdのバージョンが古ければ (新しければ何も行われない)
# yum update vsftpd

注)yumの設定は/etc/yum.confを確認

2.vsftpdの起動/停止

状態確認
/etc/init.d/vsftpd status

起動
/etc/init.d/vsftpd start

停止
/etc/init.d/vsftpd stop

再起動
/etc/init.d/vsftpd restart

3.設定ファイル

ファイル:/etc/vsftpd/vsftpd.conf

listen=YES				<= xinitdからでなくvsftpdを独立したプロセスとして動かす場合指定
anonymous_enable=NO			<= anonymous FTPとしては使用しない
local_enable=YES			<= ローカルユーザーを許可する(Default)
local_umask=07				<= 受信ファイルに設定しないパーミッション(Default 077)
connect_from_port_20=NO			<= ftp-dataポートに20番を指定しない(pasv_〜でデータポートを指定する為)
xferlog_file=/var/log/vsftpd.log	<= ログファイルの位置(Default)
ftpd_banner=Welcome to My FTP service.	<= 接続時に表示される文字列。好きな文字列を設定

chroot_list_enable=YES			<= ユーザーのホームディレクトリ以外への移動を許可・禁止する機能を有効にする
chroot_list_file=/etc/vsftpd/chroot_list <= ディレクトリ移動を許可又は禁止するユーザーを記述するファイル
userlist_deny=YES			<= YES:上のリストにあるユーザーは自由なディレクトリ移動が許されます。
					   NO:上のリストにあるユーザーはログインディレクトリから出れません。

#log_ftp_protocol=YES			<= 送受信されるFTPコマンドを全て表示(Default:NO)
					   接続不良の時、解析に役立ちます。

dual_log_enable=YES			<= vsftpd.logに詳細なログを出力
					   NO又はコメント時は転送ファイルのログだけになる

syslog_enable=YES			<= 詳細なログを/var/log/messagesに出力
					   運用が安定して来たらNO又はコメントでOK

pasv_enable=YES				<= PASVモードを使用する(Default:YES)。
pasv_address=123.234.123.234		<= WAN側のアドレスを記述。ホスト名等は不可。
listen_port=20000			<= コマンドポートを指定
pasv_min_port=20000			<= データポート最小(この値+1から使われる)
pasv_max_port=20005			<= データポート最大

4.PASVモードについて

通常FTPはクライアントからサーバーへコマンドポート21番でconnectした後、
サーバーからクライアントにランダムに選んだデータポートでconnectしようとします。
WAN経由だとクライアント側にFirewallがあるでしょうから、connectに失敗します。
そこで、PASVモードを使うわけです。

PASVモードではクライアントから接続してきたコマンドポートを使ってデータ通信に使うアドレスとポートをサーバーが指示し、
その値に基づいたデータポートでクライアントからサーバーへ connect しに行きます。
この時送られるアドレスが pasv_address に記述されたものになります。
ポートは pasv_min_port から pasv_max_port までがランダムに選択されます。

pasv_address が記述されていないとサーバーの実アドレス(例えばローカルアドレス)が
送られるので、ルーターで forwarding している時等は必須です。
Dynamic DNS 等を利用している場合はこれを自動で変える方法を用意しましょう。

また、ルーターでこれらのポートが vsftp サーバーに送られるよう設定する必要があります。

5.chroot_list と時間表示

ファイル:/etc/vsftpd/chroot_list or /etc/vsftpd.chroot_list

chroot_list 機能を使うと、ftpユーザーのディレクトリ移動を制限することが出来ます。
今回の設定では chroot_list に記述したユーザーは/ディレクトリからの移動が可能ですが、
他のユーザーはルートディレクトリが /home/~各ユーザー名 になるので、ここから出ることは出来ません。

この時注意すべきなのは /etc/localtime の問題です。
制限されたユーザーのプロセスからは /etc/localtime が見えない為、ファイルの日付や
ログの表示がGMT(世界標準時)になってしまうのです。
そこで、各ユーザーのディレクトリに cp /etc/localtime ~/etc して
~/etc/localtime を作っておくことにより回避しました。

(独り言:core 1 + vsftpd 1.x の時はこの症状はなかったと思う。
  本当は chroot () する前に tzset() すればいいような気がするけど…)

6.起動・確認コマンドなど

vsftpdを起動して
# /etc/init.d/vsftpd start

動いているか確認
# /etc/init.d/vsftpd status

指定のポートで vsftpd が listen しているかチェック
# netstat -p -l

7.自動起動の設定

現在のrunlevelの確認
# runlevel
N 3					<= 3:Multi User CUI mode 5:Multi User GUI(X11) mode

自動起動が設定されているか確認
# chkconfig --list vsftpd
vsftpd             0:off   1:off   2:off   3:off   4:off   5:off   6:off

Linuxを起動した時に vsftpd が自動的に立ち上がるように設定する。
# chkconfig --level 35 vsftpd on
# chkconfig --list vsftpd
vsftpd             0:off   1:off   2:off   3:on    4:off   5:on    6:off

8.おまけ・vsftpdをソースからコンパイル

デフォルトで rpmbuild は入っていないので、インストールしておきます。
# yum install rpmbuild

次のディレクトリを作成しておきます。
/etc/src/redhat/BUILD
                SOURCES
		SPECS

vsftpd の場合 vsftpd-2.0.1-5.src.rpm を任意のディレクトリにダウンロードします。

次のコマンドで上で作っておいたディレクトリに必要なファイルが展開されます。
# rpm -ivh vsftpd-2.0.1-5.src.rpm 

/etc/src/redhat/SPECS に移動し vsftpd.spec があるのを確認し
# rpmbuild -bc vsftpd.spec

-bc ではソースが展開されパッチが適用されコンパイルまで行われます(インストールはしません)。
(コンパイル時必要なライブラリーがなかったりするので、探して yum 等でインストールします)

ソースは /etc/src/redhat/BUILD/vsftpd-2.0.1 の下に展開されています。
コンパイルだけ行う場合は rpmbuild -bc --short-circuit vsftpd.spec を使います。