Linux搭建FTP服务
约 554 字大约 2 分钟
2026-08-29
Linux 侧推荐用 vsftpd 搭建 FTP 服务,配置简单且安全性好。Windows 版参见搭建FTP站点(Windows)。如果只是自己传文件,用现成的 SSH 即可(scp/sftp,见本地与实例间数据传输),无需自建 FTP;需要给多人提供文件服务时再按本文操作。
CentOS
sudo yum install -y vsftpd
sudo systemctl enable --now vsftpdUbuntu / Debian
sudo apt install -y vsftpd
sudo systemctl enable --now vsftpd创建 FTP 用户
# 创建专用用户,禁止其登录 shell
sudo useradd -m -s /sbin/nologin ftpuser
sudo passwd ftpuser核心配置
编辑 /etc/vsftpd/vsftpd.conf(Ubuntu 为 /etc/vsftpd.conf):
anonymous_enable=NO # 禁用匿名
local_enable=YES # 允许本地用户登录
write_enable=YES # 允许上传
chroot_local_user=YES # 限制用户只能待在自己的主目录
allow_writeable_chroot=YES # 主目录可写(chroot 配套)
pasv_enable=YES # 被动模式
pasv_min_port=50000
pasv_max_port=50010sudo systemctl restart vsftpd放行防火墙与安全组
FTP 是"控制端口 21 + 被动端口段"的组合,两段都要放行,漏放被动段是"能登录但列不出目录"的最常见原因。
# firewalld(CentOS)
sudo firewall-cmd --permanent --add-service=ftp
sudo firewall-cmd --permanent --add-port=50000-50010/tcp
sudo firewall-cmd --reload
# ufw(Ubuntu)
sudo ufw allow 21/tcp
sudo ufw allow 50000:50010/tcp安全组入方向同步放行 21 与 50000-50010 端口,规则写法见安全组与系统防火墙入门。
连接验证与常见报错
用 FileZilla / WinSCP 等客户端连接服务器 IP,协议选 FTP、输入用户名密码。
| 报错 | 原因与处理 |
|---|---|
| 530 Login incorrect | 密码错误,或用户 shell 被禁且未处理(检查 /etc/pam.d/vsftpd 中 pam_shells 是否需要注释);先确认 passwd ftpuser 已设置 |
| 能登录但一直列不出目录 / 227Entering Passive Mode 后卡死 | 被动端口段没放行,检查安全组与系统防火墙 |
| 上传 553 Could not create file | 主目录权限不足:chown ftpuser /home/ftpuser |
| 连接被重置 | vsftpd 未启动或 21 端口被拦截,systemctl status vsftpd |
优先考虑 SFTP 或 FTPS
FTP 明文传输密码,公网环境建议:个人传文件直接用 SFTP(基于 SSH,无需额外服务);必须用 FTP 对外服务时,启用 vsftpd 的 TLS(ssl_enable=YES 并配置证书)。
