标题:阿里云FTP配置老卡住?多半是ECS端口和被动模式没设好
很多人第一次在阿里云上配FTP,服务装好了却连不上;或者能登录,一到列目录或上传就停住。这类问题多数出在ECS的安全组和被动模式端口上。下面以一台CentOS系统的ECS为例,把阿里云FTP配置从装服务到测试连接走一遍,顺带说明几处容易漏掉的地方。

先确定谁上传、传到哪里
动手前先想清楚三件事:谁来传,传到哪个目录,用什么方式连。比如一个做服装电商的小团队,设计师每天把商品图传到服务器,网站程序直接读取。这种场景只需要一个专门的上传账号,权限限制在图片目录里,碰不到系统文件。后面的配置都按这个需求来写,你可以对照自己的情况调整目录和账号。
安装vsftpd
vsftpd是Linux上常用的FTP服务端,配置项直观,出了问题也好查。通过SSH登录ECS后执行:
yum install -y vsftpd
systemctl enable vsftpd
systemctl start vsftpd
systemctl status vsftpd
Ubuntu系统把yum换成apt,其余命令一样。
创建专用上传账号
不要用root或系统默认账号做FTP登录。新建一个只负责上传的用户,主目录指向网站图片目录:
mkdir -p /data/ftp/shop
useradd -d /data/ftp/shop -s /sbin/nologin shop_upload
passwd shop_upload
chown -R shop_upload:shop_upload /data/ftp/shop
/sbin/nologin作为登录shell,禁止该用户通过SSH登录服务器,只保留FTP访问,风险小很多。有些系统里vsftpd会因为shell不在/etc/shells中而拒绝登录,遇到这种报错,把/sbin/nologin追加到/etc/shells末尾即可。
修改vsftpd配置
编辑/etc/vsftpd/vsftpd.conf,主要改动如下:
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
chroot_local_user=YES
allow_writeable_chroot=YES
pasv_enable=YES
pasv_min_port=40000
pasv_max_port=40100
pasv_address=你的ECS公网IP
anonymous_enable=NO关掉匿名登录,陌生人连不上来。chroot_local_user=YES把用户锁在自己的主目录里,看不到其他路径。pasv_address是最容易被忽略的一项。阿里云ECS的公网IP由NAT映射,服务器自己看到的只是私网地址。如果不指定公网IP,被动模式下客户端拿到的就是私网地址,数据连接会直接失败。把这里换成ECS实际的公网地址即可。
改完后重启:systemctl restart vsftpd。
放行端口:安全组和系统防火墙都要开
这是阿里云FTP配置里常见的坑。除了控制端口21,被动模式还需要一段数据端口,也就是上面设置的40000到40100。两层都要放行,少开一层就会出现“能登录、传不了”的情况。
阿里云安全组
登录ECS控制台,进入“网络与安全”下的“安全组”,找到实例绑定的安全组,添加入方向规则:
- 协议TCP,端口21,授权对象先填自己办公网的出口IP,测试通过后再决定是否保留固定IP
- 协议TCP,端口范围40000/40100,授权对象同上
只开了21的话,登录通常能成功,但执行列目录或上传时会卡住。如果你遇到的正是这个现象,先回头检查安全组。
系统防火墙
firewall-cmd --permanent --add-port=21/tcp
firewall-cmd --permanent --add-port=40000-40100/tcp
firewall-cmd --reload
系统开启了SELinux的话,还要允许FTP访问用户目录:setsebool -P ftpd_full_access on。Ubuntu上改用ufw allow 21/tcp和ufw allow 40000:40100/tcp。
测试连接
用FileZilla之类的客户端测试:主机填ECS公网IP,协议选FTP,端口21,登录方式选“普通”,用户名和密码填刚才创建的账号。连上后在站点设置里确认使用被动模式(PASV)。上传一张测试图,能在服务器的/data/ftp/shop下看到文件,基本就通了。
想快速验证数据通道,可以在命令行执行ftp 公网IP,登录后输入ls。能正常列出目录,说明被动模式的数据连接是通的。如果这一步卡住,就回到安全组和防火墙那两处看。
安全提醒
普通FTP以明文传输账号和密码,走公共网络时可能被截获。如果上传的内容比较敏感,可以在vsftpd里配置SSL证书并开启ssl_enable,改用FTPS;或者直接用SFTP,它基于SSH,只需开放22端口。另外,授权对象尽量限定为固定IP,不要长期对所有地址开放21端口,否则很快会被扫描和暴力破解的请求淹没。
小结
阿里云FTP配置本身不复杂,卡住的地方通常是三处:pasv_address没填公网IP,安全组漏开被动端口,系统防火墙或SELinux没放行。按这个顺序逐项排查,大多能找到问题。如果只是稳定上传图片,vsftpd加一个受限账号已经够用。