CentOS FTPServer 备份恢复策略
一 备份范围与频率
- 备份范围建议覆盖以下四类关键资产:
- 配置文件:如 /etc/vsftpd/(含 vsftpd.conf、user_list、ftpusers 等),确保服务与访问控制策略可还原。
- 数据目录:如 /var/ftp 或 /home/ftpuser,这是用户文件的核心存储位置。
- 日志文件:如 /var/log/vsftpd,用于审计与问题定位。
- 关联数据库:若 FTP 承载应用数据,需同步备份数据库(如 mysqldump 导出)。
- 备份类型与频率建议:
- 完整备份:每周一次,作为恢复基线。
- 增量/差异备份:每日一次,缩短备份窗口并降低存储占用。
- 自动化与监控:使用 cron 定时执行,记录日志并做成功/失败告警。
- 多地备份与定期恢复演练:至少一份异地/离线副本,定期做恢复验证,确保可用性。
二 备份方法与工具
- 文件与配置归档(tar)
- 适用:一次性全量打包、便于传输与归档。
- 示例:
- 备份:tar -czvf ftp_backup_$(date +%F).tar.gz /etc/vsftpd /var/ftp /var/log/vsftpd
- 恢复:tar -xzvf ftp_backup_YYYY-MM-DD.tar.gz -C /
- 增量/差异同步(rsync)
- 适用:日常增量备份、目录一致性保持。
- 示例:
- 本地/远程增量:rsync -avz --delete /var/ftp/ backup@host:/backup/ftp/
- 恢复:rsync -av /backup/ftp/ /var/ftp/
- 系统/分区镜像(dd)
- 适用:整机/分区级灾难恢复基线(注意停机与容量匹配)。
- 示例:
- 备份:dd if=/dev/sda of=/backup/sda_$(date +%F).img bs=4M
- 恢复:dd if=/backup/sda_YYYY-MM-DD.img of=/dev/sda bs=4M
- 数据库备份
- 适用:与 FTP 关联的业务数据一致性保障。
- 示例:mysqldump -u user -p db > db_$(date +%F).sql
- 自动化脚本与定时任务
- 建议将备份命令写入脚本(含时间戳、日志、错误检查),通过 crontab 定时执行,并保留至少 7–30 天 的历史副本。
三 恢复流程与要点
- 准备与评估
- 明确恢复目标时间点(如最近完整备份 + 若干增量),准备回滚方案与验证步骤。
- 停止服务
- 为减少写入冲突,恢复前建议停止 FTP 服务:systemctl stop vsftpd(必要时先备份当前状态)。
- 执行恢复
- 配置恢复:将备份的 vsftpd 配置与用户列表还原至 /etc/vsftpd/。
- 数据恢复:按备份方式执行
- tar:tar -xzvf ftp_backup_YYYY-MM-DD.tar.gz -C /
- rsync:rsync -av /backup/ftp/ /var/ftp/
- 数据库恢复:mysql -u user -p db < db_YYYY-MM-DD.sql
- 启动与验证
- 启动服务:systemctl start vsftpd
- 连通性与一致性校验:登录验证、抽样文件校验、日志检查、权限与属主核对。
- 回滚与演练
- 若异常,按备份时间点回滚;定期做恢复演练,确保流程与备份有效性。
四 安全与合规要点
- 传输与存储安全
- 备份链路优先使用 SFTP/RSYNC over SSH 等加密方式;离线/异地副本妥善管控访问权限。
- 凭据与密钥管理
- 避免将明文口令写入脚本或计划任务;使用 SSH 密钥、受限备份账号与最小权限策略。
- 日志与审计
- 保留关键操作与备份日志,定期审计;日志目录纳入备份范围。
- 加密与合规
- 对含敏感数据的备份进行加密存储;按行业/法规要求设置保留周期与处置策略。
五 示例脚本与定时任务
- 示例备份脚本(/usr/local/bin/backup_ftp.sh)
- 说明:打包配置、数据与日志,并 rsync 到远程备份主机;失败写日志并保留 7 天 历史。
- 使用:chmod +x /usr/local/bin/backup_ftp.sh
#!/usr/bin/env bash
set -Eeuo pipefail
BACKUP_ROOT="/backup/ftp"
DATE=$(date +%F_%H%M%S)
LOG="$BACKUP_ROOT/backup_$DATE.log"
KEEP_DAYS=7
FTP_CONF="/etc/vsftpd"
FTP_DATA="/var/ftp"
FTP_LOG="/var/log/vsftpd"
REMOTE_USER="backup"
REMOTE_HOST="192.0.2.10"
REMOTE_DIR="/backup/ftp"
mkdir -p "$BACKUP_ROOT"
exec >"$LOG" 2>&1
echo "[$(date)] Start backup"
tar czf "$BACKUP_ROOT/ftp_full_$DATE.tar.gz" -C / \
--exclude="$BACKUP_ROOT" \
"$FTP_CONF" "$FTP_DATA" "$FTP_LOG" || {
echo "Tar failed"; exit 1; }
rsync -avz --delete "$BACKUP_ROOT/" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/" || {
echo "Rsync failed"; exit 1; }
find "$BACKUP_ROOT" -name "ftp_full_*.tar.gz" -mtime +$KEEP_DAYS -delete
find "$BACKUP_ROOT" -name "backup_*.log" -mtime +$KEEP_DAYS -delete
echo "[$(date)] Backup finished"
- 定时任务(每天 02:00 执行)
- 执行:crontab -e
- 内容:0 2 * * * /usr/local/bin/backup_ftp.sh
- 说明
- 若需增量/差异策略,可在脚本中引入 rsync 增量 或配合 LVM 快照/rsnapshot 等工具实现。