无法使用 puretpd 列出大目录

无法使用 puretpd 列出大目录

我在 VPS (ovh) 上安装了 pureftpd。我可以列出一个小目录(我所说的小目录是指只有一些文件的目录),但如果我尝试列出一个包含数千个文件(包括目录)的大目录,我会收到来自 filezilla 客户端的“无法检索目录列表”错误消息当我单击“ps”目录时:

Command:    USER xxxxx
Response:   331 User xxxxx OK. Password required
Command:    PASS ************
Response:   230 OK. Current directory is /
Command:    OPTS UTF8 ON
Response:   200 OK, UTF-8 enabled
Status: Connected
Status: Retrieving directory listing...
Command:    CWD /ps
Response:   250 OK. Current directory is /ps
Command:    TYPE I
Response:   200 TYPE is now 8-bit binary
Command:    PASV
Response:   227 Entering Passive Mode (<my_vps_ip>,156,188)
Command:    MLSD
Response:   150 Accepted data connection
Response:   226-Options: -a -l 
Response:   226 33 matches total
Error:  Connection timed out
Error:  Failed to retrieve directory listing

从命令行我只是有一个永无止境的等待:

ftp> cd ps
250 OK. Current directory is /ps
ftp> ls
200 PORT command successful
150 Connecting to port 38359

我将此规则添加到 iptables 中,因为我读到它可以解决我的服务器上的问题:

root@vpsxxx:/var/www/html# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ftp-data ctstate RELATED,ESTABLISHED /* Allow ftp connections on port 20 */
ACCEPT     tcp  --  anywhere             anywhere             tcp spts:1024:65535 dpts:1024:65535 ctstate ESTABLISHED /* Allow passive inbound connections */

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ftp-data ctstate ESTABLISHED /* Allow ftp connections on port 20 */
ACCEPT     tcp  --  anywhere             anywhere             tcp spts:1024:65535 dpts:1024:65535 ctstate RELATED,ESTABLISHED /* Allow passive inbound connections */

我在 puretpd 中添加了被动模式的修复端口范围:

root@xxx:/var/www/html# cat /etc/pure-ftpd/conf/PassivePortRange
40110 40210
root@xxx:/var/www/html# 

这些是我试图列出的 ps 目录的权限:

drwxr-xr-x 25 root    root         4096 May  9 08:29 ps

这是我的客户端操作系统(Debian 8)上的 iptables:

-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT

看起来我所尝试的一切都是无用的,没有效果。我尝试使用wireshark分析流量,看起来我在FTP-DATA协议包中得到了目录列表的一部分,但随后出现了问题,但我不知道是什么......

刚刚注意到我在 proftpd 上遇到了同样的问题,我认为使用 puretpd 会更好,但没有:)

答案1

根据您的问题描述,包括您的评论,您的防火墙 ( iptables) 会阻止来自/到 TCP 端口 20 和 21 的连接。即使您使用被动 ftp(传入 21 显然已经打开),您也需要这些连接。

为了了解更多信息,请搜索日志中的防火墙块,例如

dmesg | grep -i firewall | tail -40

在您尝试下载该文件但失败后。

此外,AppArmor 或其他安全功能也可能会阻止您pureftpd提供这些文件的进程。所以,如果上面没有显示端口阻塞,可以通过解除阻塞来解决问题,还请查看您的日志文件(尝试ls -ltr /var/log对候选日志文件进行检查,除了dmesg不带 s 的输出grep)。

相关内容