Debian SFTP备份与恢复指南
SFTP基于SSH协议运行,备份需覆盖SSH配置、用户认证信息、SFTP用户目录及相关密钥,确保服务可完整恢复。
SSH服务是SFTP的基础,其主配置文件sshd_config包含SFTP子系统设置(如Subsystem sftp指令),需优先备份:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
SFTP用户的账户信息(用户名、UID/GID)及加密密码存储在以下系统文件中,需完整备份:
sudo cp /etc/passwd /etc/passwd.bak
sudo cp /etc/shadow /etc/shadow.bak
sudo cp /etc/group /etc/group.bak # 若使用用户组管理SFTP访问
若存在专用SFTP用户目录(如/home/sftpuser),需备份目录内所有数据(包括文件、子目录及权限):
sudo cp -r /home/sftpuser /home/sftpuser.bak # 替换为实际用户目录
若服务器使用SSH密钥认证(如authorized_keys或主机密钥),需备份密钥文件以避免认证失效:
sudo cp -r /etc/ssh/ssh_host_* /etc/ssh/ssh_host_backup/ # 主机密钥
sudo cp /home/sftpuser/.ssh/authorized_keys /home/sftpuser/.ssh/authorized_keys.bak # 用户授权密钥(若有)
通过脚本实现定期自动备份,减少人工操作。以下脚本将上述文件打包为压缩包并存储到指定目录:
#!/bin/bash
# 配置备份目录与文件名
BACKUP_DIR="/backup/sftp"
DATE=$(date +%Y%m%d)
BACKUP_FILE="$BACKUP_DIR/sftp_backup_$DATE.tar.gz"
# 创建备份目录
sudo mkdir -p "$BACKUP_DIR"
# 打包备份文件
sudo tar -czvf "$BACKUP_FILE" \
/etc/ssh/sshd_config \
/etc/passwd \
/etc/shadow \
/etc/group \
/home/sftpuser # 替换为实际用户目录
# 可选:删除7天前的旧备份
find "$BACKUP_DIR" -type f -name "sftp_backup_*.tar.gz" -mtime +7 -exec rm {} \;
echo "SFTP备份完成:$BACKUP_FILE"
赋予脚本执行权限并添加到cron(如每天凌晨2点执行):
chmod +x /path/to/sftp_backup.sh
(crontab -l ; echo "0 2 * * * /path/to/sftp_backup.sh") | crontab -
恢复需按配置文件→用户认证→用户目录→密钥的顺序操作,确保服务正常启动。
将备份的sshd_config.bak复制回原路径,覆盖现有文件:
sudo cp /etc/ssh/sshd_config.bak /etc/ssh/sshd_config
将备份的系统文件复制回原路径,注意/etc/shadow文件的权限(仅root可读):
sudo cp /etc/passwd.bak /etc/passwd
sudo cp /etc/shadow.bak /etc/shadow
sudo cp /etc/group.bak /etc/group
将备份的用户目录复制回原路径,恢复文件权限(如755 for目录、644 for文件):
sudo cp -r /home/sftpuser.bak /home/sftpuser # 替换为实际用户目录
sudo chown -R sftpuser:sftpuser /home/sftpuser # 恢复所有权
sudo chmod -R 755 /home/sftpuser # 恢复目录权限
将备份的密钥文件复制回原路径,恢复权限(主机密钥需600,用户授权密钥需600):
sudo cp -r /etc/ssh/ssh_host_backup/* /etc/ssh/ # 主机密钥
sudo chown root:root /etc/ssh/ssh_host_* # 设置正确所有权
sudo chmod 600 /etc/ssh/ssh_host_* # 设置正确权限
sudo cp /home/sftpuser/.ssh/authorized_keys.bak /home/sftpuser/.ssh/authorized_keys # 用户授权密钥
sudo chown sftpuser:sftpuser /home/sftpuser/.ssh/authorized_keys
sudo chmod 600 /home/sftpuser/.ssh/authorized_keys
恢复完成后,重启SSH服务使配置生效:
sudo systemctl restart ssh
diff命令对比备份文件与当前文件,确保内容一致:diff /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
sftp命令或FileZilla)连接服务器,验证用户认证及目录访问权限:sftp sftpuser@localhost
输入密码后,尝试上传/下载文件,确认功能正常。/etc/shadow)有足够的读取权限(root用户),避免权限错误导致恢复失败。