FTP(File Transfer Protocol,文件传输协议)是互联网中最经典的文件传输方式之一,至今仍广泛应用于网站代码部署、数据备份、团队文件共享等场景。对于拥有云服务器的用户来说,搭建一个属于自己的 FTP 服务器,能实现灵活、高效的文件管理——无需依赖第三方工具,就能随时随地传输文件。
本文将以 CentOS 7(云服务器最常用的 Linux 发行版之一)为例,从「环境准备」到「客户端连接」,再到「安全优化」,手把手教你搭建一个稳定、安全的 FTP 服务器。
一、准备工作:云服务器基础配置
在开始搭建前,请确保你已经完成以下基础操作:
1. 选择合适的云服务器
- 系统选择:优先选 Linux 系统(如 CentOS 7/8、Ubuntu 20.04),本文以 CentOS 7 为例;
- 带宽与存储:根据文件传输需求选择——若传输大文件(如视频、备份包),建议带宽≥5Mbps;存储则根据文件总量调整;
- 安全组配置:FTP 默认使用 21 端口(控制连接),被动模式还需开放 30000-30010 端口范围(可自定义)。需登录云服务商控制台(阿里云、腾讯云等),在「安全组规则」中添加以下入站规则:
- 端口 21:TCP 协议,允许所有 IP(或指定 IP)访问;
- 端口 30000-30010:TCP 协议,允许所有 IP(或指定 IP)访问。
2. 远程连接云服务器
使用 SSH 工具(如 Xshell、PuTTY、Windows 终端)连接云服务器,输入服务器公网 IP、用户名(默认 root)和密码(或密钥)登录。
二、安装 vsftpd:FTP 服务器核心软件
vsftpd(Very Secure FTP Daemon)是 Linux 系统中最流行的 FTP 服务器软件,以安全、稳定著称。我们将通过 yum 包管理器安装它。
1. 安装 vsftpd
执行以下命令安装 vsftpd:
yum install vsftpd -y
安装完成后,启动 vsftpd 并设置开机自启:
systemctl start vsftpd # 启动服务
systemctl enable vsftpd # 设置开机自启
验证服务是否正常运行:
systemctl status vsftpd
若显示「active (running)」,则表示 vsftpd 已成功启动。
2. 关闭 SELinux(可选但重要)
SELinux(安全增强型 Linux)可能会限制 vsftpd 的正常运行(如阻止用户访问目录)。若你对 SELinux 不熟悉,可临时关闭:
setenforce 0 # 临时关闭(重启后失效)
若需永久关闭,编辑 /etc/selinux/config 文件:
vi /etc/selinux/config
将 SELINUX=enforcing 改为 SELINUX=disabled,保存后重启服务器生效。
三、配置 vsftpd:核心参数与安全设置
vsftpd 的配置文件位于 /etc/vsftpd/vsftpd.conf,我们需要修改部分参数以实现「安全访问」和「功能优化」。
1. 备份配置文件(重要)
修改前先备份原配置,避免出错无法恢复:
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
2. 编辑配置文件
使用 vi 编辑器打开配置文件:
vi /etc/vsftpd/vsftpd.conf
找到并修改以下参数(若参数不存在则手动添加):
(1)基础设置
anonymous_enable=NO:禁止匿名用户登录(默认可能为 YES,存在安全风险);local_enable=YES:允许本地用户(系统用户)登录;write_enable=YES:允许用户上传文件;local_umask=022:设置上传文件的权限掩码(022 表示文件权限为 644,目录为 755)。
(2)被动模式配置
FTP 有「主动模式」和「被动模式」,被动模式更适合客户端在防火墙后(如家庭网络)的场景。需指定被动模式的端口范围:
pasv_enable=YES:启用被动模式;pasv_min_port=30000:被动模式最小端口;pasv_max_port=30010:被动模式最大端口;pasv_address=你的云服务器公网IP:指定被动模式返回给客户端的 IP(若服务器有公网 IP,必须设置,否则客户端可能无法连接)。
(3)安全设置
chroot_local_user=YES:将用户限制在自己的主目录(防止用户访问系统其他目录);allow_writeable_chroot=YES:允许用户主目录有写入权限(若不设置,用户可能无法登录);userlist_enable=YES:启用用户列表(仅允许列表中的用户登录);userlist_deny=NO:设置为 NO 表示「仅允许 user_list 文件中的用户登录」(更安全);tcp_wrappers=YES:启用 TCP 包装器(配合/etc/hosts.allow和/etc/hosts.deny限制 IP 访问)。
3. 保存配置并重启服务
修改完成后,按 Esc 键,输入 :wq 保存并退出。然后重启 vsftpd 使配置生效:
systemctl restart vsftpd
四、创建 FTP 用户:限制访问范围
为了安全,建议创建专门的 FTP 用户,而非使用 root 或其他系统用户。以下步骤创建一个名为 ftpuser 的用户,并限制其只能访问 /var/ftp/files 目录。
1. 创建用户并设置密码
执行以下命令创建用户(-d 指定主目录,-s /sbin/nologin 禁止用户登录系统,只能用 FTP):
useradd -d /var/ftp/files -s /sbin/nologin ftpuser
设置用户密码:
passwd ftpuser
输入两次密码(建议使用复杂密码,包含大小写、数字和符号)。
2. 设置目录权限
FTP 用户需要对主目录有读写权限,执行以下命令:
systemctl start vsftpd # 启动服务
systemctl enable vsftpd # 设置开机自启0
3. 将用户加入允许列表
由于我们在配置中开启了 userlist_enable=YES 和 userlist_deny=NO,需将 ftpuser 添加到 /etc/vsftpd/user_list 文件中:
systemctl start vsftpd # 启动服务
systemctl enable vsftpd # 设置开机自启1
五、客户端连接测试:验证 FTP 服务
配置完成后,需通过客户端测试是否能正常连接和传输文件。以下是常见客户端的使用方法:
1. Windows 自带资源管理器
- 打开「此电脑」,在地址栏输入
ftp://你的云服务器公网IP; - 弹出登录窗口,输入用户名
ftpuser和密码; - 若成功连接,即可看到
/var/ftp/files目录,尝试上传/下载文件验证功能。
2. FileZilla(推荐)
FileZilla 是免费的跨平台 FTP 客户端,支持图形化操作,更适合频繁传输文件:
- 下载并安装 FileZilla(官网:https://filezilla-project.org/);
- 打开 FileZilla,在「站点管理器」中新建站点:
- 协议:选择「FTP - 文件传输协议」;
- 主机:输入云服务器公网 IP;
- 端口:21;
- 登录类型:「正常」;
- 用户:
ftpuser; - 密码:设置的密码;
- 点击「连接」,若成功则左侧为本地文件,右侧为 FTP 服务器文件,可拖拽传输。
3. Linux 命令行
若你使用 Linux 客户端,可直接用 ftp 命令连接:
systemctl start vsftpd # 启动服务
systemctl enable vsftpd # 设置开机自启2
输入用户名和密码后,使用 put 本地文件路径 上传,get 服务器文件路径 下载。
六、安全优化:让 FTP 更可靠
默认配置已满足基本需求,但为了进一步提升安全性,建议做以下优化:
1. 限制 IP 访问(TCP 包装器)
通过 /etc/hosts.allow 和 /etc/hosts.deny 限制只有指定 IP 能访问 FTP:
- 编辑
/etc/hosts.allow,添加:systemctl start vsftpd # 启动服务 systemctl enable vsftpd # 设置开机自启3 - 编辑
/etc/hosts.deny,添加:systemctl start vsftpd # 启动服务 systemctl enable vsftpd # 设置开机自启4
2. 启用 SSL/TLS 加密(FTPS)
默认 FTP 传输是明文的,密码和文件内容可能被窃听。启用 SSL/TLS 可将传输加密,变成 FTPS:
(1)生成 SSL 证书
使用 OpenSSL 生成自签名证书(若有域名,可申请免费的 Let’s Encrypt 证书):
systemctl start vsftpd # 启动服务
systemctl enable vsftpd # 设置开机自启5
按提示输入信息(如国家、组织、域名等,可随意填写)。
(2)修改 vsftpd 配置
编辑 /etc/vsftpd/vsftpd.conf,添加以下参数:
systemctl start vsftpd # 启动服务
systemctl enable vsftpd # 设置开机自启6
重启 vsftpd 服务:
systemctl restart vsftpd
(3)客户端连接 FTPS
以 FileZilla 为例,在「站点管理器」中选择「FTP - 隐式 TLS」或「FTP - 显式 TLS」协议,其他设置不变,即可加密连接。

3. 定期备份配置和数据
- 配置备份:定期将
/etc/vsftpd/vsftpd.conf复制到其他服务器或本地; - 数据备份:若 FTP 存储重要数据,建议通过脚本定期将
/var/ftp/files目录备份到云存储(如阿里云 OSS、腾讯云 COS)。
七、常见问题排查
若遇到连接失败,可按以下步骤排查:
- 端口是否开放:用
telnet 公网IP 21测试端口是否可达,若不通,检查云服务器安全组和防火墙; - 服务是否运行:
systemctl status vsftpd查看服务状态,若异常,查看日志/var/log/messages或/var/log/vsftpd.log; - 用户权限问题:确保 FTP 用户对主目录有读写权限,且
user_list中已添加该用户; - 被动模式问题:若客户端无法连接被动模式,检查
pasv_address是否正确,以及端口范围是否开放。
总结
通过本文的步骤,你已成功在云服务器上搭建了一个安全、稳定的 FTP 服务器。从安装 vsftpd、配置核心参数,到创建专用用户、客户端测试,再到 SSL 加密和 IP 限制,每一步都围绕「安全」和「实用」展开。
FTP 虽经典,但在传输大文件或敏感数据时,建议结合 FTPS 或 SFTP(SSH File Transfer Protocol)使用——SFTP 基于 SSH,无需额外安装软件,安全性更高,若你对 SFTP 感兴趣,可关注后续教程。
现在,你可以用自己的 FTP 服务器管理文件了,赶紧试试吧!









留言0