備份服務概述
備份服務:需要使用到腳本,打包備份,定時任務.
備份服務:rsyncd服務,不同主機之間數據傳輸.
- 特點:
- rsync是個服務也是命令
- 使用方便,具有多種模式
- 傳輸數據的時候是增量傳輸
增量與全量:
全量 :無論多少數據全部推送走(scp)
增量:只會把修改新建了的文件傳輸走(rsync)
把/etc/目錄傳輸到另外一臺機器的/tmp/下面
scp -r /etc/sysconfig/ root@192。168.28.131:/tmp/
rsync -avz /etc/sysconfig/ root@192.168.28.131:/mnt/
rsync企業應用場景:
應用場景(業務場景) 應用建議
rsync作為命令使用 臨時拉取,推送數據.未來這個需求可以通過scp命令實現.
定時備份:rsync服務+定時任務 定時備份,定期備份案例.(定時任務進行備份+通過rsync傳輸備份)
實時同步:rsync服務+sersync/lsyncd實現實時同步 解決存儲服務單點問題
rsync服務與異地容災找一個異地的服務器存放備份
注意:單點問題:同一個功能/同一個服務,只有1臺節點.
rsync不同的模式
1.1rsync本地模式
rsync -a /etc/ /tmp/
rsync -a /etc /opt/
在rsync對于目錄 /etc/ /etc是有區別的
/etc /etc目錄+目錄的內容
/etc/ /etc/目錄下面的內容
1.2遠程模式
格式
rsync -a 源文件 目標
推送:rsync /etc/hostname root@192.168.28.131:/tmp
拉取:rsync root@192.168.28.131:/etc/hosts /opt/
#推送/etc/hostname到192.168.28.131的/tmp/目錄
rsync -a /etc/hostname root@192.168.28.131:/tmp
#推送/etc目錄及目錄內容到131的/tmp下面
##推送第1次 全量
rsync -av /etc root@192.168.28.131:/tmp
##推送第2次 發現沒有推送
rsync -av /etc root@192.168.28.131:/tmp
##創建文件再次推送
touch /etc/wulin.txt
rsync -av /etc root@192.168.28.131:/tmp
#通過scp推送 /etc目錄及目錄內容到131的 /opt下面
scp -r /etc/ root@192.168.28.131:/opt/
-r遞歸傳輸
1.3守護進程模式
服務使用流程
部署
配置
啟動,使用
優化
故障
自動化
(監控,日志,安全,自動部署,容器)
1.3.1檢查是否安裝
檢查安裝 更新
yum install -y rsync
檢查軟件包內容
/etc/rsyncd.conf #配置文件
/usr/bin/rsync #命令
/usr/lib/systemd/system/rsyncd.service #systemctl對應的配置文件
1.3.2進行配置
[root@backup /wulin]# cat/etc/rsyncd.conf
#created by wulin 2024-5-12
##rsyncd.conf start##
fake super =yes
uid = rsync
gid = rsync
use chroot = no
max connections = 2000
timeout = 600
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
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
#####################################
[data]
comment = www by wulin 2024-5-12
path = data
#啟動服務
systemctl enable rsyncd
systemctl start rsyncd
#檢查進程
ps -ef |grep rsync
#檢查端口
ss -lntup |grep rsync
1.3.2后續配置
#1.添加虛擬用戶
useradd -s /sbin/nologin -M rsync#2.創建密碼文件
密碼文件格式:用戶名:密碼
echo 'rsync_backup:123 ' >/etc/rsync.password
chmod 600 /etc/rsync.password#3.共享目錄與權限
mkdir /data/#啟動服務
systemctl start rsyncd
systemctl enable rsyncd
#訪問測試:
rsync -avz /etc/hosts rsync_backup@192.168.28.41::data
rsync_backup是服務端配置文件中的認證用戶
data表示模塊名字
本地測試:
[root@backup ~]# rsync -av /etc/hostname
rsync_backup@192.168.28.41::data
Password:
sending incremental file list
hostname
sent 102 bytes
received 43 bytes 41.43 bytes/sec
total size is 7
speedup is 0.05[root@backup ~]# ll /data/
total 4
-rw-r--r-- 1 rsync rsync 17:02 hostname
#客戶端測試:
##基本測試
[root@nfs01 ~]# rsync -avz /etc/hosts
rsync_backup@172.16.1.41::data
Password:
sending incremental file list
hosts
sent 214 bytes
received 43 bytes 73.43 bytes/sec
total size is 329 speedup is 1.28
##免密碼傳輸數據到服務器
[root@nfs01 ~]#echo ‘123’ >/etc/rsync.passwords
[root@nfs01 ~]#chmod 600 /etc/rsync.passwords
[root@nfs01 ~]#
[root@nfs01 ~]#rsync -avz /etc/hosts rsync_backup@172.16.1.41::data --password-file=/etc/rsync.passwords
sending incremental file list
sent 47 bytes received 20 bytes 134.00 bytes/sec
total size is 333 speedup is 4.97
傳到客戶端
[root@nfs01 ~]#rsync -avz /tmp/etc.tar.gz rsync_backup@172.16.1.41::data --password-file=/etc/rsync.passwords
sending incremental file list
etc.tar.gz
1.4守護進程補充
uid,gid與auth user
1.用戶執行命令:rsync -avz /tmp/etc.tar.gz rsync_backup@backup::data --passwordfile=/etc/rsync.password
2.服務端收到數據:判斷rsync_backup用戶,然后等待輸入密碼
3.把用戶名和密碼與配置文件里面對比auth user和secretsfile
4.通過后,傳輸數據
5.數據到達服務器所有者被修改為uid和gid指定的(rsync)
6.數據寫入data模塊(/data/)目錄下面.
免密的方式連接服務端(命令行指定客戶端密碼文件)
客戶端密碼文件只存儲密碼即可
echo 123 >/etc/client.rsync
chmod 600 /etc/client.rsync
rsync -avz /etc/hosts
rsync_backup@172.16.1.41::data --password-
file=/etc/client.rsync
訪問控制-安全措施
hosts allow只準許指定的ip或網段訪問
hosts deny拒絕.
配置只準許172.16.1.0/24網段訪問
2.1rsync選項
-a
- -rlptgoD
- -r遞歸復制
- -l復制軟連接
- -p保持權限不變
- -m保持修改時間不變
- -o所有者不變
- -g用戶組不變
- -D --devices --specials設備與特殊文件
-v 顯示過程
-z 傳輸數據時候進行壓縮(公網)
-p 顯示每rsync -av . root@192.168.28.131:/tmp/ --exclude=04rsync -av . root@192.168.28.131:/mnt --exclude={04,05}個文件傳輸過程(進度條)斷點續傳–partial --progress
–bwlimit 限速注意不要與-z一起使用
–exclude、–exclude-from排除
–delete目標目錄與源目錄保持一致的傳輸
限速并傳輸
rsync -aP --bwlimit=500kb /tmp/1g
192.168.28.131:/mnt/傳輸并排除
rsync -av . root@1192.168.28.1311:/tmp/ --exclude=04
rsync -av .
root@192.168.28.131:/mnt --exclude=
{04,05}通過文件內容進行排除
[root@backup /wulin]# cat /tmp/paichu.txt
03
05
10[root@backup /wulin]# rsync -av .
root@192.168.28.131:~ --exclude-from=/tmp/paichu.txt保持源與目標數據一致
rsync -avP --delete . root@192.168.28.131:/tmp/
故障總結
password mismatch
backup rsyncd[3177]: authfailed on module data from UNKNOWN(10.0.0.41) for rsync_backup: no secretsfile
no secrets file
selinux和防火墻
項目案例
可能來自于老大的一句話:網站數據需要備份,你操作一下
接下來的內容需要你自己規劃,備份什么內容?如何備份?如何收集備份(統一存放備份)?保留時間?都是什么系統?什么系統的版本?
-
備份什么?
-
數據(用戶數據庫)數據庫 存儲
-
配置文件
-
腳本和代碼
-
網站代碼
-
日志收集
-
如何備份?
-
如何收集?
rsync服務收集備份(rsync客戶端推送備份到rsync服務器)
2.2項目流程:
1)環境準備
1)環境準備
角色 主機 運行服務 | ||
---|---|---|
存放備份 backup | rsync服務端 | |
生成備份 nfs01 | rsync客戶端,其他服務 | |
生產備份 web01 | rsync客戶端,其他服務 |
-
項目步驟
這里為操作步驟,未來的工作還會有溝通(與其他部門進行商討)定期匯報
| 步驟說明 詳細內容 | |
| ------------------------------------------------------------ | ---- |
| rsync服務端并調試 服務端配置 、back目錄 | |
| rsync客戶端節點配置腳本(備份) 備份 推送 清理 | |
| 其他節點匹配定時任務 定時運行腳本 | |
| 在備份服務器上檢查并發送郵件 在rsync服務端檢查備份并發送郵件 | | -
配置與檢查rsync服務端與客戶端
vim/etc/rsyncd.conf
[root@backup ~]#mkdir -p /backup/ #創鍵目錄chown -R rsync.rsync /backup/ll -d /backup/檢查
改完了配置文件進行重啟
systemctl restart rsyncd(端口號為873)
ch在客戶端測試
rsync -av /etc/hostname rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.passwords
sending incremental file list
hostname
在備份服務器看是否傳輸過來
ll /backup/
cat /backup/hostname
4)書寫備份腳本
書寫腳根據企業,任務需求合理高效進行書寫腳本,寫腳本在多窗口化進行編寫邊測試(整理這個的需要命令,寫成腳本(引用變量名實現腳本萬能功能–在相同類型機器上省時間省力氣–當然注意整體磁盤空間內存信息,在架構搭建初期各部門進行會議交流))
在nf01這個客戶端上vim /server/scripts/bak_conf.sh(寫腳本編寫腳本邊進行測試)[root@nfs01 ~]#hostname -I[root@nfs01 ~]#hostname -I |awk '{print $2}'
在存儲服務器上對推送腳本進行測試
mkdir -p /backup/172.16.1.131
tar zcf /backup/172.16.1.131/etc.tar.gz /etc /var/spool/cron/
ll /backup/172.16.1.131/
tree /backup/(企業數量文件內容特別多的時候,可以采用樹狀結構)
rsync -a /backup/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.passwords
檢查服務端是否推送過來
tree /backup/
測試成功,將腳本寫入腳本
繼續在客戶端測試刪除舊的客戶端備份命令
[root@nfs01 ~]#find /backup/ -type f -name “*.tar.gz”
[root@nfs01 ~]#find /backup/ -type f -name “*.tar.gz” -mtime +7 |xargs rm -f
(這里xargs后不支持別名 ,rm刪文件會接提示)
測試成功寫入腳本!
整個備份服務器腳本配置文件:
腳本運行完進行測試
rm -fr /backup/
把服務端的ip可以進行刪掉,這里如果刪除了backup目錄,備份服務器會報錯
刪掉客戶端目錄并tree
運行腳本并檢查服務端是存在backup
未來我們只需要調整腳本備份內容(目錄)ip即可
寫定時任務:
crontab -e
查看日志tail -f /var/log/cron
date
查看結果(每2秒進行執行)
查看服務端:
(說明測試沒有問題,可以在定時任務按照企業時間需求及追加目錄進行配置
5)服務端備份腳本調試
檢查備份并清除舊的備份腳本
vim /server/scripts/check.sh
find /backup/ -type f -name "*.tar.gz" |xargs ls -lhd
find /backup/ -type f -name "*.tar.gz" |awk '{print $NF,$5}'
find /backup/ -type f -name "*.tar.gz" |awk
-F '[ /]+' '{print $(NF-1),NF,$5}'
讓內容多一點將nfs01客戶端腳本文件傳入到web01服務器上
[root@nfs01~]#scp/server/scripts/bak_conf.sh 192.168.28.7:/server/scripts/
[root@nfs01 ~]#scp /etc/rsync.password 192.168.28.7:/etc
[root@nfs01 ~]#scp /var/spool/cron/root 192.168.28.7:/var/spoo
l/cron/
檢查傳輸到web01服務器內容
[root@web01 ~]#ll /etc/rsync.password
[root@web01~]#ll/etc/rsync.password /server/scripts/bak_conf.sh
[root@web01 ~]#ll /etc/rsync.password /var/spool/cron/root
[root@web01~]#head-30/etc/rsync.password /server/scripts/bak_conf.sh /var/spool/cron/root
在web01服務器運行bak_conf.sh腳本
在備份服務器進行檢查如果成功會有172.16.1.7這一行
[root@backup ~]#find /backup/ -type f -name “*.tar.gz” |awk -F ‘[ /]+’ ‘{print $(NF-1),NF,$5}’
測試統計結果命令并寫入腳本:
[root@backup ~]#awk -F: ‘BEGIN{print “用戶名”,“UID”}{print 1 , 1, 1,?3}’ /etc/passwd
完成腳本(清除舊的腳本統計結果并將結果發送到郵件)
[root@backup /backup]#sh /server/scripts/check.sh
如果在郵箱中沒有見到信息,在垃圾郵箱查找(被郵箱系統屏蔽掉了)
配置定時任務:
crontab -e
然后觀察日志文件及郵箱信息
[root@backup /backup]#tail -f /var/log/cron
最后將結果追加到result.txt
6)增加校驗功能
簡單理解校驗測試(知識理解):
- 檢查傳輸中是否有變化及檢查的那個文件md5:
檢查多個檢驗文件(find+md5)
#給/etc/下面所有的文件創建MD5保存到指定文件中
find /etc/ -type f | md5sum >etc-all.md5
#進行校驗
md5sum -c etc-all.md5
#修改/etc/下某個文件比如增加個"#"
vim /etc/rsyncd.conf
#進行校驗
md5sum -c etc-all.md5
#只顯示md5
異常的文件
md5sum --quiet -c etc-all.md5
具體應用:
- 客戶端備份的時候生成備份,創建指紋信息
安全防護措施:
給命令和較為固定的配置設置md5,定期校驗
作圖為清理舊的備份服務端腳本
rsync2022年漏洞
影響的版本:3.2.5版本驗證不足情況
檢查rsync版本:
檢查yum源是否有新的rsync版本,在裝yum最新版本之前,我們自己的rsync比它最新的版本很低:
去官網找rsync包:下載 Samba
下載 Sambarsync (samba.org)
https://rsync.samba.org/
二進制別人已經弄好了,我們只需要進行解壓使用,但是不一定能打開
添加鏈接描述
https://download.samba.org/pub/rsync/binaries/
這里的版本還不能進行滿足,下載這里最
新的rsync包,看是否還能進行滿足:
##下載最新的rsync包
wget https://download.samba.org/pub/rsync/binaries/centos-7.9-x86_64/latest.tar.gz
[root@backup ~]#tar tf latest.tar.gz
[root@backup ~]#tree -F usr/
usr/
└── local/
├── bin/
│ ├── rsync*
│ └── rsync-ssl*
└── share/
├── doc/
│ ├── COPYING
│ ├── NEWS.md
│ └── README.md
└── man/
├── man1/
│ ├── rsync.1
│ ├── rsyncd.conf.5
│ └── rsync-ssl.1
└── man5/
會發現還是滿足不了
- yum源不行
- 軟件包不行
- 官網二進制也不行
- 我們使用最本制的方式:編譯安裝(這里有3.2.7的版本)
通過yum update rsync升級,查到的版本還是低,但是升級說不定修復了補丁(說不來)廠商已經發布升級補丁修復漏洞方式(不方便升級版本的時候使用補丁)
還是要進行改源代碼–》回到本質還是編譯
還可以通過漏洞掃描工具,針對具體漏洞具體處理