还有一个有趣的问题。我的公司最近切换到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)显然是这种情况。
在此先感谢!