別の興味深い問題があります。私の会社は最近、FTP と SFTP のニーズを処理するために ProFTP に切り替えました。主に RHEL 5 サーバーを実行しています。ユーザーは問題なくログインし、ファイルを転送できます (ほとんどの場合:-P)。
ただし、ファイル転送操作を実行した後、(FTP セッションで) 個々のファイルをリストする必要があるクライアントの 1 つで、奇妙な問題が発生しました。ディレクトリ全体を「ls」で問題なく一覧表示できますが、正確なファイル名 (および/またはワイルドカード) を使用すると、一覧表示に失敗します。
ncftp を使用して Windows ワークステーションで問題を再現できましたが、Linux ワークステーションでは再現できませんでした。両方のクライアントのデバッグをオンにし、サーバー側で完全な FTP コマンド ログを有効にした後、Linux FTP クライアントが LIST コマンドを使用しているのに対し、ncftp は MSLD コマンドを使用していることを発見しました。
Linux クライアント:
ftp> debug
Debugging on (debug=1).
ftp> ls file.txt
ftp: setsockopt (ignored): Permission denied
---> PASV
227 Entering passive mode (X.X.X.X).
---> LIST file.txt
150 Opening ASCII mode data connection for file list
-rw-r--r-- 1 0 root 9318400 Aug 28 07:29 file.txt
226 Transfer complete
ncftp (Windows) クライアント:
ncftp / > debug
ncftp / > ls file.txt
> ls file.txt
Cmd: PASV
227: Entering passive mode (X.X.X.X).
Cmd: MLSD file.txt
550: 'file.txt is not a directory
List failed.
これまでに収集できたものから、MLSD と MLST は従来の FTP LIST コマンドの拡張バージョンです。しかし、個々のファイルを一覧表示する場合、クライアントは MLSD コマンドではなく MLST コマンドをサーバーに発行するべきではありませんか? これまでに読んだ内容からディレクトリ全体を一覧表示するには、MLSD を使用する必要があります。
また、デバッグ モード (ncftp を含む) の複数のクライアントを使用して古い FTP サーバー (VSFTP を実行) に接続し、すべてに対して古い LIST コマンドを使用してそれらがすべてであることを確認し、完全に機能しました。これがサーバー側で強制されたからなのか、それとも偶然なのか、私にはわかりません。
また、MLSD/MLST が機能するには mod_facts を有効にする必要があることも読みました。私のproftpdバージョンがそれをサポートしていること、およびサーバーで有効になっていることを確認しました:
[root@server ~]# proftpd -v
ProFTPD Version 1.3.5
From proftpd.conf:
# Adding support for extended FTP listing commands (e.g. MLST, MLSD, etc)
LoadModule mod_facts.c
<IfModule mod_facts.c>
FactsAdvertise off
</IfModule>
また、FactsAdvertise のオフとオフを切り替えて、サービスをリロードしようとしましたが、ncftp クライアントはまだ個々のファイルの MLSD を実行したいと考えています!
したがって、私の2つの基本的な質問は次のとおりです。
- proftpd を MLSD/MLST コマンドでうまく動作させるにはどうすればよいですか? また、それが面倒な場合は. .
- 従来の LIST コマンドを使用するように、ProFTP サーバーに接続する FTP クライアントを強制するにはどうすればよいですか。これは、古い FTP サービス (VSFTP) の場合と同様です。
前もって感謝します!