vsftpd によるFTPサーバ構築

目次


vsftpって?

FTPサービスを提供するソフトウェア。「vs」は Very Secure を意味しているらしい。

セットアップ手順


1. ダウンロード


wget ftp://vsftpd.beasts.org/users/cevans/vsftpd-2.0.6....

2. builddefs.h 編集


inetd や SSLを使う場合用に builddefs.h を編集して以下のようにします

 #define VSF_BUILD_TCPWRAPPERS

3. ftpユーザ作成


すでにいるので、軽く修正

sudo vipw

login shell /sbin/nologin
home directory /var/tmp

権限とかも修正

 sudo chown root:root /var/tmp ; sudo chmod og-w /var/tmp

4. make


make

makeするとエラーがでてきた。。

tcpwrap.c:15:20: error: tcpd.h: No such file or directory

パッケージを入れる

sudo aptitude install libwrap0-dev

またエラーがでてきた。。

sysutil.c: In function 'vsf_sysutil_wait_exited_normally':

どうもgccとかのバグらしい

直接ファイルを直す

/usr/include/sys/wait.h

46-47行目の変更

(変更前)
46 (extension ({ union { typeof(status) in; int i; } u; \
47 u.in = (status); u.i; }))

(変更後)
46 (extension (((union { typeof(status) in; int __i; }) \
47 { .in = (status) }).i))

~/src/vsftpd-2.0.6/sysutil.c

604 // return WIFEXITED(p_waitret->exit_status);
605 return WIFEXITED(((struct vsf_sysutil_wait_retval *)p_waitret)->exit_status);

615 // return WEXITSTATUS(p_waitret->exit_status);
616 return WEXITSTATUS(((struct vsf_sysutil_wait_retval *)p_waitret)->exit_status);

~/src/vsftpd-2.0.6/sysdeputil.c

158 //#include <linux/unistd.h> 159 #include <unistd.h>


162行目をコメントアウトし、164行目に追加

163 //_syscall2(int, capset, cap_user_header_t, header, const cap_user_data_t, data)
164 #define capset(head,data) syscall(__NR_capset,head,data)
165 /* Gross HACK to avoid warnings - linux headers overlap glibc headers */

で成功するはず

5. make install


installする前にディレクトリを作成する

sudo mkdir /usr/local/man/man5/ ; sudo mkdir /usr/local/man/man8/

# make install

6. 接続


ftp localhost

メモ


PORTモード接続


通常FTPの接続ではコマンドのやり取りを制御する接続とデータの転送を行う接続の2種類の接続が行われる。
制御の接続は21番ポート、データの接続は20番ポートで行われるのが一般的。
また制御の接続はクライアントからサーバへと接続要求がされるが、データの転送を行うときはサーバからクライアントへと接続要求がされる

接続用途 ポート 接続要求
コマンドの制御 21 クライアントからサーバ
データの転送 20 サーバからクライアント

PORT接続の場合、FTPクライアントがファイアーオール内にいてプライベートアドレスを利用している場合に、
NATの設定が正しくされていないとデータ接続時にFTPサーバがファイアーオール内のどのクライアントに接続してよいかが分からなくなる場合があります

PASVモード接続


PASV(パッシブ)モード接続では、PORT接続とは異なり、データ転送のためのセッションの開始がFTPクライアントから
行われるので、ファイアーオールの影響を受けずにFTPサービスの開始を行えます。
/etv/vsftpd.confに以下を追記します。
pasv_enable=YES
2008年07月13日(日) 21:51:48 Modified by monpoke




スマートフォン版で見る