温馨提示×

Ubuntu系统vsftp备份与恢复技巧

小樊
31
2025-12-24 05:47:53
栏目: 智能运维

Ubuntu 下 vsftpd 备份与恢复实用技巧

一 备份清单与范围

  • 配置文件:备份 /etc/vsftpd.conf;如使用用户列表,一并备份 /etc/vsftpd.user_list/etc/vsftpd.ftpusers。如使用虚拟用户,还需备份数据库文件(如 /etc/vsftpd/virtual_users.db)。
  • 数据目录:按实际配置备份 FTP 根目录(常见为 /var/ftp/srv/ftp/home/ftp/var/www/html 等)。
  • 认证与账户:如采用系统用户,建议额外备份 /etc/passwd/etc/shadow 中相关条目(注意合规与最小暴露)。
  • 日志文件:备份 /var/log/vsftpd.log 以便审计与问题排查。
  • 服务单元(可选):如需还原服务文件,可备份 /lib/systemd/system/vsftpd.service
    以上路径在不同部署中可能不同,请以实际配置为准。

二 手动备份与恢复步骤

  • 备份
    1. 配置文件
      sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak
      sudo cp /etc/vsftpd.user_list /etc/vsftpd.user_list.bak 2>/dev/null || true
      sudo cp /etc/vsftpd.ftpusers /etc/vsftpd.ftpusers.bak 2>/dev/null || true
    2. 数据目录(示例为 /var/ftp,按实际替换)
      sudo tar czvf /backup/vsftpd_data_$(date +%F).tar.gz -C /var/ftp .
    3. 虚拟用户数据库(如使用)
      sudo cp /etc/vsftpd/virtual_users.db /backup/virtual_users.db.bak 2>/dev/null || true
    4. 日志(可选)
      sudo cp /var/log/vsftpd.log /backup/vsftpd.log.bak 2>/dev/null || true
  • 恢复
    1. 配置文件
      sudo cp /backup/vsftpd.conf.bak /etc/vsftpd.conf
    2. 数据目录
      sudo tar xzvf /backup/vsftpd_data_YYYY-MM-DD.tar.gz -C /
    3. 虚拟用户数据库(如使用)
      sudo cp /backup/virtual_users.db.bak /etc/vsftpd/virtual_users.db
    4. 权限与所有权(关键)
    • 系统用户:将目录属主设为对应用户与组,例如:sudo chown -R ftpuser:ftpuser /var/ftp
    • 虚拟用户:将属主设为运行 vsftpd 的系统用户(常见为 ftp):sudo chown -R ftp:ftp /var/ftp
    1. 使配置生效
      sudo systemctl restart vsftpd
    2. 验证
      sudo systemctl status vsftpd && sudo tail -n50 /var/log/vsftpd.log
      说明:为减少写入时不一致,建议在备份数据目录前短暂停服(见下一节)。

三 自动化与远程备份

  • 本地定时备份脚本(示例)
    #!/usr/bin/env bash
    set -e
    BACKUP_DIR=“/backup/vsftpd”
    DATE=$(date +%F)
    mkdir -p “$BACKUP_DIR”

    配置文件

    cp -a /etc/vsftpd.conf “$BACKUP_DIR/vsftpd.conf.$DATE”
    [ -f /etc/vsftpd.user_list ] && cp -a /etc/vsftpd.user_list “$BACKUP_DIR/user_list.$DATE”
    [ -f /etc/vsftpd.ftpusers ] && cp -a /etc/vsftpd.ftpusers “$BACKUP_DIR/ftpusers.$DATE”
    [ -f /etc/vsftpd/virtual_users.db ] && cp -a /etc/vsftpd/virtual_users.db “$BACKUP_DIR/virtual_users.db.$DATE”

    数据目录(示例为 /var/ftp)

    tar czvf “$BACKUP_DIR/vsftpd_data.$DATE.tar.gz” -C /var/ftp .

    日志(可选)

    [ -f /var/log/vsftpd.log ] && cp -a /var/log/vsftpd.log “$BACKUP_DIR/vsftpd.log.$DATE”

    清理 7 天前

    find “$BACKUP_DIR” -type f -mtime +7 -delete
    exit 0
  • 定时任务(每天 02:00)
    0 2 * * * /usr/bin/bash /usr/local/bin/backup_vsftpd.sh
  • 远程备份(rsync over SSH)
    rsync -avz --delete -e ssh /backup/vsftpd/ user@backup-server:/backup/vsftpd/
    提示:脚本中可根据需要加入“停服—备份—启服”逻辑;远程备份建议配置 SSH 免密登录并限制备份用户的权限。

四 迁移与一致性策略

  • 迁移步骤
    1. 在源机按第二节完成备份;2) 在目标机安装 vsftpd(如 Ubuntu 22.04:sudo apt update && sudo apt install vsftpd);3) 将备份的配置与数据复制到目标机并修正路径、权限与属主;4) 如启用被动模式,确保 pasv_min_port/pasv_max_port 已在防火墙放行;5) 重启服务并测试上传/下载。
  • 一致性建议
    • 对高写入场景,优先采用“停服—备份—启服”或使用支持快照的文件系统/块存储快照,减少备份窗口内数据不一致。
    • 使用 rsync 增量同步可减少停机时间:先停服,再 rsync 一次,然后启服,再做一次增量以追平备份期间的变更。
    • 恢复后务必检查:服务状态、被动端口连通性、目录权限与属主、日志无报错。

五 常见问题与快速排查

  • 配置路径差异:不同教程或版本中配置文件可能位于 /etc/vsftpd.conf/etc/vsftpd/vsftpd.conf,恢复前请确认实际路径。
  • 权限与属主:恢复后若无法上传,检查目标目录对运行 vsftpd 的用户是否可写;虚拟用户场景通常属主应为 ftp:ftp
  • 被动模式端口:若启用 pasv_enable=YES,需在防火墙放行 pasv_min_port–pasv_max_port(如 40000:50000)。
  • 日志与验证:通过 systemctl status vsftpdtail -f /var/log/vsftpd.log 快速定位问题。
  • 服务单元变更:一般不常备份/替换 systemd 单元文件,除非明确做过自定义;变更后需执行 daemon-reload。

0