在Ubuntu上配置FTP自动备份的完整步骤
首先确保系统已安装vsftpd(轻量级FTP服务器),通过以下命令安装:
sudo apt update
sudo apt install vsftpd
编辑vsftpd配置文件(/etc/vsftpd.conf),调整以下关键参数以保障安全性和功能性:
sudo nano /etc/vsftpd.conf
需设置的参数:
listen=YES:启用FTP服务器监听(仅IPv4)。listen_ipv6=NO:禁用IPv6(若无需IPv6)。anonymous_enable=NO:禁止匿名用户登录(防止未授权访问)。local_enable=YES:允许本地系统用户登录FTP。write_enable=YES:允许用户上传/修改文件。chroot_local_user=YES:将用户限制在其主目录(增强安全性,避免访问系统其他文件)。allow_writeable_chroot=YES:允许chroot目录可写(若用户需要上传文件)。xferlog_enable=YES:启用传输日志(记录上传/下载操作,便于排查问题)。保存并退出编辑器后,重启vsftpd服务使配置生效:
sudo systemctl restart vsftpd
sudo systemctl enable vsftpd # 设置开机自启
选择本地或FTP服务器上的目录作为备份存储位置(以本地/backup/ftp为例):
sudo mkdir -p /backup/ftp
sudo chown ftpuser:ftpuser /backup/ftp # 将目录所有者设为FTP用户(如ftpuser)
sudo chmod 755 /backup/ftp # 设置目录权限(所有者可读写,其他用户只读)
创建备份脚本(如/usr/local/bin/backup_ftp.sh),使用tar命令打包源目录并压缩为.tar.gz文件,同时添加日志记录和旧备份清理功能:
sudo nano /usr/local/bin/backup_ftp.sh
脚本内容示例(需替换SOURCE_DIR为实际源目录):
#!/bin/bash
# 定义变量
SOURCE_DIR="/path/to/your/data" # 需备份的源目录(如/home/user/Documents)
BACKUP_DIR="/backup/ftp" # 本地备份存储目录
DATE=$(date +"%Y%m%d_%H%M%S") # 当前日期时间(用于生成唯一备份文件名)
BACKUP_FILE="$BACKUP_DIR/ftp_backup_$DATE.tar.gz" # 备份文件名
LOG_FILE="/var/log/ftp_backup.log" # 备份日志文件
# 记录备份开始时间
echo "===== 备份开始: $DATE =====" >> $LOG_FILE
# 执行备份(打包并压缩源目录)
tar -czvf $BACKUP_FILE $SOURCE_DIR 2>> $LOG_FILE # 2>> 将错误信息追加到日志
# 检查备份是否成功
if [ $? -eq 0 ]; then
echo "备份成功: $BACKUP_FILE" >> $LOG_FILE
else
echo "备份失败,请检查日志" >> $LOG_FILE
fi
# 删除7天前的旧备份(保留最近7天)
find $BACKUP_DIR -type f -name "ftp_backup_*.tar.gz" -mtime +7 -exec rm -f {} \; 2>> $LOG_FILE
echo "旧备份清理完成" >> $LOG_FILE
echo "===== 备份结束: $(date +"%Y-%m-%d %H:%M:%S") =====" >> $LOG_FILE
保存并退出编辑器后,赋予脚本执行权限:
sudo chmod +x /usr/local/bin/backup_ftp.sh
使用crontab配置定时执行备份脚本(如每天凌晨2点执行):
crontab -e
在文件末尾添加以下行(0 2 * * *表示每天凌晨2点):
0 2 * * * /usr/local/bin/backup_ftp.sh >/dev/null 2>&1
说明:
>/dev/null 2>&1:将脚本的标准输出和错误输出重定向到空设备(避免cron发送不必要的邮件)。/usr/local/bin/backup_ftp.sh,检查/backup/ftp目录是否生成备份文件,以及/var/log/ftp_backup.log是否有成功记录。grep CRON /var/log/syslog查看cron是否按计划执行了备份任务。.netrc文件存储凭据(需设置chmod 600 ~/.netrc),或采用SSH密钥认证(更安全)。/var/log/ftp_backup.log,确保备份无错误;若备份失败,及时排查源目录权限、磁盘空间等问题。vsftpd.conf中的ssl_enable=YES等参数。