實驗目標
rsync 遠程同步
實戰1: 備份/var/www/html 目彔
實戰2: 使用ssh密鑰實現無交互備份
實戰3: 配置rsync 服務器及需要備份的目彔,不使用系統用戶
實戰4: 配置rsync+inotify實時同步
實戰5: 防止網頁被篡改
實驗概述
軟件簡介
Rsync ( Remote sync)是一個遠程數據同步工具,使用與unix/Linux/windows等多種平臺。 可通過LAN/WAN 快速同步多臺主機間的文件。Rsync 本來是用以取代rcp 的一個工具,它當前由 Rsync.samba.org 維護。Rsync 使用所謂的“Rsync 演算法”來使本地和遠程兩個主機之間的文件達到同步,這個算法只傳送兩個文件的不同部分,而不是每次都整份傳送,因此速度相當快。運行 Rsync server 的機器也叫 backup server,一個 Rsync server 可同時備份多個 client 的數據;也可以多個Rsync server 備份一個 client 的數據。
Rsync 可以搭配 rsh 或 ssh 甚至使用 daemon 模式。Rsync server 會打開一個873的服務通道(port),等待對方 Rsync 連接。連接時,Rsync server 會檢查口令是否相符,若通過口令查覈,則可以開始進行文件傳輸。第一次連通完成時,會把整份文件傳輸一次,下一次就只傳送二個文件之間不同的部份。
Rsync 支持大多數的類 Unix 系統,無論是 Linux、Solaris 還是 BSD 上都經過了良好的測試。此外,它在windows 平臺下也有相應的版本,比較知名的有 cwRsync 和 Sync2NAS。
Rsync 的基本特點如下:
可以鏡像保存整個目錄樹和文件系統;
可以很容易做到保持原來文件的權限、時間、軟硬鏈接等;
無須特殊權限即可安裝;
優化的流程,文件傳輸效率高;
可以使用 rcp、ssh 等方式來傳輸文件,當然也可以通過直接的 socket 連接;
支持匿名傳輸。
Rsync優點:
支持增量備份。
選擇性的保持 : 符號鏈接,硬鏈接,文件屬性,權限 及時間 等。
傳輸前執行壓縮。適用於異地備份 ,鏡像服務器等應用 。
使用ssh做爲傳輸端口。 sftp ,ssh xshell
Rsync和scp的區別:
當文件數據很大時候: scp 無法備份大量數據, 特點: 先統一信息,像windows複製。
scp每次拷貝都是完整拷貝。無法增量拷貝。rsync 邊複製,邊比較,邊統計。
端口: 873 模式:C/S
Rsync同步備份的原理
在遠程同步任務中,負責發起rsync同步操作的客戶機稱爲發起端,而負責響應來自客機的rsync同步操作的服務器稱爲備份源。
首先服務器B(發起源)向服務器A(同步源)進行數據備份,將自己的數據備份到服務器A中。當服務器B中的數據遭到損失或者增量的時候,都會從服務器A中進行數據同步。服務器B數據丟失則從服務器A中同步數據丟失的部分。當服務器B數據增多了,就會再次向服務器A進行數據備份,但是備份的不是完整備份,而是增量備份,即備份同步源中沒有的數據。
實驗步驟
1:實驗環境搭建
安裝rsync:- - -查看一下rsync是有那個包安裝的
[root@xuegod-63 ~]# rpm -qf which rsync
rsync-3.0.6-5.el6_0.1.x86_64
安裝xinetd服務來管理rsync服務
[root@xuegod-63 ~]# rpm -ivh /mnt/Packages/xinetd-2.3.14-33.el6.x86_64.rpm
#rsync是由xinetd包管理的,因此只需要安裝xinetd包就OK了,並不需要安裝rsync的包
開啓rsync服務:
[root@xuegod-63 ~]# vim /etc/xinetd.d/rsync
改:disable = yes
爲:disable = no
[root@xuegod-63 ~]# /etc/init.d/xinetd restart
rsync監聽端口873/tcp
[root@xuegod-63 ~]# vim /etc/services
[root@xuegod-63 ~]# netstat -anutp | grep 873
tcp 0 0 :::873 :::* LISTEN 8876/xinetd
#可以看到873端口是由xinetd包管理的
反查一下這個端口
[root@xuegod-63 ~]# lsof -i:873
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
xinetd 8876 root 5u IPv6 40238 0t0 TCP *:rsync (LISTEN)
rsync命令的基本用法:
格式:rsync 【選項】 源文件 目標文件
查看rsync的命令參數
[root@xuegod-63 ~]# rsync -h
-a,--archive(存檔) 歸模式,表示以遞歸的方式傳輸文件,並且保持文件屬性,等同於加了參數-rlptgoD
-r,–recursive 對子目錄以遞歸模式處理
-l,--links 表示拷貝鏈接文件
-p , --perms 表示保持文件原有權限
-t , --times 表示保持文件原有時間
-g , --group 表示保持文件原有屬用戶組
-o , --owner 表示保持文件原有屬主
-D , --devices 表示塊設備文件信息
-z , --compress 表示壓縮傳輸
-H 表示硬連接文件
-A 保留ACL屬性信息
-P 顯示傳輸進度
-u, --update 僅僅進行更新,也就是跳過所有已經存在於目標位置,並且文件時間晚於要備份的文件。(不覆蓋更新的文件)
--port=PORT 指定其他的rsync服務端口 873
--delete 刪除那些目標位置有而原始位置沒有的文件
--password-file=FILE 從FILE中得到密碼
--bwlimit=KBPS 限制I/O帶寬,Kbytes /second
--filter “- 文件名”需要過濾的文件
--exclude= :需要過濾的文件
-v 顯示同步過程的詳細信息
實戰1
備份/var/www/html 目錄。創建用戶rget 1用於下載,讀;創建用戶rput1 用於上傳,寫。 客戶端與服務端進行數據同步。
服務器 :xuegod-63 192.168.1.63
客戶端 :xuegod-64 192.168.1.64
擴展:
setfacl 命令可以用來細分linux下的文件權限
getfacl 查看文件的權限
setfacl和chmod有什麼區別
chmod命令可以把文件權限分爲u,g,o三個組,而setfacl可以對每一個文件或目錄設置更精確的文件權限。 比較常用的用法如下:
setfacl –m u:apache:rwx file #設置apache用戶對file文件的rwx權限
setfacl –m g:market:rwx file #設置market用戶組對file文件的rwx權限
setfacl –x g:market file #刪除market組對file文件的所有權限
創建用戶並設置密碼
[root@xuegod-63 ~]# useradd rget1
[root@xuegod-63 ~]# useradd rput1
[root@xuegod-63 ~]# echo 123456 | passwd --stdin rget1
[root@xuegod-63 ~]# echo 123456 | passwd --stdin rput1
設置權限
[root@xuegod-63 ~]# setfacl -R -m user:rget1:rwx /var/www/html/
#指定rgut1用戶可以對目錄/var/www/html/擁有讀寫執行權限
[root@xuegod-63 ~]# setfacl -R -m default:user:rget1:rwx /var/www/html/ #再設置默認權限
#設置默認情況下rgut1用戶可以對/var/www/html/下,所有文件擁有可讀寫權限
[root@xuegod-63 ~]# setfacl -R -m user:rput1:r-x /var/www/html/
[root@xuegod-63 ~]# setfacl -R -m default:user:rput1:r-x /var/www/html/
查看權限
[root@xuegod-63 ~]# getfacl /var/www/html/
file: var/www/html/
user:rget1:rwx
user:rput1:r-x
#可以看到新增加的用戶rget1具有的讀寫執行的權限和用戶rput1具有讀和執行的權限
開始備份:
xuegod-63: 創建用於測試的數據
[root@xuegod-63 ~]# cp -r /boot/grub/ /var/www/html/
xegod-64:同步數據
[root@xuegod-64 ~]# mkdir /web-back
[root@xuegod64 ~]# cp /etc/passwd /web-back/
[root@xuegod-64 ~]# rsync -azP --delete [email protected]:/var/www/html/ /web-back/
#將同步源1.63服務端的/var/www/html/下的文件數據同步到1.64下的/web-back/目錄下,並且刪除發起源1.64客戶端下不同於同步源1.63服務端下的文件,這裏的目標位置指的就是1.64客戶端。
[email protected]'s password:
報錯:
……
rsync: send_files failed to open "/var/www/html/grub/grub.conf":Permission denied (13
)
grub/iso9660_stage1_5 #這裏提示沒有權限
解決:找到文件擴大權限
[root@xuegod-63 ~]# ll /var/www/html/grub/grub.conf
-rw-------+ 1 root root 787 Apr 9 19:17 /var/www/html/grub/grub.conf
[root@xuegod-63 ~]# cd /var/www/html/grub/
[root@xuegod-63 grub]# chmod 744 grub.conf
測試
[root@xuegod-64 ~]# rsync -azP --delete [email protected]:/var/www/html/ /web-back/
[email protected]'s password:
grub/grub.conf #這是需要增加權限的文件
761 100% 743.16kB/s 0:00:00 (xfer#1, to-check=11/18)
[root@xuegod64 ~]# ls /web-back/
grub
#可以看到新加了一個文件,之前複製進去的passwd文件被刪除了。