サーバー構築 FTP サーバー編

この記事は約7分で読めます。
本記事は最終更新日より 1 年以上経過しております。
スポンサーリンク

現行の稼働ホストは ProFTPd を採用しているんだけど、接続時のもたつき感がなんともー
って感じで、次は他のでちと試してみました。
したらこれが良い感じで設定も楽。conf に書くオプションもドキュメントにくっついてきてるしね。


採用したのは vsftpd という代物。
CentOS やら結構いろいろなディストリで最初から入れることの出来る FTP サーバー。
64bit 版の CentOS を入れている場合、素直に RPM からインストールする事をオススメ。

ソースからのビルドだとちと手間がかかります。
ぶっちは x86_64 ということでもろ 64bit なので手間かかりました。

準備する物その 1
pam-devel と libcap-devel のパッケージ。

これは yum でさくっとインストールしてしまう。

# yum install pam-devel* libcap-devel*

適当かもしれないが、32bit 版のライブラリやらも入れておく。

準備する物その 2
vsftpd のソース。オフィシャルサイトからダウンロード
現時点でのバージョンは 2.07。

やったこと (RPM からインストールした人は無視して ok)
以下の様に適当な場所へダウンロードして展開してやり、ソースのあるディレクトリへ移動。

$ cd /var/tmp/source
$ wget ftp://vsftpd.beasts.org/users/cevans/vsftpd-2.0.7.tar.gz
(snip
$ tar xzvf vsftpd-2.0.7.tar.gz
$ cd vsftpd-2.0.7

自分のポリシーとして、ソースからビルドしたパッケージの設定ファイルは /usr/local/etc 以下に
起きたいのでソースを書き換える。

$ vi ./def.h

として
#define VSFTP_DEFAULT_CONFIG “/etc/vsftpd.conf”
という行を
#define VSFTP_DEFAULT_CONFIG “/usr/local/etc/vsftpd.conf”
に書き換える。
diff -u なんてした場合こんな感じ。

$ diff -u defs.h.bak defs.h
--- defs.h.bak  2008-11-02 21:45:35.000000000 +0900
+++ defs.h      2008-11-02 21:45:51.000000000 +0900
@@ -1,7 +1,7 @@
 #ifndef VSF_DEFS_H
 #define VSF_DEFS_H

-#define VSFTP_DEFAULT_CONFIG    "/etc/vsftpd.conf"
+#define VSFTP_DEFAULT_CONFIG    "/usr/local/etc/vsftpd.conf"

 #define VSFTP_COMMAND_FD        0

次に vsftpd のプロセスはスーパーデーモンである xinetd から起動させる。
(外部からの接続要求があった場合のみ起動する)
この設定っていうのかなー、一応ドキュメントに書いてあったからやっただけ。

$ vi ./builddef.h

として
#undef VSF_BUILD_TCPWRAPPERS

#define VSF_BUILD_TCPWRAPPERS
とする。

次が引っかかってなかなかビルド出来なかった依存ライブラリの問題。
これは vsftpd のチェックスクリプトがいけない書き方されてたからマイッタ。
64bit なので /lib64/ 以下から持ってくるんだけど参照してくれない。
しゃーないから無理矢理 /lib/ 以下に /lib64/ のライブラリをソフトリンク。

# su –
# mv /lib/libpam.so.0 /lib/libpam.so.0.bak
# ln -s /lib64/libpam.so.0 /lib/libpam.so.0
# mv /lib/libcap.so /lib/libcap.so.bak
# ln -s /lib64/libcap.so /lib/libcap.so
# logout
$

root なって該当ライブラリをバックアップしてからソフトリンクを張る。
終わったら一般ユーザーに戻る。

続いてビルドにはいる。

$ make
(snip
$ su
# make install
# logout
$

エラーが無ければ ok。

引き続き設定に入る。
というかもうあれ、設定した内容とその説明にしておいてみる。
以下 /usr/local/etc/vsdtpd.conf の設定箇所のみ抜粋。

# cat vsftpd.conf | grep -v ^#
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
vsftpd_log_file=/var/log/vsftpd.log
connect_from_port_20=NO
idle_session_timeout=600
data_connection_timeout=120
ascii_upload_enable=YES
ascii_download_enable=YES
ftpd_banner=Welcome to FTP service.
pam_service_name=ftp
chroot_local_user=YES
force_dot_files=YES
use_localtime=YES
text_userdb_names=YES
pasv_address=192.168.1.8
pasv_enable=YES
pasv_min_port=8030
pasv_max_port=8050

上から順に~
anonymous ユーザーの接続を拒否。
ローカルユーザーのみ接続可能とする。
書込許可。
ファイル書込時のユーザーマスク。(022 でマスクすると UP されたファイルのパーミッションは 644)
ローカルユーザーの接続を許可。
ディレクトリ変更メッセージをだす。
ログファイルの出力をする。
ログファイルのパスを指定する。
20 番ポートのデータ転送はしない。
無通信時間 10 分で強制切断。
データ転送要求から 2 分なんもなしで切断。
ASCII モードでのアップロードを許可。
ASCII モードでのダウンロードを許可。
ログイン時にクライアントへ送るメッセージ。
認証でつかうサービス名。
ローカルユーザーはホームディレクトリから出られないように。
先頭にドットが付くファイルを表示する。
ローカルタイムを使用する。(サーバーがある現地時間)
PASV モード使用時につかうサーバーの IP アドレス。
PASV モードを使用。
PASV モードで使うポートの最小値。
PASV モードで使うポートの最大値。

という具合。
更に設定を入れ込むつもりだけど、これが最低限の設定。

あとは起動時の設定だけど、自動で /etc/xinet.d/ 以下に vsfptd というのが
出来ているはずなのでこのままで ok。
xinetd が入ってなかったらこれもまた yum で入れておくこと。

# yum install xinet*_64

自分は入れてなかったのでこんな感じで。

ここまで来たらあとは iptable で TCP:21 と PASV モードで使うポートを開けてあげる。

-A RH-Firewall-1-INPUT -p tcp -m state –state NEW -m tcp –dport 21 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state –state NEW -m tcp –dport 8030:8050 -j ACCEPT

この 2 エントリー追加で ok。

で、xinetd と iptables を restart かけて Windows から FTP クライアントつかって
接続してみたり、ローカルから telnet localhost 21 なんて叩いてみてもいい。

ぶっちゃけ RPM のが楽です

スポンサーリンク

コメント

タイトルとURLをコピーしました