個人的なブログ Just a personal blog.

2019 年 9 月 12 日

vsftpdのデフォルト設定ではアスキーモードを受け付けない!!

Filed under: 未分類 — atushi @ 4:03 PM

表題の通り。
vftpd.conf では以下のようになっている。

# By default the server will pretend to allow ASCII mode but in fact ignore
# the request. Turn on the below options to have the server actually do ASCII
# mangling on files when in ASCII mode. The vsftpd.conf(5) man page explains
# the behaviour when these options are disabled.
# Beware that on some FTP servers, ASCII support allows a denial of service
# attack (DoS) via the command “SIZE /big/file” in ASCII mode. vsftpd
# predicted this attack and has always been safe, reporting the size of the
# raw file.
# ASCII mangling is a horrible feature of the protocol.
#ascii_upload_enable=YES
#ascii_download_enable=YES
#
デフォルトのコメントアウト状態では拒否。
デフォルトで受け付けない理由はコメントにある通りでDoS攻撃対策。
ソースは初めからUTF8(LF)で書けということらしい、確かにその考えは正しいと思う。

ところが日本では同じページをガラケーや㍶でも見るわけで、Shift_JIS の perl でも実行できる環境が求められる。
そういうわけで perl 5.8以降はshift_JISで書かれたcgiでも実行可能になっている。

結果、おかしい状態が出来上がる。

perl で書かれた CGI がアスキーモードで転送しても(実際には上記の設定でアスキーモードは無効)インターナルサーバーエラーで実行不能になる。
確認作業
nkf –guess /ver/www/cgi-bin/test.cgi
Shift_JIS (CRLF)

????あれ?

アスキーモードなら文字コードはそのままでも改行コードは (LF) になるはずなんだけど…。

ブラウザからアクセスすると 500エラー
httpdのエラーログには
AH01215: (8)Exec format error: exec of ‘/ver/www/cgi-bin/test.cgi’ failed
End of script output before headers: test.cgi
と表示される。

上記コメントアウトを外してvsftpdをリスタートさせると
nkf –guess /ver/www/cgi-bin/test.cgi
Shift_JIS (LF)

ブラウザからアクセスするとちゃんと表示されました。

Powered by WordPress