還有一個有趣的問題。我的公司最近切換到ProFTP來處理它的FTP和SFTP需求。我們主要運行RHEL 5服務器。我們的用戶可以登錄並傳輸文件而不會有任何問題(無論如何,大部分都是:-P)。ProFTPd支持MLST和MLSD命令
然而,我們的一個客戶需要在執行文件傳輸操作後列出一個單獨的文件(在他們的FTP會話中),這成爲一個奇怪的問題。他們能夠使用'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命令。但是,當列出單個文件時,客戶端不應該向服務器發出MLST命令而不是MLSD命令? MLSD應該用來列出目前爲止我讀過的所有目錄。
我還以調試模式(包括ncftp)連接到我們的舊FTP服務器(運行VSFTP)與多個客戶端,並確認他們都使用舊的LIST命令的一切,它的工作完美。無論是因爲它是在服務器端執行還是巧合,我都不知道。
我也讀過mod_facts需要啓用MLSD/MLST工作。我已經證實了我的proftpd的版本支持它,而且它在服務器上啓用:
[[email protected] ~]# 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的STILL想要做個人檔案的MLSD!
所以我的兩個基本問題是:
- 我怎樣才能得到的proftpd發揮好與MLSD/MLST命令,如果 這是太多的麻煩。 。
- 如何強制連接到ProFTP服務器的FTP客戶端使用 傳統的LIST命令,如我們的 舊的FTP服務(VSFTP)顯然是這種情況。
在此先感謝!