在 CentOS 上搭建 FTP Server(vsftpd) 的完整步骤如下,适用于 CentOS 7 / 8 / Stream。我按 最常用、最稳定 的方式讲解,并包含 被动模式、用户权限、防火墙、SELinux 等常见坑点。
yum install -y vsftpd
CentOS 8 / Stream 用:
dnf install -y vsftpd
systemctl start vsftpd
systemctl enable vsftpd
查看状态:
systemctl status vsftpd
编辑配置文件:
vim /etc/vsftpd/vsftpd.conf
# 禁止匿名登录
anonymous_enable=NO
# 允许本地用户登录
local_enable=YES
# 允许上传
write_enable=YES
# 本地用户 umask
local_umask=022
# 禁止用户切换到根目录(安全)
chroot_local_user=YES
# 允许 chroot 目录可写(CentOS 7+ 必须)
allow_writeable_chroot=YES
# 使用被动模式(非常重要)
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=31000
# 监听 IPv4
listen=YES
listen_ipv6=NO
useradd -d /home/ftpuser -s /sbin/nologin ftpuser
passwd ftpuser
chown -R ftpuser:ftpuser /home/ftpuser
chmod 755 /home/ftpuser
firewall-cmd --permanent --add-service=ftp
firewall-cmd --permanent --add-port=30000-31000/tcp
firewall-cmd --reload
getenforce
如果是 Enforcing,执行:
setsebool -P ftp_home_dir on
setsebool -P allow_ftpd_full_access on
✅ 否则会出现 能登录但不能上传/下载
systemctl restart vsftpd
ftp localhost
FileZillaftp ip地址
/sbin/nologin 未加入 /etc/shells修复:
echo /sbin/nologin >> /etc/shells
write_enable=NOpasv_address 未配置(云服务器需配公网 IP)pasv_address=你的公网IP
✅ 禁止匿名
✅ 限制用户 chroot
✅ 使用被动模式
✅ 不要用 root
✅ 云服务器记得安全组放行端口
如果你需要:
可以继续告诉我你的场景,我可以给你 进阶配置方案。
需要我帮你写成 一键脚本 吗?