微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux – 配置vsftpd匿名上传.创建文件但冻结为0字节

sudo apt-get install vsftpd之后的ubuntu上的vsftpd
然后按照附带的/etc/vsftpd.conf文件进行配置.
匿名ftp允许cd直接上传并允许
把myfile.txt放在服务器上创建但是然后
客户端挂起,永远不会继续.服务器上的文件
保持在0字节.

这是文件夹和权限:

root@support:/home/ftp# ls -ld .
drwxr-xr-x 3 root root 4096 Jun 22 00:00 .
root@support:/home/ftp# ls -ld pub
drwxr-xr-x 3 root root 4096 Jun 21 23:59 pub
root@support:/home/ftp# ls -ld pub/upload
drwxr-xr-x 2 ftp ftp 4096 Jun 22 00:06 pub/upload
root@support:/home/ftp#

这是vsftpd.conf文件

root@support:/home/ftp# grep -v '#' /etc/vsftpd.conf
listen=YES
anonymous_enable=YES
write_enable=YES
anon_upload_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
anon_root=/home/ftp/pub/
connect_from_port_20=YES
chown_uploads=YES
chown_username=ftp
nopriv_user=ftp
secure_chroot_dir=/var/run/vsftpd
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key

这是一个尝试上传文件示例:

root@support:/home/ftp/pub/upload# ls -l
total 0
-rw------- 1 ftp nogroup 0 Jun 22 00:06 build.out

这是尝试上传的客户端……此时它被冻结:

$ftp 173.203.89.78
Connected to 173.203.89.78.
220 (vsFTPd 2.0.6)
User (173.203.89.78:(none)): ftp
331 Please specify the password.
Password:
230 Login successful.
ftp> put build.out
200 PORT command successful. Consider using PASV.
553 Could not create file.
ftp> cd upload
250 Directory successfully changed.
ftp> put build.out
200 PORT command successful. Consider using PASV.
150 Ok to send data.

编辑:事实证明,ftp客户端可以在其他运行Linux的系统上运行.以上错误消息仅在使用命令行ftp的Windows 7主机上使用ftp时发生.

事实上,在同一台Windows 7机器上,如果将地址放入Windows资源管理器,它就可以工作.它可以复制和粘贴文件,它们会在服务器上正确上传.

所以这个问题只发生在Windows 7命令行ftp上.注意:我仔细检查了此计算机上的防火墙是否已完全禁用.

解决方法

看起来您正在尝试使用主动FTP,但服务器和客户端之间的防火墙阻止了数据通道. FTP事务由两个通道或连接组成:命令通道(在端口21上)和数据通道(通常与端口20相关联).客户端在命令通道上发出命令,而有效负载(文件内容和命令输出,如ls)在数据通道上.如果您的防火墙或路由器干扰了数据通道,您可以登录并且一切都会起作用,直到您尝试从服务器获取信息或从服务器发送信息 – 此时所有内容都会显示为挂起.服务器试图连接回客户端,但它无法这样做.

在活动模式下(认情况下,除非您发送PASV命令[并注意vsftpd建议您考虑使用PASV]),服务器会尝试打开与客户端的数据通道连接.这是正确的 – 服务器连接回客户端,并且连接到大于1023的端口.防火墙倾向于反对这一点,如果你在NAT之后,它根本无法工作.

这就是被动FTP的用武之地.通过被动FTP,服务器使用已建立的connamd通道告诉客户端用于数据通道的端口和IP地址,然后客户端打开第二个连接到数据通道的服务器.这解决了客户端在防火墙后面的问题.您需要做的就是在PUT之前从客户端发出PASV命令.如果这不起作用,那么你可能需要帮助vsftpd一点点.您可能需要的配置项包括pasv_min_port和pasv_max_port,它们允许您控制一系列端口vsftpd告诉客户端连接,因此您可以在防火墙中打开它们.此外,如果服务器没有侦听客户端连接到的相同IP地址(可能在NAT内),pasv_address告诉vsftp客户端实际想要连接的位置(它不会自动使用地址命令)频道开通).

原文地址:https://www.jb51.cc/linux/396323.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐