Debian 上备份 FTPServer 数据的实用方案
一 备份范围与准备
- 明确要备份的内容:
- 用户数据目录(如:/var/www/html、/home/ftp、或 /srv/ftp)
- 服务配置(如:/etc/vsftpd.conf、/etc/proftpd/ 等)
- 认证与账户信息(如 PAM 配置、虚拟用户数据库等)
- 系统关键文件(如:/etc/passwd、/etc/shadow、/etc/group、/etc/fstab)
- 相关数据库(若 FTP 应用使用 MySQL/MariaDB 或 PostgreSQL,需单独备份)
- 准备备份目的地与保留策略:本地目录(如 /backup)、NFS/外置盘或远程服务器;建议保留7–30天并按日期分层。
- 选择工具:日常全量/增量用 tar 或 rsync;需要加密与远程传输可用 Duplicity;统一编排可用 Backup Ninja。
二 手动备份步骤
-
- 备份用户数据目录(示例为 /var/www/html,请按实际修改)
- 打包压缩:
- tar -czvf /backup/ftp_data_$(date +%F).tar.gz /var/www/html
- 或增量同步:
- rsync -aAX --delete /var/www/html/ /backup/ftp_data_current/
-
- 备份配置文件与关键系统文件
- 配置:tar -czvf /backup/etc_ftp_$(date +%F).tar.gz /etc/vsftpd.conf /etc/proftpd* /etc/pam.d/vsftpd
- 关键文件:tar -czvf /backup/etc_core_$(date +%F).tar.gz /etc/passwd /etc/shadow /etc/group /etc/fstab
-
- 备份数据库(如启用)
- MySQL/MariaDB:mysqldump -u root -p --single-transaction --routines --triggers --all-databases > /backup/mysql_$(date +%F).sql
- PostgreSQL:pg_dumpall -U postgres > /backup/postgres_$(date +%F).sql
-
- 可选 同步到远程存储(异地容灾)
- rsync -avz /backup/ user@remote:/backup/
说明:以上路径与示例命令可按你的实际部署调整;使用 rsync 的 –delete 可保持目标与源一致,适合镜像备份。
三 自动化备份脚本与定时任务
- 示例脚本 /usr/local/bin/backup_ftp.sh(请先 chmod +x)
- #!/bin/bash
set -e
BACKUP_ROOT=“/backup”
DATE=$(date +%F)
DATA_SRC=“/var/www/html”
CONF_SRC=“/etc/vsftpd.conf /etc/proftpd* /etc/pam.d/vsftpd”
CORE_SRC=“/etc/passwd /etc/shadow /etc/group /etc/fstab”
MYSQL_OPTS=“–single-transaction --routines --triggers --all-databases”
mkdir -p “$BACKUP_ROOT/$DATE”
1) 数据
tar -czf “$BACKUP_ROOT/$DATE/ftp_data_$DATE.tar.gz” -C / “$DATA_SRC”
2) 配置
tar -czf “$BACKUP_ROOT/$DATE/etc_ftp_$DATE.tar.gz” -C / $CONF_SRC
3) 核心系统文件
tar -czf “$BACKUP_ROOT/$DATE/etc_core_$DATE.tar.gz” -C / $CORE_SRC
4) 数据库(按需启用其一)
mysqldump -u root -p$MYSQL_ROOT_PASS $MYSQL_OPTS > “$BACKUP_ROOT/$DATE/mysql_$DATE.sql”
pg_dumpall -U postgres > “$BACKUP_ROOT/$DATE/postgres_$DATE.sql”
5) 同步到远程(可选)
rsync -avz --delete “$BACKUP_ROOT/$DATE/” user@remote:/backup/
6) 清理 7 天前
find “$BACKUP_ROOT” -maxdepth 1 -type d -mtime +7 -exec rm -rf {} +
- 定时任务(每天 02:00 执行)
- 0 2 * * * /usr/local/bin/backup_ftp.sh >> /var/log/backup_ftp.log 2>&1
提示:将脚本中的 DATA_SRC、CONF_SRC 等路径替换为你的实际路径;数据库口令可通过配置文件或凭据文件安全注入,避免硬编码。
四 加密与远程传输方案
- 使用 Duplicity(支持加密与增量)
- 本地加密备份:
- duplicity full /var/www/html file:///backup/ftp_data_encrypted/
- 增量与定时(GPG 加密):
- duplicity --encrypt-key YOUR_GPG_KEY_ID --full-if-older-than 7D /var/www/html s3://your-bucket/ftp/
- 0 3 * * * duplicity --encrypt-key YOUR_GPG_KEY_ID /var/www/html s3://your-bucket/ftp/ >> /var/log/duplicity.log 2>&1
- 使用 Backup Ninja 统一编排
- 安装:apt install backupninja
- 配置:ninjahelper 新建任务,选择本地/远程、增量、以及 MySQL/MariaDB 备份等。
五 恢复与验证
- 基本恢复流程
-
- 停止服务(减少写入冲突):systemctl stop vsftpd 或 systemctl stop proftpd
-
- 恢复数据:tar -xzvf /backup/ftp_data_YYYY-MM-DD.tar.gz -C /
-
- 恢复配置:tar -xzvf /backup/etc_ftp_YYYY-MM-DD.tar.gz -C /
-
- 恢复数据库:mysql -u root -p < /backup/mysql_YYYY-MM-DD.sql 或 psql -U postgres -f /backup/postgres_YYYY-MM-DD.sql
-
- 启动服务:systemctl start vsftpd 或 systemctl start proftpd
- 验证要点
- 检查目录权限与属主(如 /var/www/html 应为 www-data:www-data 或你的 FTP 运行用户)
- 抽查若干大文件与最近修改时间
- 用 FTP 客户端连接并做上传/下载/删除的真实业务验证
- 定期在测试环境演练恢复,确保备份可用。