用vsftpd搭建ftp服务最稳妥,需禁用匿名访问、启用chroot锁定用户目录、配置被动模式端口范围、创建无shell权限专用用户,并开放防火墙21端口及被动端口段。

选软件和装服务
vsftpd 是 Linux 下最常用的 FTP 服务器,Debian/Ubuntu 和 RHEL/CentOS 系统都原生支持:
- Ubuntu/Debian:sudo apt update && sudo apt install vsftpd
- RHEL/CentOS/Rocky Linux:sudo dnf install vsftpd(新版)或 sudo yum install vsftpd(旧版)
- 装完立即启用并启动:sudo systemctl enable --now vsftpd
关掉匿名登录,只认真实用户
默认配置允许匿名访问,生产环境必须禁用。编辑主配置文件:sudo nano /etc/vsftpd.conf,确保这几行明确设置:
- anonymous_enable=NO(彻底关闭匿名入口)
- local_enable=YES(允许系统本地用户登录)
- write_enable=YES(开启上传、删改等写操作)
- chroot_local_user=YES(把每个用户锁在自己家目录,防越权)
- allow_writeable_chroot=YES(配合上一条,否则 chroot 目录不能有写权限会报错)
改完保存,运行 sudo systemctl restart vsftpd 生效。
开防火墙端口,特别注意被动模式
FTP 控制连接走 21 端口,但数据传输在被动模式下会动态分配高位端口(如 50000–51000),必须显式放行:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- 先开放控制端口:sudo firewall-cmd --permanent --add-port=21/tcp
- 再定义被动端口范围(推荐 50000–51000):echo "pasv_min_port=50000" | sudo tee -a /etc/vsftpd.conf
echo "pasv_max_port=51000" | sudo tee -a /etc/vsftpd.conf - 然后开放这个范围:sudo firewall-cmd --permanent --add-port=50000-51000/tcp
- 重载防火墙:sudo firewall-cmd --reload
创建专用用户,不给 shell 权限
别直接用 root 或普通登录用户。新建一个仅用于 FTP 的账户:
- sudo useradd -m -s /usr/sbin/nologin ftpuser
- sudo passwd ftpuser(设密码)
- sudo chown ftpuser:ftpuser /home/ftpuser
- sudo chmod 750 /home/ftpuser
这样用户能登录 FTP,但无法通过 SSH 登录系统,也进不了其他目录。
验证是否跑通
用任意 FTP 客户端(如 FileZilla 或命令行 ftp your-server-ip)测试:
- 用刚建的 ftpuser 和密码登录
- 尝试上传一个测试文件,看是否成功
- 检查日志确认行为:sudo tail -f /var/log/vsftpd.log
如果连不上,优先查 systemctl status vsftpd、firewall-cmd --list-all、以及客户端是否设为被动模式(PASV)。










