很多老系统、供应商和合作方仍然默认用FTP交换文件。对账单、商品图片、日志这类需要定时交给外部单位的数据,放在阿里云ECS上的一台FTP服务器里,通常是最省事的做法。本文以ECS为例,说明阿里云FTP怎么搭、权限怎么切分,以及安全上哪几处最容易漏。

为什么放在阿里云ECS上
FTP的客户端兼容性好。很多财务软件、ERP和供应商的采集脚本都原生支持,对方不需要改造。服务放在ECS上,实例配置可以随业务量调整,公网带宽也能单独加。配合快照和云盘备份,服务器出问题时,数据恢复有据可依。
但FTP是明文协议,账号密码和文件内容在网络上都可能被截获。部署时可用性和安全要一起考虑,只把服务跑起来还不够。
一个零售企业的做法
华东一家中型零售企业,每天要从四十多家供应商那里收库存和对账文件。早期用邮件传,附件经常超过大小限制,也很难查到谁在什么时间传了什么。后来他们在阿里云上部署了FTP服务器,每家供应商一个独立账号,只能进自己的目录。文件到达后,定时任务导入内部系统,原始文件同时归档到OSS,方便审计。
上线后,文件丢失和误发的情况少了,运维人员也不用再逐封核对邮件附件。对这类场景来说,FTP的价值在于把零散的交换流程收到同一个地方,有账号、有目录、有记录。
搭建步骤
1. 规划安全组和端口
系统选常见的Linux发行版镜像即可。安全组要放行两类端口:21端口用于控制连接;被动模式的数据端口需要预留一段,比如30000到30100。服务端配置和安全组里的这段端口必须一致。两边对不上时,客户端能登录,却列不出目录或传不了文件,这是最常见的排查难点。
2. 安装并配置vsftpd
vsftpd是Linux下比较成熟的FTP服务端。安装后主要修改 /etc/vsftpd/vsftpd.conf 里的几项:
- anonymous_enable=NO:关闭匿名访问,避免目录被未授权读取。
- local_enable=YES、write_enable=YES:允许本地用户登录并上传。
- chroot_local_user=YES:把用户限制在自己的主目录内,防止访问系统其他文件。新版vsftpd在这种设置下,如果用户主目录本身可写,会拒绝登录。此时需要加上 allow_writeable_chroot=YES,或者在主目录下另建一个可写子目录供上传。
- pasv_enable=YES、pasv_min_port=30000、pasv_max_port=30100:开启被动模式并限定端口段,端口段要与安全组一致。
- pasv_address:填ECS的公网IP。ECS在NAT后面,如果不填,服务端返回的数据连接地址会是内网地址,客户端连不上。
改完后重启服务。用客户端分别测试登录、列目录、上传、下载,四项都通过后再交给合作方。只测登录,很容易漏掉被动模式的问题。
3. 为每个合作方建独立用户和目录
每家合作方单独建一个系统用户,登录Shell设为 /sbin/nologin,主目录指向他们专属的文件夹。某个账号的密码泄露时,影响范围只限于那一家的目录,不会牵连其他合作方。
安全上优先处理的几点
FTP本身不加密,下面几项建议尽早落实:
- 尽量换成FTPS或SFTP。FTPS用TLS同时加密控制通道和数据通道,SFTP跑在SSH上,默认使用22端口,两者都不会明文传输。如果合作方的采集脚本只支持普通FTP,至少要把访问来源限制在固定IP段内,并把这一情况写进合作协议,方便以后迁移。
- 收紧安全组。不要对公网开放全部端口,只放行合作方的固定出口IP。21端口和被动端口段都要这样处理。
- 不用root或其他高权限账号跑FTP。每个账号只给必要目录的读写权限,不给整个系统的权限。
- 开启日志,定期看失败记录。登录、上传、下载都要留痕。大量失败登录通常说明有人在暴力破解,可以配合fail2ban自动封禁来源IP。
- 快照和补丁要跟上。用云盘快照保存配置和数据,系统与vsftpd的安全更新要及时安装。改配置前先做一次快照,出问题时能快速回退。
和OSS配合使用
如果文件要长期保存,或者要被其他云服务调用,可以在ECS上用定时任务把FTP目录同步到OSS。FTP服务器只负责接收,存储和归档交给OSS。这样FTP机器上留存的数据少,万一被攻破,损失范围也小。
同步脚本建议使用阿里云提供的命令行工具ossutil,并通过RAM子账号只授予目标Bucket的读写权限。不要把主账号的AccessKey写进脚本,主账号权限太大,一旦泄露代价很高。
小结
在阿里云上搭FTP本身不难,真正花时间的是端口规划、被动模式和用户隔离这些细节。先把端口和目录设计好,再逐步加密、审计和备份,最后得到的是一套好用、可控的文件交换方案。仍在使用FTP的团队,这类改造通常几天就能完成,却能明显降低运维和安全上的隐患。