一、說明
自接解Linux服務器后,rsync這個東西就一直若隱若現,但也沒人要求幫安裝配置什么的所以也就沒有研究。
但近來要推弱口令改造,發現挺多就是rsync空口令,搞不懂這是什么東西就很不舒服,所以抽空來研究一下。
二、安裝
操作系統:CentOS 7
# 客戶端和服務端程序都在rsync一個包里,客戶機和服務機都裝這個包就完事了 yum install rsync -y
三、使用
下面介紹rsync的三種使用模式:本機內復制、機器間通過ssh復制、機器間通過daemon復制。
3.1 本機內復制
本機內復制,rsync就類似於cp命令,只是參數和cp有區別。
3.2 機器間通過ssh復制
其實除了ssh還可以是rsh等,但一是不太熟二是這些東西終將被ssh取代就不管了。
機器間通過ssh復制,rsync就類似於scp命令,可從遠程機復制到本機也可以從遠程機復制到本機,只是參數和scp有區別。
由於傳輸借用的是ssh,所以一方面要明確這種模式是不需要啟動rsync服務的,另一方面要明確其認證機制和兩台機器間的ssh認證機器是一致的(即可以用密碼也可用公鑰免密等等)。
3.3 機器間通過daemon復制
配置/etc/rsyncd.conf:
cat >> /etc/rsyncd.conf << EOF # 沒在模塊名下的是全局配置。能在全局配置的項在模塊中也都能配置,反之亦然,區別是模塊配置的優先級高於全局配置。 # 增加名稱為test的模塊 [test] # 模塊根目錄 path = /tmp/test # 模塊認證用戶名。該用戶只是rsync的和系統賬號沒關系。 # 如果沒有下邊這兩個配置項,即為rsync空口令情況。兩者必須同時存在,不然不起作用
# 如果要配置多個賬號,則賬號間用空格隔開 auth users = myuser # 模塊認證用戶名對應密碼。格式為明文"username:password",一行一個賬號密碼對 secrets file = /etc/rsyncd.passwd # 模塊ip白名單,白名單優先 # hosts allow = 192.168.220.129 192.168.220.130 192.168.221.0/24 # 模塊ip黑名單 # hosts deny = 192.168.220.129 192.168.220.130 0.0.0.0/0 # 禁止自動列出所有模塊 # list = no EOF
配置/etc/rsyncd.passwd(其實文件名隨意取決於你在/etc/rsyncd.conf中怎么配的。但格式則必須為"username:password"):
cat > /etc/rsyncd.passwd << EOF myuser:mypass EOF
另外密碼文件只能配置成rsync運行用戶有權限讀,不然啟動服務即便輸的密碼正確仍會報類似如下錯誤:
@ERROR: auth failed on module test rsync error: error starting client-server protocol (code 5) at main.c(1649) [Receiver=3.1.2]
當然也可以直接在配置文件中匹置“strict modes = false”來處理,但並不建議這么做。我們配置為600權限:
chmod 600 /etc/rsyncd.passwd
啟動rsyncd服務:
# 默認監聽系統tcp 873端口 systemctl restart rsyncd # 使用自定義端口啟動 rsync --daemon --config=/etc/rsyncd.conf --port=22000
命令通過使用IP后接兩個冒號(::)區分機器間通過ssh復制模式;兩個冒號后接的是模塊名(就直接模塊名不要前面寫/)。
四、其他
4.1 rsync daemon單向傳輸限制探討
假設場景是,A / B/ C三台機器,B上部署了rsync服務,我們只想讓A單向上傳文件到B(供C拉取),不想A能從B拉取文件,這個需求如何實現呢。
此時可以設置指向目錄相同的兩個模塊,如叫A-B和B-C,A-B設置“write only = true”(另可搭配hosts allow和host deny)。
4.2 rsync匿名賬號(anonymous)探測
所謂匿名賬號,就是沒有用戶名密碼,本質就是沒有設置我們上邊說的“auth user”和“secrets file”。
此時不使用用戶名密碼即可上傳下載文件:
# 列出所有模塊,不使用賬號能查看有哪些模塊是rsync允許的,且當前看沒法限制 rsync 192.168.220.129:: # 列出具體模塊的文件。如果允許匿名賬號,則目錄被列出 rsync 192.168.220.129::test/ # 如果使用自定義端口。啟動和連接都使用--port參數 rsync --port=22000 192.168.220.129::test/