在阿里云ECS上托管网站素材或接收本地文件,最常见的需求是把文件稳定、快速地传上去。FTP成本低、上手快,很多站长和开发团队至今仍在用。本文以CentOS 7为例,说明阿里云服务器FTP的搭建步骤,并通过一个案例讲清常见坑点和安全处理。

一、为什么用FTP
FTP协议成熟,客户端很多。Windows资源管理器、FileZilla和命令行工具都能直接连接。商品图同步、日志回传、静态站点发布这类场景,用FTP比单独搭一套文件服务省事得多。它的短板是不加密,方案设计时要把这一点算进去,后面的安全部分会展开说明。
二、准备工作
动手前确认三件事:ECS实例处于运行状态,并且知道公网IP;手上有root或sudo权限的账号;想清楚这个FTP目录的用途,是网站根目录、素材上传目录还是备份目录。目录用途定得越早,后面的权限分配越省心。
三、安装并配置vsftpd
vsftpd是Linux上常用的FTP服务端,配置文件结构清楚。安装并设置开机启动:
yum install -y vsftpd
systemctl enable vsftpd
systemctl start vsftpd
编辑 /etc/vsftpd/vsftpd.conf,重点关注下面几项:
anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES
allow_writeable_chroot=YES
listen=NO
listen_ipv6=YES
pasv_enable=YES
pasv_min_port=40000
pasv_max_port=40100
pasv_address=你的公网IP
关闭匿名登录是底线。chroot_local_user把用户限制在自己的目录里,不让他们访问系统其他路径。allow_writeable_chroot默认是被拒绝的,因为它允许 chroot 根目录可写。打开它之后,要确认该目录下没有其他需要保护的内容,否则等于把整个目录交给了这个账号。
被动模式(PASV)的端口范围必须写死。每次数据传输都要占用一个被动端口,40000到40100共101个端口,对小团队足够。如果不指定范围,数据连接会使用随机高位端口,安全组就无法提前放行,这是阿里云上FTP最常见的失败原因。pasv_address填公网IP,客户端拿到的地址才是可以访问的。
四、创建专用账号
不要直接用系统账号登录FTP。为每个业务单独建账号,并划分独立目录:
useradd -d /data/upload -s /sbin/nologin ftpuser
passwd ftpuser
mkdir -p /data/upload
chown -R ftpuser:ftpuser /data/upload
登录shell设为 /sbin/nologin,这个账号就无法通过SSH登录服务器,权限只剩FTP。注意,有些系统上vsftpd会检查登录shell是否列在 /etc/shells 中。如果配置完成后该账号一直登录失败,先查看 /var/log/secure 里的报错,再把 /sbin/nologin 加入 /etc/shells。
五、安全组与防火墙
这一步最容易被忽略。阿里云控制台的安全组需要放行两段端口:TCP 21,以及被动端口 40000-40100。如果ECS上还开着firewalld(CentOS 7默认会开启),系统防火墙也要同步放行。只放行安全组,连接仍然会失败:
firewall-cmd --permanent --add-port=21/tcp
firewall-cmd --permanent --add-port=40000-40100/tcp
firewall-cmd --reload
安全组和系统防火墙是两层,少放行一层,表现通常是连接超时或目录列表卡住。这类问题很容易被误判为vsftpd配置错误,排查时先看端口有没有放行。
验证方法是用FileZilla连接后,先列出目录,再上传一个小文件,下载回来比对内容。只测连接不测传输,列表能显示但上传卡住,多半是被动端口没有放行。
六、案例:小型电商团队的图片同步
某服饰电商团队每天要上传几百张商品图。原来靠远程桌面逐个上传,耗时长,文件命名也很乱。他们按上面的方式在阿里云ECS上搭建了FTP,给设计部门分配独立账号,并约定统一的目录结构。设计师用客户端直接同步到 /data/upload/products,网站程序定时读取这个目录。上线一周后,上传时间从约40分钟降到不到10分钟,误传和覆盖的情况也少了很多。
这个案例有两点可以直接借鉴。第一,账号和目录一一对应,出问题时能很快找到对应的账号和目录。第二,被动端口范围在搭建时就定好,后面不用反复修改安全组。
七、安全建议
FTP默认明文传输,账号密码和文件内容在网络上都可能被截获。如果传输的是客户资料、后台凭证这类敏感内容,改用SFTP(基于SSH)或FTPS(基于TLS)。SFTP只使用SSH的22端口,不需要额外放行被动端口,安全组配置更简单。
如果服务只给办公室或固定地址使用,在安全组里把源IP限定到这些地址,比开放 0.0.0.0/0 安全得多。密码要定期更换,日志保留下来。隔一段时间检查 /var/log/secure,看有没有陌生IP的登录失败记录。