下面给你一个**从零开始搭建 Linux FTP 服务器(以 vsftpd 为例)**的完整流程,适用于 CentOS / Rocky / Alma / RHEL 系列(Ubuntu/Debian 会稍作说明)。
常用方案:
| 软件 | 说明 |
|---|---|
| vsftpd | 最常用、安全、稳定(推荐) |
| proftpd | 功能多,配置复杂 |
| pure-ftpd | 轻量 |
✅ 本文使用 vsftpd
yum install -y vsftpd
apt update
apt install -y vsftpd
systemctl start vsftpd
systemctl enable vsftpd
查看状态:
systemctl status vsftpd
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
编辑:
vim /etc/vsftpd/vsftpd.conf
✅ 基础配置示例
# 禁止匿名登录
anonymous_enable=NO
# 允许本地用户登录
local_enable=YES
# 允许上传
write_enable=YES
# 本地用户权限掩码
local_umask=022
# 限制用户只能访问家目录(重要)
chroot_local_user=YES
# 允许写 chroot(新版本必须)
allow_writeable_chroot=YES
# 开启被动模式(推荐)
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=31000
# 日志
xferlog_enable=YES
useradd -m ftpuser
passwd ftpuser
chown ftpuser:ftpuser /home/ftpuser
chmod 755 /home/ftpuser
⚠️ 不要给 777 权限
firewall-cmd --permanent --add-service=ftp
firewall-cmd --permanent --add-port=30000-31000/tcp
firewall-cmd --reload
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 30000:31000 -j ACCEPT
getenforce
setenforce 0
setsebool -P ftp_home_dir on
setsebool -P allow_ftpd_full_access on
systemctl restart vsftpd
ftp 服务器IP
ftp://IP✅ 使用 被动模式(Passive)
/etc/shells 里没有该用户的 shellallow_writeable_chroot=YES
如果你愿意,我可以:
你是 CentOS 还是 Ubuntu? 我可以直接给你精准命令。