在 CentOS 上迁移 FTP 服务器,通常指的是 把 FTP 服务(用户、数据、配置)从一台服务器迁移到另一台 CentOS 服务器。下面以 vsftpd(最常见) 为例,给你一套完整、可操作的迁移方案。如果你是 Pure-FTPd / ProFTPD,我也可以单独给你对应步骤。
rpm -qa | grep -E "vsftpd|proftpd|pure-ftpd"
一般 CentOS 常见:
cp /etc/vsftpd/vsftpd.conf /root/vsftpd.conf.bak
如果你有其它配置文件:
cp -r /etc/vsftpd /root/vsftpd-backup
getent passwd | grep ftp
导出用户:
cp /etc/passwd /root/passwd.bak
cp /etc/shadow /root/shadow.bak
cp /etc/group /root/group.bak
⚠️ 不建议直接覆盖 passwd / shadow ✅ 建议只提取 FTP 用户单独迁移(更安全)
cp /etc/vsftpd/virtual_users.db /root/
cp /etc/pam.d/vsftpd /root/vsftpd.pam.bak
假设数据目录是 /data/ftp:
tar czvf ftpdata.tar.gz /data/ftp
yum install -y vsftpd
cp /root/vsftpd.conf.bak /etc/vsftpd/vsftpd.conf
如整个目录:
cp -r /root/vsftpd-backup/* /etc/vsftpd/
cp /root/virtual_users.db /etc/vsftpd/
cp /root/vsftpd.pam.bak /etc/pam.d/vsftpd
tar xzvf ftpdata.tar.gz -C /
chown -R ftpuser:ftpuser /data/ftp
chmod -R 755 /data/ftp
不建议直接覆盖 passwd / shadow
更安全方式:
useradd ftpuser
passwd ftpuser
或从备份中提取单个用户手动重建。
getenforce
setsebool -P ftp_home_dir on
setsebool -P allow_ftpd_full_access on
如果是公开目录:
semanage fcontext -a -t public_content_t "/data/ftp(/.*)?"
restorecon -Rv /data/ftp
firewall-cmd --permanent --add-service=ftp
firewall-cmd --reload
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
systemctl restart vsftpd
systemctl enable vsftpd
ftp 新服务器IP
或用 FileZilla / WinSCP 测试。
检查:
tail -f /var/log/secure
ls -ld /data/ftp
setfacl -m u:ftpuser:rwx /data/ftp
| FTP 类型 | 迁移重点 |
|---|---|
| Pure-FTPd | /etc/pure-ftpd + 用户 DB |
| ProFTPD | /etc/proftpd.conf |
| 虚拟用户 | db / mysql / ldap |
旧服务器:
1. 备份 vsftpd.conf
2. 打包数据目录
3. 备份虚拟用户(如有)
新服务器:
1. 安装 vsftpd
2. 恢复配置
3. 恢复数据
4. 设置 SELinux / 防火墙
5. 启动服务
如果你愿意,可以告诉我:
我可以给你 完全定制化的迁移命令清单。