使用rsync daemon跨主機安全同步

文章原文:https://tlanyan.pp.ua/use-rsync-daemon-to-sync-files-between-servers/

一直使用 rsync 命令在主機間快速同步文件,例如定時 備份WordPress文件和數據庫 到其他主機。

之前對 rsync 瞭解不深,一直使用 shell 方式同步文件。爲了避免連接時輸入密碼,便在多個主機間分發公鑰。今天意識到這種做法有嚴重的安全問題:如果某臺主機被黑,黑客能輕易漫遊所有主機!

於是再次研究 rsync,發現可以使用rsync daemon跨主機安全同步。

本文鏈接:https://tlanyan.pp.ua/use-rsync-daemon-to-sync-files-between-servers/

使用rsync daemon跨主機安全同步

rsync的三種工作模式

rsync 命令有三種用法,對應三種工作模式:

  • 本機同步,類似於cp命令:

    rsync [選項] SRC DEST;

  • shell遠程同步,類似於scp命令:

    # 遠程主機文件同步到主機 rsync [選項] USER@HOST**:SRC DEST # 本機文件同步到遠程主機 rsync [選項] SRC USER@HOST:**DEST

  • daemon遠程同步:

    # 遠程主機文件同步到本地,可使用::或用rsync://指定daemon模式 rsync [選項] USER@HOST**::**SRC DEST rsync [選項] **rsync://**USER@HOST/SRC DEST

    # 本機文件同步到遠程主機 rsync [選項] SRC USER@HOST**::**DEST rsync [選項] SRC **rsync://**USER@HOST/DEST

    shelldaemon模式的區別是shell模式使用一個冒號:,而daemon模式使用兩個冒號::或用rsync://顯式指定。

前兩種工作模式比較簡單,直接輸入源和目標路徑即可進行數據同步。第三種用法區分客戶端和服務端,需要在服務端配置才能正常工作。

接下來我們介紹使用daemon方式進行數據同步。

rsync daemon模式

類似於 V2rayrsync 命令既可以用作客戶端,也可以用作服務端。我們平常用的 rsync 便是作爲客戶端使用,加上--daemon參數則變成服務端模式。

CentOS 7Ubuntu/Debian系統安裝 rsync 後會自動配置好rsync服務,但在 CentOS 8 系統中需要額外安裝 rsync-daemon 包纔會配置rsync服務:

# Ubuntu/Debian安裝rsync sudo apt update sudo apt install -y rsync # CentOS/RHEL安裝rsync sudo yum install -y rsync # CentOS 8安裝rsync daemon sudo yum install -y rsync-daemon

rsync daemon的默認配置文件是 /etc/rsyncd.conf,Ubuntu/Debian默認沒創建。編輯 /etc/rsyncd.conf,寫入類似以下內容(#號開頭的行是註釋):

# rsyncd.conf的配置項分全局參數和模塊參數,全局參數只有少數幾個,一般保持默認即可 # 模塊以[模塊名]開頭,後續參數僅作用於該模塊 # 卸載模塊外的參數適用於所有模塊 # rsyncd.conf文件的指令和值請參考 man rsyncd.conf

# 歡迎文件 motd file = /etc/rsyncd.motd

# 用戶和組id uid = root gid = root

# 是否chroot,出於安全考慮建議爲yes use chroot = yes # 是否記錄傳輸記錄 transfer logging = no # 是否只讀,值爲true時客戶端無法上傳 read only = false # 是否只寫,值爲true時客戶端無法下載 write only = false # 默認拒絕所有主機連接 hosts deny = *

# 用戶名密碼文件,每一行格式是:用戶名:密碼,例如 # tlanyan:12343112 # 該文件權限必須設置爲600,除非strict mode設置爲false secrets file = /etc/rsyncd.secrets

# 定義名爲backup的模塊 [backup] # 模塊說明 comment = backup directory # 模塊路徑,請求改成自己的 path = /data # 允許的主機ip hosts allow = xx.xx.xx.xx # 允許的用戶名 auth users = tlanyan # 是否允許列出該模塊,建議爲no list = no

上述配置文件中,/etc/rsyncd.motd/etc/rsyncd.secrets需自行創建,例如:

# 設置歡迎標語 echo '歡迎使用Rsync Daemon' > /etc/rsyncd.motd # 設置用戶名和密碼 echo 'tlanyan:12343112' >> /etc/rsyncd.secrets # 設置密碼文件權限 chmod 600 /etc/rsyncd.secrets

然後啓動rsync服務:

# CentOS/RHEL systemctl enable rsyncd systemctl start rsyncd

# Ubuntu/Debian的服務名爲rsync systemctl enable rsync systemctl start rsync

rsync daemon默認監聽873端口,開啓了防火牆需要放行端口(阿里雲/AWS/GCP等網頁後臺有安全組,需要登錄並放行):

# 啓用了firewalld的CentOS 7/8等系統 firewall-cmd --permanent --add-port=873/tcp firewall-cmd --reload

# 啓用了iptables的CentOS 7/8等系統 iptables -I INPUT -p tcp --dport 873 -j ACCEPT

# 啓用了ufw的Ubuntu/Debian等系統 ufw allow 873/tcp

使用rsync daemon同步文件

接下來,在授權的機器上使用授權用戶同步文件:

rsync -avP 授權用戶@服務器ip::backup /var/www/data/

連接過程中需要輸入rsyncd.secrets中的用戶密碼,也可以使用--password-file指定密碼文件而無需每次手動輸入:

# 將密碼寫入文件 echo '12343112' > secrets # 設置密碼文件權限 chmod 600 secrets # 免密同步文件 rsync -avP --password-file=secrets 授權用戶@服務器ip::backup /var/www/data/

除了使用兩個冒號**::**,其他使用方式與shell方式都相同。

rsync daemon總結

使用rsync daemon,避免了跨主機同步時的安全隱患,並且可以指定授權ip和授權用戶,實踐中推薦使用。

參考

1. rsync複製文件的一些注意事項

2. rsync同步和備份文件到本地

3. WordPress備份方案和備份腳本

4. rsync 安裝配置實踐

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章