在 CentOS 上配置 FTP 服务器(以 vsftpd 为例,最常用、稳定)可以按下面步骤来。我分别给你 匿名访问 和 本地用户访问 两种常见配置方式,并顺带说明 防火墙 / SELinux 注意事项。
# CentOS 7/8
yum install -y vsftpd
# CentOS Stream / 新版
dnf install -y vsftpd
启动并设置开机自启:
systemctl start vsftpd
systemctl enable vsftpd
配置文件路径:
/etc/vsftpd/vsftpd.conf
先备份:
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
编辑配置文件:
vim /etc/vsftpd/vsftpd.conf
推荐配置:
# 禁止匿名登录
anonymous_enable=NO
# 允许本地用户
local_enable=YES
# 允许上传
write_enable=YES
# 本地用户限制在家目录
chroot_local_user=YES
# 允许写 chroot(CentOS 7+ 必须)
allow_writeable_chroot=YES
# 被动模式(推荐)
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=31000
# 日志
xferlog_enable=YES
重启服务:
systemctl restart vsftpd
anonymous_enable=YES
anon_root=/var/ftp
local_enable=NO
write_enable=NO
目录权限:
chmod 755 /var/ftp
useradd ftpuser
passwd ftpuser
限制只能 FTP,不能 SSH 登录(可选):
usermod -s /sbin/nologin 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
如果还是连不上,可临时测试:
setenforce 0
⚠️ 生产环境不建议直接关闭 SELinux。
ftp 服务器IP
或使用工具:
| 问题 | 原因 |
|---|---|
| 530 Login incorrect | 用户名/密码错误 or SELinux |
| 500 OOPS: chroot | 家目录权限不对 |
| 连接超时 | 防火墙 / 被动端口 |
| 无法上传 | write_enable=NO |
如果你需要:
可以告诉我你的 CentOS 版本和使用场景,我可以给你更精确的配置方案。