Linux-全网备份实战案例&rsync&邮件发送

项目准备

服务端:backup:172.16.1.41

客户端1:nfs:172.16.1.31

客户端2: web01:172.16.1.7

1.1 服务端backup-rsync配置文件

bash 复制代码
[root@backup ~]# cat /etc/rsyncd.conf
#created by linux 2024-8-29
###########rsyncd.conf start###########
fake super = yes
uid = rsync
gid = rsync
use chroot = no
max connections = 2000
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsync.log
timeout = 600
ignore error
read only = false
list = false
#hosts allow = 10.0.0.0/24
#hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
#######################################
[backup]
path = /backup

1.2 rsync进一步配置

bash 复制代码
#创建rsync帐号
[root@backup ~]# useradd -s /sbin/nologin -M rsync
#创建密码文件,格式为'用户名:密码'
[root@backup ~]# echo 'rsync_backup:1' > /etc/rsync.password
#设置权限为600
[root@backup ~]# chmod 600 /etc/rsync.password 
#创建共享目录
[root@backup ~]# mkdir -p /backup
#设置文件拥有者为rsync
[root@backup ~]# chown -R rsync.rsync /backup
#启动服务
[root@backup ~]# systemctl start rsyncd
#设置开机自启
[root@backup ~]# systemctl enable rsyncd
#测试服务是否可用
[root@backup ~]# rsync -av /etc/hostname rsync_backup@172.16.1.41::backup

2.1 邮件配置

邮件,最简单的一种发送方式,以139邮箱为例,其它邮箱类似

1.配置发件人:139邮箱

获取:授权码(用户密码)

linux配置 /etc/mail.rc

完成

2.发件人:qq

通过命令发送

3.配置发件人

获取授权码

2.2配置linux mail.rc 配置发件人信息

bash 复制代码
cat >>/etc/mail.rc <<EOF
#以加密的465端口
set nss-config-dir=/etc/pki/nssdb
set smtp-user-starttls
set ssl-verify=ignore
#配置发件人
set from=您的邮箱@139.com
#加密465端口
set smtp=smtps://smtp.139.com:465
#邮箱名字
set smtp-auth-user=您的邮箱@139.com
#授权码
set smtp-auth-password=填写您的139授权码
set smtp-auth=login

#下面3行用于配置加密方式进行传输
set nss-config-dir=/etc/pki/nssdb/
set smtp-user-starttls
set ssl-verify=ignore
EOF

虽然有报错,但是目的端也是能收到邮件的

2.3 邮件提示证书报错解决方案

bash 复制代码
echo -n | openssl s_client -connect smtp.139.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /etc/pki/nssdb/139.crt
certutil -A -n "GeoTrust SSL CA" -t "C,," -d /etc/pki/nssdb/ -i /etc/pki/nssdb/139.crt
certutil -A -n "GeoTrust Global CA" -t "C,," -d /etc/pki/nssdb/ -i /etc/pki/nssdb/139.crt
certutil -L -d /etc/pki/nssdb/
cd /etc/pki/nssdb/
certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ./ -i 139.crt

2.4 两种邮件发发送方式

bash 复制代码
mail -s '你的网站巡检信息' 123456789@qq.com < mail.txt
echo '你的网站巡检信息在附件' | mail -s "巡检结果" -a  mail.txt 123456789@qq.com

3.1 客户端备份脚本:nfs-172.16.1.31

bash 复制代码
#创建rsync密码文件,只需要保存密码即可
[root@nfs ~]# echo '1' > /etc/rsync_client
#设置权限为600
[root@nfs ~]# chmod 600 /etc/rsync_client 
#备份脚本
[root@nfs ~]# cat /server/scripts/conf-bak.sh 
#!/bin/bash
#authro linux by 2024-08-29
#1.变量
ip=` hostname -I | awk '{print $2}'`
time=`date +%F_%w`
backup_dir=/backup/${ip}
backup_file=conf-${time}.tar.gz
backup_ip=172.16.1.41
#2.备份
mkdir -p ${backup_dir}
tar -zcf ${backup_dir}/${backup_file} /etc/  /var/spool/cron
#2.1 生成md5较验文件
md5sum ${backup_dir}/${backup_file} > ${backup_dir}/fingerprint.md5
#3.推送
rsync -a ${backup_dir} rsync_backup@${backup_ip}::backup  --password-file=/etc/rsync_client
#4.清理
find /backup -name "*.tar.gz" -type f -mtime +7 |xargs rm -rf

#定时任务
[root@nfs ~]# crontab -l
#备份任务
00 00 * * * sh /server/scripts/conf-bak.sh &>/dev/null

3.2 将nfs客户端的脚本推送到另一机器web01客户端上

bash 复制代码
[root@nfs ~]# scp /server/scripts/conf-bak.sh  root@172.16.1.7:/server/scripts/
[root@nfs ~]# scp /etc/rsync_client root@172.16.1.7:/etc/

3.3 web01-172.16.1.7客户端上的定时任务

bash 复制代码
#定时任务
[root@web01 ~]# crontab -l
#备份任务
00 00 * * * sh /server/scripts/conf-bak.sh &>/dev/null

4. 服务端脚本:backup-172.16.1.41

bash 复制代码
#!/bin/bash
#author linux by 2024-08-29
#检查备份,清理旧的备份
#变量
result_file=/server/scripts/result.txt
#0清理旧的备份
find /backup -name '*.tar.gz' -type f -mtime +180 |xargs rm -rf
#1.统计备份结果
 find /backup -name '*.tar.gz' -type f |xargs \
ls -lh |\
 awk -F'[ /]+' 'BEGIN{print "IP地址","备份文件名字","大小"} {print $(NF-1),$NF,$5}'|\
 column -t >${result_file}
#1.2md5较验
echo "#下面信息为备份的md5校验信息" >> ${result_file}
#方法1
find /backup/ -name 'fingerprint.md5' | xargs md5 -c >> ${result_file}
#方法2
#md5sum -c /backup/*/fingerprint.md5 >> ${result_file}

#2.发送邮件
mail -s "每日备份结果" 12345678@qq.com < ${result_file}

#定时任务
[root@backup ~]# crontab -l
#定时运行检查脚本
00 00 * * * sh /server/scripts/check.sh &>/dev/null

5、额外:增加校验功能

​ 检查单个md5值

​ md5sum -c 根据md5文件记录进行对比

bash 复制代码
#创建测试文件
[root@backup ~]# echo '123'> test.txt
#检查md5值
[root@backup ~]# md5sum test.txt
ba1f2511fc30423bdbb183fe33f3dd0f  test.txt   #文件名 md5值
#将文件名和md5值追加到指定文件
[root@backup ~]# md5sum test.txt > test.md5
#通过md5值文件,检查文件的md5信息(是否变化)
[root@backup ~]# md5sum -c test.md5
test.txt: OK   #OK表示没有变化
#修改文件内容,测试md5值是否变化
[root@backup ~]# echo '567' >> test.txt
重新检测md5文件
[root@backup ~]# md5sum -c test.md5
test.txt: FAILED #FAILED表示文件内容发生变化,md5值变了
md5sum: WARNING: 1 computed checksum did NOT match

检查多个文件的md5值

bash 复制代码
#给/etc/下面所有的文件创建MD5保存到指定文件中
find /etc/ -type f | xargs md5sum  > etc.md5
#进行校验
md5sum -c etc.md5
#只显示md5异常的文件
md5sum -c --quiet etc.md5
相关推荐
我科绝伦(Huanhuan Zhou)2 分钟前
【免费】MySQL自动化巡检工具,一键生成WORD巡检报告
运维·mysql·自动化
SiriusSun_10 分钟前
Windows10 wsl2 ubuntu22.04 docker安装
运维·docker·容器
longerxin202012 分钟前
ubuntu所有版本镜像下载链接
linux·运维·ubuntu
数据雕塑家19 分钟前
Linux下的花式「隔空」文件传输魔法
linux·运维·服务器
倚肆23 分钟前
CSS中transition属性详解
前端·css
uoscn25 分钟前
链接脚本(Linker Scripts)
linux·arm开发·arm
快递鸟32 分钟前
物流信息总滞后?快递鸟在途监控 API,毫秒级响应让物流透明不等待
前端
fruge1 小时前
前端注释规范:如何写“后人能看懂”的注释(附示例)
前端
小飞大王6661 小时前
JavaScript基础知识总结(四):常见内置构造函数,正则表达式,作用域与闭包
前端·javascript·正则表达式
wuxingge1 小时前
浪潮服务器-型号NF5270M3做raid
服务器