vsftpdの転送失敗とSFTPへの移行

  • 投稿日:
  • by
  • カテゴリ:
  • ハッシュタグ:

FFFTPからFileZillaに変えてからも、ファイルの転送に失敗することが多いです。

とりあえず、Webminから vsftpd を管理できるようにしてみます。
「Webmin」→「Webmin設定」から「Webminモジュール」のアイコンをクリックし、「サードパーティー製モジュール」のリストから、VSFTPD 1.3 をインストールします。

「サーバ」→「vsftpd」をクリックすると、エラー表示になりました。 どうやらパーミッションが適切ではないようで、

www# cd /usr/local/lib/webmin/vsftpd
www# chmod 755 *.cgi
www# chmod 755 *.pl

とやったらちゃんと表示されました。
「モジュール設定」をクリックして、「The path and filename to vsftpd.conf」の項目を /usr/local/etc/vsftpd.conf に変更します。 その下の MySQLなんちゃらは無視して、保存ボタンをクリックしました。
これで Webminから設定することができるようになりました。


転送の失敗は、ダウンロードで起こります。 FileZillaのメッセージを見ると、

応答: 550 Failed to open file.

とあります。
Webサーバーからダウンロードしたファイルを見てみると、ファイルサイズが0.00KBになっていました。

vsftpdのログを確認すると、

Sun Feb 14 11:09:31 2010 [pid 19773] [webadmin] FAIL DOWNLOAD: Client "192.168.0.3", "/usr/local/www/apache22/cgi-bin/MT5/mt-static/images/status_icons/draft.gif", 0.00Kbyte/sec

などと出ています。

「vsftpd 550 failed」でググってみたのですが、パッシブモードが原因では?みたいな記事もあったので、アクティブモードで接続するようにしてみました。

そうすると今度は、

コマンド: LIST
応答: 150 Here comes the directory listing.
応答: 522 SSL connection failed; session reuse required: see require_ssl_reuse option in vsftpd.conf man page
エラー: ディレクトリ一覧表示の取り出しに失敗しました

という表示が出るようになりました。
また調べてみると、

FreeBSDとかを気の赴くままに書くBlog vsftpdを2.1.0にしたらSSL接続でファイルの一覧が取得できなくなった

下のほうに大変参考になるコメントが書かれていた
必要な部分だけ引用
When compiling vsftpd there is a parameter "tunable_require_ssl_reuse" in tunables.c file, this should be turned to '0' if u do not want to enable this option. In vsftpd.conf there is a parameter as well "require_ssl_reuse" which is by default set to YES, this should also be set to NO to disable this.
 
えーと俺は英語読めないのであんまりよく分からんがとりあえず訳
2.1.0からtunables.cってファイルにおいてtunable_require_ssl_reuse(SSLを再利用する)が
デフォルトでYESになっているだからあなたが必要じゃないならvsftpd.confで
require_ssl_reuse=NOにしなさい 

という記事を見つけたので、vsftpd.conf に require_ssl_reuse=NO を書き足してみた。
んで、またダウンロードしてみると、

応答: 150 Opening ASCII mode data connection for ChangeLog (207724 bytes).
エラー: GnuTLS error -9: A TLS packet with unexpected length was received.
状態: サーバは TLS 接続を正しく終了しませんでした

と出た。
「GNUTLS vsftpd」でググると、FileZilla 3.2.6(GnuTLS 2.8.1)と vsftpd-2.1.2 で同じような事象が出ている記事を見つけたけど、既にこのバグは修正済みとある。
ウチは FileZilla 3.3.1(GnuTLS 2.8.3)と vsftpd-2.2.2 の組み合わせで、どちらも最新なんだけどな。


ここまでやって正直心が折れたので、FTPES接続は諦めてSFTPで接続することにしました。
既にSSHでTelnet接続できるようにしてあるので、FileZillaをSFTP接続に変更するだけで繋がります。 使い勝手も普通のFTPと全く同じです。

FTPESだと2,500ファイル送って50個以上の転送失敗でしたが、SFTPだとゼロです。
別のディレクトリを転送したら、31,000ファイル送って失敗したのは43個でした。 
でも失敗したのは、ファイル名に日本語(Shift_JIS)が使ってあったり、ファイル名が化けていたりしたものだけです。

日本語ファイル名のものは、FileZillaのサイトマネージャーにおいて「文字セット」を「カスタム文字セットを使う」にして、「エンコーディング」に「Shift_JIS」を指定したら、問題なく転送できました。
ファイル名が化けていたものは、以前にアップロードに失敗した残骸だったようなので、削除しました。
結局、転送できなかったファイルはゼロということになります。

というわけで、セキュアなファイル転送に関しては、SFTPがベストだなと確信した次第です。