vsftpdで文字化けが起こる場合の対処

これはレアケースにおける文字化け対策です。
特定のFTPクライアントではログイン直後に OPTS utf8 on というコマンドを実行します。
OPTS utf8 on というコマンドは文字コードをutf8に強制するコマンドです。
これが原因で日本語ファイルがうまく表示できない場合があります。
WindowsエクスプローラーでFTP接続とか、WindowsエクスプローラーでFTP接続とか。

この OPTS を無効化することで、文字化けを回避できる場合があります。
vsftpdでは、vsftpd.confに以下の行を追加することで、OPTS を無効化できます。

cmds_denied=OPTS


OPTS
を全部無効化にして大丈夫か不安だったのでutf8 on以外にどんなコマンドを受け付けるか確認してみました。
調べたソースはCentOS6に入っているvsftpd 2.2.2です。
OPTS等のコマンド判定は、postlogin.c にありました。

else if (str_equal_text(&p_sess->ftp_cmd_str, “OPTS”))
{
handle_opts(p_sess);
}


OPTS
のコマンドの場合は、opts.c内のhandle_opts()を呼んでいました。
opts.cの中身は以下の通りでした。

/*
* Part of Very Secure FTPd
* Licence: GPL v2
* Author: Chris Evans
* opts.c
*
* Routines to handle OPTS.
*/
#include “ftpcodes.h”
#include “ftpcmdio.h”
#include “session.h”
void handle_opts(struct vsf_session* p_sess)
{
str_upper(&p_sess->ftp_arg_str);
if (str_equal_text(&p_sess->ftp_arg_str, “UTF8 ON”))
{
vsf_cmdio_write(p_sess, FTP_OPTSOK, “Always in UTF8 mode.”);
}
else
{
vsf_cmdio_write(p_sess, FTP_BADOPTS, “Option not understood.”);
}
} }

 

utf8 on以外は無いようですので、問題なさそうです。

コメントを残す