ProFTPd支持MLST和MLSD命令

时间:2014-08-28 23:51:32

标签: linux ftp rhel proftpd

有另一个有趣的问题。我公司最近切换到ProFTP来处理它的FTP和SFTP需求。我们主要运行RHEL 5服务器。我们的用户能够无问题地登录和传输文件(无论如何大多数情况下:-P)。

但是我们的一个客户需要在执行文件传输操作后列出单个文件(在他们的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列出我到目前为止所阅读的整个目录。

我还连接到我们的旧FTP服务器(运行VSFTP)与多个客户端在调试模式(包括ncftp),并确认他们是所有使用旧的LIST命令的一切,它完美地工作。无论是因为它是在服务器端执行,还是巧合,我都不知道。

我还读到需要启用mod_facts才能使MLSD / MLST正常工作。我已经确认我的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客户端STILL想要对单个文件进行MLSD!

所以我的两个基本问题是:

  • 如何让proftpd与MLSD / MLST命令一起玩得很好,如果 这太麻烦了。
  • 如何强制连接到ProFTP服务器的FTP客户端使用 传统的LIST命令,就像我们的情况一样 旧的FTP服务(VSFTP)。

提前致谢!

2 个答案:

答案 0 :(得分:0)

还有其他报道称ncftp(1)没有正确实施MLSD。具体来说,根据RFC规范,MLSD命令只应用于目录,而不是文件。其次,&#34; FactsAdvertise off&#34;告诉mod_facts不包括&#34; MLSD&#34;在FEAT响应中;符合客户端应该使用FEAT响应来确定服务器是否确实处理MLSD / MLST命令。 ncftp(1)似乎忽略了FEAT在这方面的反应。

鉴于您的mod_facts模块是一个共享模块,那么您需要做的就是省略&#34; LoadModule mod_facts.c&#34;来自proftpd.conf的模块。然后proftpd将不支持MLSD / MLST,并且ncftp(1)将回退到使用LIST。

希望这有帮助!

答案 1 :(得分:0)

道歉,我忘记了我还是打开了。我们在ProFTP上找到了一个解决方案:

https://forums.proftpd.org/smf/index.php?topic=11604.0