搭建FTP服务器,选对软件能省下大量功夫。Linux环境优先选用vsftpd,轻量稳定,配置逻辑简单,各大发行版软件源都内置。Windows平台一般使用FileZilla Server或是系统自带IIS的FTP服务,图形界面操作简单。下面以vsftpd为主,完整讲解从部署到文件传输的全部流程。
软件安装本身难度不大,CentOS执行yum install -y vsftpd,Ubuntu执行apt install -y vsftpd等待安装完成。安装结束不要直接启动服务,先备份原有配置文件,cp /etc/vsftpd.conf /etc/vsftpd.conf.bak。操作耗时很短,后续配置出错可以快速恢复原始文件。

接下来编辑/etc/vsftpd.conf,多项参数需要修改,否则会出现安全漏洞或者服务无法使用。anonymous_enable设置为NO,关闭匿名访问。local_enable和write_enable保持YES,前者允许本地用户登录,后者开启写入权限。chroot_local_user设为YES,将用户限制在自身家目录,防止跨目录访问。CentOS7及以上版本额外添加allow_writeable_chroot=YES,缺少该参数会导致服务启动失败,报错提示难以理解。
被动模式是配置中容易遗漏的环节。没有配置被动模式,客户端能够登录输入密码,但无法列出目录、传输文件。配置文件添加pasv_enable=YES,再定义端口区间,pasv_min_port=50000,pasv_max_port=50100。服务器部署在NAT环境内,pasv_address填写公网IP,不填写服务器会向客户端返回内网地址,外网无法建立连接。
FTP业务不要使用root账号,新建独立账号。useradd -s /sbin/nologin ftpuser,参数-s /sbin/nologin代表账号仅用于FTP登录,禁止登录系统shell。执行passwd ftpuser设置登录密码。新建数据目录,例如/home/ftpuser/ftp,修改目录属主为ftpuser,权限设置755。需要多用户访问,可将用户加入同一用户组,或是调整chmod目录权限。
防火墙和SELinux是两道需要处理的安全限制。CentOS firewalld放行21端口以及刚才定义的被动端口段,firewall-cmd --add-port=21/tcp --permanent,firewall-cmd --add-port=50000-50100/tcp --permanent,执行reload生效。Ubuntu使用ufw,执行ufw allow 21/tcp,ufw allow 50000:50100/tcp。开启SELinux的环境,执行setsebool -P ftp_home_dir on,或者给目录设置正确上下文标签。云服务器还要调整安全组规则,安全组不放行端口,本机防火墙放行也无法连通。
配置保存之后,systemctl start vsftpd启动服务,systemctl enable vsftpd设置开机自启。本地测试,服务器本机执行ftp 127.0.0.1,输入账号密码,能够登录代表服务本身正常。再用另一台主机,通过FileZilla或者命令行连接,填写服务器IP、账号密码,端口21,加密选项选择仅普通FTP或者尝试TLS,依据服务端SSL配置决定。成功列出目录、上传下载文件,部署完成。连接失败按顺序排查:服务运行状态、防火墙端口放行、被动模式公网IP填写、SELinux拦截。客户端登录成功但看不到目录,绝大多数情况被动端口不通。
Windows平台部署更简单,安装FileZilla Server,打开管理控制台,新建用户、设置密码,指定共享目录与权限,服务器参数设置被动端口范围,防火墙入站规则放行21端口和被动端口段。IIS部署的话,服务器管理器添加FTP角色,IIS管理器新建FTP站点,绑定IP和端口,指定物理路径,授权规则添加用户,分配读写权限。Windows平台常见故障点集中在防火墙与NTFS目录权限,两项配置全部正确才能正常读写。
FTP协议本身不加密,账号密码和文件内容在网络明文传输。内网使用风险较低,公网环境建议部署FTPS,在FTP外层封装SSL/TLS,或者直接使用SFTP,依托SSH协议,端口22,配置更简单,安全性更强。自建FTP服务器,安装部署门槛不高,难点在于权限、端口、防火墙三者同时配置到位。部署完成先用测试主机验证连通性,确认无误再投入正式业务。