使用 rsync 服務

內容提要

  1. 掌握兩種運行 rsync 服務的配置方法
  2. 熟悉配置文件 rsyncd.conf 的常用參數
  3. 掌握在生產服務器上同時運行 rsync 服務的配置方法
  4. 掌握在備份服務器上運行 rsync 服務的配置方法
  5. 重點掌握匿名 rsync 服務的配置方法

rsync 服務簡介

上一節講述了使用 rsync 客戶命令進行同步和備份的內容。rsync 還可以以守護進程(daemon)方式運行,若一臺主機以 daemon 模式運行 rsync,一般稱其爲 rsync 服務器。rsync 的 C/S 方式運行方式概述如下:

  1. rsync 客戶端連接遠程 rsync 守護進程進行數據同步。
  2. rsync 服務器端要開啓 rsyncd 服務,默認監聽 873 端口,等待客戶端去連接。
  3. rsync 服務器可以 獨立運行,也可由 Xinetd 運行。CentOS 默認以 Xinetd 運行。
  4. rsync 服務器啓動時會讀取配置文件,默認爲 /etc/rsyncd.conf,其格式類似於 samba 的主配置文件。
  5. 用戶驗證由服務器負責,用戶口令文件在 /etc/rsyncd.conf 中指明。

rsync 命令既是客戶端程序,同時也是服務程序。在運行 rsync 服務時使用特殊的命令選項,常用的服務選項有:

選項說明
–daemon表示以守護進程方式運行
–address=ADDRESS將此服務綁定到指定的 IP 地址運行
–port=PORT指定特殊的監聽端口,默認爲 873 端口
–bwlimit=KBPS限制 I/O 帶寬(單位爲 KBytes/秒)
–config=FILE指定配置文件,默認爲 /etc/rsyncd.conf
–sockopts=OPTIONS指定自定義 TCP 選項
-4, –ipv4使用 IPv4
-6, –ipv6使用 IPv6

上面僅僅列出了 rsync 用於服務的選項,rsync 用於客戶的選項請參見上節。

配置 rsync 服務

配置 rsync 服務器的步驟

  • 首先要選擇服務器啓動方式
    • 對於負荷較重的 rsync 服務器應該使用獨立運行方式
    • 對於負荷較輕的 rsync 服務器可以使用 xinetd 運行方式
  • 創建配置文件 rsyncd.conf
  • 對於非匿名訪問的 rsync 服務器還要創建認證口令文件

以 xinetd 運行 rsync 服務

CentOS 默認以 xinetd 方式運行 rsync 服務。rsync 的 xinetd 配置文件
在 /etc/xinetd.d/rsync。要配置以 xinetd 運行的 rsync 服務需要執行如下的命令:

# chkconfig rsync on
# service xinetd restart

管理員可以修改 /etc/xinetd.d/rsync 配置文件以適合您的需要。例如,您可以修改配置行

server_args = --daemon

在後面添加 rsync 的服務選項。

獨立運行 rsync 服務

最簡單的獨立運行 rsync 服務的方法是執行如下的命令:

/usr/bin/rsync --daemon

您可以將上面的命令寫入 /etc/rc.local 文件以便在每次啓動服務器時運行 rsync 服務。當然,您也可以寫一個腳本在開機時自動啓動 rysnc 服務。

配置文件 rsyncd.conf

兩種 rsync 服務運行方式都需要配置 rsyncd.conf,其格式類似於 samba 的主配置文件。
配置文件 rsyncd.conf 默認在 /etc 目錄下。爲了將所有與 rsync 服務相關的文件放在單獨的目錄下,可以執行如下命令:

# mkdir /etc/rsyncd
# touch /etc/rsyncd/rsyncd.conf
# ln -s /etc/rsyncd/rsyncd.conf /etc/rsyncd.conf

配置文件 rsyncd.conf 由全局配置和若干模塊配置組成。配置文件的語法爲:

  • 模塊以 [模塊名] 開始
  • 參數配置行的格式是 name = value ,其中 value 可以有兩種數據類型:
    • 字符串(可以不用引號定界字符串)
    • 布爾值(1/0 或 yes/no 或 true/false)
  • 以 # 或 ; 開始的行爲註釋
  • \ 爲續行符

全局參數

在文件中 [module] 之外的所有配置行都是全局參數。當然也可以在全局參數部分定義模塊參數,這時該參數的值就是所有模塊的默認值。

參數說明默認值
address在獨立運行時,用於指定的服務器運行的 IP 地址。由 xinetd 運行時將忽略此參數,使用命令行上的 –address 選項替代。本地所有IP
port指定 rsync 守護進程監聽的端口號。 由 xinetd 運行時將忽略此參數,使用命令行上的–port 選項替代。873
motd file指定一個消息文件,當客戶連接服務器時該文件的內容顯示給客戶。
pid filersync 的守護進程將其 PID 寫入指定的文件。
log file指定 rsync 守護進程的日誌文件,而不將日誌發送給 syslog。
syslog facility指定 rsync 發送日誌消息給 syslog 時的消息級別。daemon
socket options指定自定義 TCP 選項。

模塊參數

模塊參數主要用於定義 rsync 服務器哪個目錄要被同步。模塊聲明的格式必須爲 [module] 形式,這個名字就是在 rsync 客戶端看到的名字,類似於 Samba 服務器提供的共享名。而服務器真正同步的數據是通過path 來指定的。可以根據自己的需要,來指定多個模塊,模塊中可以定義以下參數:
1、基本模塊參數

參數說明默認值
path指定當前模塊在 rsync 服務器上的同步路徑,該參數是必須指定的。
comment給模塊指定一個描述,該描述連同模塊名在客戶連接得到模塊列表時顯示給客戶。

2、模塊控制參數

參數說明默認值
use chroot若爲 true,則 rsync 在傳輸文件之前首先 chroot 到 path 參數所指定的目錄下。這樣做的原因是實現額外的安全防護,但是缺點是需要 root 權限,並且不能備份指向 path 外部的符號連接所指向的目錄文件。true
uid指定該模塊以指定的 UID 傳輸文件。nobody
gid指定該模塊以指定的 GID 傳輸文件。nobody
max connections指定該模塊的最大併發連接數量以保護服務器,超過限制的連接請求將被告知隨後再試。0(沒有限制)
lock file指定支持 max connections 參數的鎖文件。/var/run/rsyncd.lock
list指定當客戶請求列出可以使用的模塊列表時,該模塊是否應該被列出。如果設置該選項爲 false,可以創建隱藏的模塊。true
read only指定是否允許客戶上傳文件。若爲 true 則不允許上傳;若爲 false 並且服務器目錄也具有讀寫權限則允許上傳。true
write only指定是否允許客戶下載文件。若爲 true 則不允許下載;若爲 false 並且服務器目錄也具有讀權限則允許下載。false
ignore errors指定 在 rsync 服務器上運行 delete 操作時是否忽略 I/O 錯誤。一般來說 rsync 在出現 I/O 錯誤時將將跳過 –delete 操作,以防止因爲暫時的資源不足或其它 I/O 錯誤導致的嚴重問題。true
ignore nonreadable指定 rysnc 服務器完全忽略那些用戶沒有訪問權限的文件。這對於在需要備份的目錄中有些不應該被備份者獲得的文件時是有意義的。false
timeout該選項可以覆蓋客戶指定的 IP 超時時間。從而確保 rsync 服務器不會永遠等待一個崩潰的客戶端。對於匿名 rsync 服務器來說,理想的數字是 600(單位爲秒)。0 (未限制)
dont compress用來指定那些在傳輸之前不進行壓縮處理的文件。該選項可以定義一些不允許客戶對該模塊使用的命令選項列表。必須使用選項全名,而不能是簡稱。當發生拒絕某個選項的情況時,服務器將報告錯誤信息然後退出。例如,要防止使用壓縮,應該是:”dont compress = *”。*.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz

3、模塊文件篩選參數

參數說明默認值
exclude指定多個由空格隔開的多個文件或目錄(相對路徑),並將其添加到 exclude 列表中。這等同於在客戶端命令中使用 –exclude 來指定模式。
exclude from指定一個包含 exclude 規則定義的文件名,服務器從該文件中讀取 exclude 列表定義。
include指定多個由空格隔開的多個文件或目錄(相對路徑),並將其添加到 include 列表中。這等同於在客戶端命令中使用 –include 來指定模式 。
include from指定一個包含 include 規則定義的文件名,服務器從該文件中讀取 include 列表定義。
  • 一個模塊只能指定一個 exclude 參數、一個 include 參數。
  • 結合 include 和 exclude 可以定義複雜的 exclude/include 規則 。
  • 這幾個參數分別與相應的 rsync 客戶命令選項等價,唯一不同的是它們作用在服務器端。
  • 關於如何書寫規則文件的內容請參見上節

4、模塊用戶認證參數

參數說明默認值
auth users指定由空格或逗號分隔的用戶名列表,只有這些用戶才允許連接該模塊。這裏的用戶和系統用戶沒有任何關係。用戶名和口令以明文方式存放在 secrets file 參數指定的文件中。(匿名方式)
secrets file指定一個 rsync 認證口令文件。只有在 auth users 被定義時,該文件才起作用。
strict modes指定是否監測口令文件的權限。若爲 true 則口令文件只能被 rsync 服務器運行身份的用戶訪問,其他任何用戶不可以訪問該文件。true
  • rsync 認證口令文件的權限一定是 600,否則客戶端將不能連接服務器。
  • rsync 認證口令文件中每一行指定一個 用戶名:口令 對,格式爲:
# 以 "#" 開始的行爲註釋行
username:passwd
# 一般來說口令最好不要超過8個字符。

若您只配置匿名訪問的 rsync 服務器,則無需設置上述參數。 5、模塊訪問控制參數

參數說明默認值
hosts allow用一個主機列表指定哪些主機客戶允許連接該模塊。不匹配主機列表的主機將被拒絕。*
hosts deny用一個主機列表指定哪些主機客戶不允許連接該模塊。

客戶主機列表定義可以是以下形式:

  • 單個IP地址。例如:192.168.0.1
  • 整個網段。例如:192.168.0.0/24,192.168.0.0/255.255.255.0
  • 可解析的單個主機名。例如:centos,centos.smartraining.cn
  • 域內的所有主機。例如:*.smartraining.cn
  • “*”則表示所有。
  • 多個列表項要用空格間隔。

6、模塊日誌參數

參數說明默認值
transfer logging使 rsync 服務器將傳輸操作記錄到傳輸日誌文件。false
log format指定傳輸日誌文件的字段。”%o %h [%a] %m (%u) %f %l”

* 設置了”log file”參數時,在日誌每行的開始會添加”%t [%p]“。

  • 可以使用的日誌格式定義符如下所示:
    • %a - 遠程IP地址
    • %h - 遠程主機名
    • %l - 文件長度字符數
    • %p - 該次 rsync 會話的 PID
    • %o - 操作類型:”send” 或 “recv”
    • %f - 文件名
    • %P - 模塊路徑
    • %m - 模塊名
    • %t - 當前時間
    • %u - 認證的用戶名(匿名時是 null)
    • %b - 實際傳輸的字節數
    • %c - 當發送文件時,記錄該文件的校驗碼

rsync 服務器與備份

何時使用 rsync 服務器

  • 若用戶在遠程主機上有登錄帳號,通常可以使用 ssh 方式運行 rsync 而不必配置 rsync 服務。
  • 由於 rsync 服務使用明文口令,所以在不可信任的網絡中應該儘量使用 ssh 方式運行 rsync
  • 在可信任的網絡中可以配置使用 rsync 服務器,當然也可以使用 ssh 方式運行 rsync
  • 最需要架設 rsync 服務器的理由恐怕就是匿名 rsync 服務器了,它可以爲客戶提供匿名訪問的同步資源,

例如:允許用戶同步 FTP 軟件資源、Linux 發行版本的軟件倉庫等。

部署 rsync 服務器的兩種方法

爲了備份數據,如何在網絡中部署 rsync 服務器呢?通常有兩種方法:

  • 在生產服務器上同時運行 rsync 服務
    • rsync 服務以只讀方式提供要備份的數據,從而避免破壞生產服務器上的數據
    • 根據需要,可以配置一個或多個(爲了避免風險)主機作爲備份主機
    • 在每個備份主機上以”拉”的方式從生產服務器將數據同步到備份主機
  • 在備份服務器上運行 rsync 服務
    • 備份服務器實際上是個數據倉庫,他集中收集了網絡中所有要備份的主機的數據
    • 備份服務器上運行的 rsync 服務以讀寫方式提供備份空間
    • 根據需要,可以配置一個或多個(爲了避免風險)備份服務器
    • 在每臺要備份的主機(包括生產服務器)上以”推”的方式將備份數據寫入備份服務器

上述關於備份的思想方法同樣也適用於以 ssh 方式運行 rsync 的情況。當然這時無需架設 rsync 服務,所需考慮的問題僅僅是應該以”推”方式運行還是以”拉”方式運行。

rsync 服務器應用

下面給出幾個使用 rsync 服務器的示例。

在生產服務器上同時運行 rsync 服務

假設網路中有如下3臺計算機

  • 生產服務器 - pandr (192.168.0.220)
  • 備份主機A - backupa (192.168.0.221)
  • 備份主機B - backupb (192.168.0.222)

在 pandr 上配置 rsync 服務

1、編輯配置文件

# vi /etc/rsyncd/rsyncd.conf
uid = nobody
gid = nobody
syslog facility = local3

use chroot = yes
read only = yes

max connections = 4
timeout = 300

motd file = /etc/rsyncd/rsyncd.motd
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock

hosts allow=192.168.0.221 192.168.0.222
hosts deny=*

secrets file = /etc/rsyncd/rsyncd.secrets
auth users = bua,bub

list=yes

[home]
	uid = root
	gid = root
	path = /home
	comment = product server home
	exclude = www/ samba/ ftp/
[www]
	path = /home/www
	comment = product server www
	exclude = logs/

下面考查一些權限問題:

# tree /home -p
/home
|-- [drwx------] crq
|-- [drwxr-xr-x] ftp
|-- [drwx------] osmond
|-- [drwxr-xr-x] samba
`-- [drwxr-xr-x] www
	|-- [drwxr-xr-x] cgi-bin
|-- [drwxr-xr-x] fcgi-bin
|-- [drwxr-xr-x] htdocs
`-- [drwxr-xr-x] logs

從上面的目錄權限可知,每個用戶的自家目錄對組和其他用戶沒有任何權限。當 uid 和 gid 設置爲 nobody時,rsync客戶端由於無權進入用戶的自家目錄,所以不能同步各個自家目錄下的內容。爲此,[home] 部分將 uid 和 gid 設置爲 root。

rsyncd 默認將日誌寫入 /var/log/messages 文件,上面的 “syslog facility = local3” 配置將使用LOCAL3 日誌設備(facility)。 爲此需要在 /etc/syslog.conf 文件中添加如下行:

local3.info /var/log/rsync.log

然後使用如下命令重新啓動 syslog

# service syslog restart

2、編輯 rsync 服務的口令文件

# touch /etc/rsyncd/rsyncd.secrets
# chmod 600 /etc/rsyncd/rsyncd.secrets
# vi /etc/rsyncd/rsyncd.secrets
bua:backupa-s-password
bub:backupb-s-password

不要在 /etc/rsyncd/rsyncd.secrets 中使用與同名系統用戶帳號相同的口令。 3、以 xinetd 運行 rsync 服務

# chkconfig rsync on
# service xinetd restart

4、配置防火牆
使用 iptables 配置允許 rsync服務端口(默認爲 873)通過,同時限制 rsync 客戶端的連接。

例如:

# iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 873 -j ACCEPT
# iptables -A INPUT -p tcp -s ! 192.168.0.221 --dport 873 -j DROP

可以使用如下命令查看添加的防火牆規則:

# iptables -L

在備份主機上從服務器同步

下面配置 rsync 服務器的客戶端。下面以 backupa(192.168.0.221)爲例進行說明。
首先可以使用如下的命令查看服務器上提供的同步資源:

rsync --list-only [email protected]::
rsync --list-only rsync://[email protected]/home

然後就可以在客戶端配置同步了,配置方法相當靈活,您可以根據自己需要選擇不同的配置方法。
1)簡單同步(不保存歷史歸檔)

rsync -avzP --delete [email protected]::home /backups/192.168.0.220/home
rsync -avzP --delete rsync://[email protected]/www /backups/192.168.0.220/www

2)完全備份(保存歷史歸檔)

rsync -avzP --delete [email protected]::home /backups/192.168.0.220/$(date +'%y-%m-%d')/home
rsync -avzP --delete rsync://[email protected]/www /backups/192.168.0.220/$(date +'%y-%m-%d')/www

上面的方法雖然簡單,但是效率不高。因爲每次都將服務器提供的資源同步到不同的目錄(因爲時間在變),所以這隻相當於使用 scp 命令進行遠程拷貝。
上面的命令沒有使用 rsync 的優勢功能(即只傳輸有變化的部分),爲此做如下改進:
首先在備份主機上部署如下的目錄:

/backups/192.168.0.220/current # 存放同步的目錄
/backups/192.168.0.220/archive # 存放歸檔的目錄

接着使用如下命令進行同步:

rsync -avzP --delete [email protected]::home /backups/192.168.0.220/current/home
rsync -avzP --delete rsync://[email protected]/www /backups/192.168.0.220/current/www

同步之後在備份主機上使用如下命令保存歸檔:

tar -cjf /backups/192.168.0.220/archive/home-$(date +'%y-%m-%d').tbz \
-C /backups/192.168.0.220/current/home .
tar -cjf /backups/192.168.0.220/archive/www-$(date +'%y-%m-%d').tbz \
-C /backups/192.168.0.220/current/www .

這種改進方法具有如下優點:

  • 每次同步都基於 current 目錄,所以只會傳輸變化的部分,減少了網絡流量
  • 使用壓縮的歸檔,減少了備份主機的磁盤佔用
  • 由於是在備份主機上執行歸檔壓縮,減少生產服務器運行歸檔壓縮的CPU時間

因此,若需要進行遠程的包含歸檔文件的完全備份,上述方法優於在生產服務器執行 tar 命令然後再上傳到備份主機的方法。

若您要在 cron 中執行 rsync,需要在 rsync 命令中添加類似如下的指定口令文件的選項,以避免在終端上輸入口令:

--password-file=/root/rsync.password

然後在備份主機上生成口令文件:

echo "backupa-s-password"> /root/rsync.password
chmod 600 /root/rsync.password

3)增量備份(保存歷史歸檔)
您可以參考上一節的內容編寫腳本實現普通型增量備份或快照型增量備份。
爲了提供安全性,應該配置一個以上的備份主機。配置方法有兩種:

  • 每臺備份主機都從生產服務器同步數據
  • 爲了降低生產服務器負載,一臺備份主機也可以從另一臺備份主機同步數據,實現二級備份架構

在備份服務器上運行 rsync 服務

假設網路中有如下4臺計算機

  • 備份服務器A - backupa (192.168.0.221)
  • 備份服務器B - backupb (192.168.0.222)
  • 主機A - hosta (192.168.0.111)
  • 主機B - hostb (192.168.0.112)

在備份服務器上配置 rsync 服務

只需在一臺備份服務器上配置 rsync 服務。例如,在備份服務器A上配置 rsync 服務,然後在備份服務器B上使用 rsync 客戶命令同步備份服務器A即可。

下面在 backupa (192.168.0.221)上配置備份服務器。

1、編輯配置文件

# vi /etc/rsyncd/rsyncd.conf
uid = root
gid = root
syslog facility = local3

use chroot = yes
read only = no

max connections = 20
timeout = 300

motd file = /etc/rsyncd/rsyncd.motd
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock

hosts allow=192.168.0.0/24
hosts deny=*

secrets file = /etc/rsyncd/rsyncd.secrets

[hosta-home]
	path = /backups/hosta/home
	comment = hosta home
	list=yes
	auth users = hosta
[hosta-www]
	path = /backups/hosta/www
	comment = hosta www
	list=yes
	auth users = hosta
[hostb-home]
	path = /backups/hostb/home
	comment = hostb home
	list=yes
	auth users = hostb
[hostb-www]
	path = /backups/hostb/www
	comment = hostb www
	list=yes
	auth users = hostb

2、編輯 rsync 服務的口令文件

# touch /etc/rsyncd/rsyncd.secrets
# chmod 600 /etc/rsyncd/rsyncd.secrets
# vi /etc/rsyncd/rsyncd.secrets
hosta:hosta-s-password
hostb:hostb-s-password

3、創建系統帳號

# useradd hosta
# useradd hostb
# 若不允許系統登錄,則無需設置用戶口令

4、獨立運行 rsync 服務

# chkconfig rsync off
# service xinetd restart
# echo "/usr/bin/rsync --daemon">>/etc/rc.local
# /usr/bin/rsync --daemon

5、配置防火牆 使用 iptables 配置允許 rsync服務端口(默認爲 873)通過,同時限制 rsync 客戶端的連接。
例如:

# iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 873 -j ACCEPT
# iptables -A INPUT -p tcp -s ! 192.168.0.0/24 --dport 873 -j DROP

可以使用如下命令查看添加的防火牆規則:

# iptables -L

在主機上向服務器同步

下面配置 rsync 服務器的客戶端。每個 rsync 客戶端的配置方法都是類似的。下面以 hosta(192.168.0.111)爲例進行說明。
首先可以使用如下的命令查看服務器上提供的同步資源:

rsync --list-only [email protected]::
rsync --list-only rsync://[email protected]/hosta-home

然後就可以在客戶端以推方式同步到服務器了。

rsync -avzP --delete --exclude "lost+found/" /home/ [email protected]::hosta-home
rsync -avzP --delete /www/ rsync://[email protected]/hosta-www

若您要在 cron 中執行 rsync,需要在 rsync 命令中添加類似如下的指定口令文件的選項,以避免在終端上輸入口令:

--password-file=/root/rsync.password

然後在備份主機上生成口令文件:

echo "hosta-s-password"> /root/rsync.password
chmod 600 /root/rsync.password

配置匿名 rsync 服務

最簡單的 rsync 服務器配置就是匿名服務器。下面說明配置步驟。
1、編輯配置文件

# vi /etc/rsyncd/rsyncd.conf
uid = nobody
gid = nobody
syslog facility = local3

use chroot = yes
read only = yes

timeout = 600

motd file = /etc/rsyncd/rsyncd.motd
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock

list=yes

# 設置匿名訪問的 Centos 倉庫的同步資源
[centos]
	path = /var/www/mirror/centos
	comment = Centos Repository
	max connections = 30
# 設置匿名訪問的 ubuntu 倉庫的同步資源
[ubuntu]
	path = /var/www/mirror/ubuntu
	comment = Ubuntu Repository
	max connections = 30
# 設置匿名訪問的 Ubuntu CN 倉庫的同步資源
[ubuntu-cn]
	path = /var/www/mirror/ubuntu-cn
	comment = Ubuntu CN Repository
	max connections = 30
# 設置匿名訪問的 FTP 服務器的同步資源
[ftp]
	path = /var/ftp/pub
	comment = Anonymous FTP server
	max connections = 10
# 也可以同時設置其他非匿名訪問的同步資源
[tmp]
	path = /tmp
	comment = Temporary Directory
	read only = no
	hosts allow=192.168.0.0/24 127.0.0.0/8 *.sinosmond.com
	hosts deny=*
	secrets file = /etc/rsyncd/rsyncd.secrets
	auth users = user1,user2
	max connections = 5

2、編輯 rsync 服務的口令文件

# touch /etc/rsyncd/rsyncd.secrets
# chmod 600 /etc/rsyncd/rsyncd.secrets
# vi /etc/rsyncd/rsyncd.secrets
user1:user1-s-password
user2:user2-s-password

不要在 /etc/rsyncd/rsyncd.secrets 中使用與同名系統用戶帳號相同的口令。
3、獨立運行 rsync 服務

# chkconfig rsync off
# service xinetd restart
# echo "/usr/bin/rsync --daemon">>/etc/rc.local
# /usr/bin/rsync --daemon

4、配置防火牆
使用 iptables 配置允許 rsync服務端口(默認爲 873)通過,同時限制 rsync 客戶端的連接。
例如:

# iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 873 -j ACCEPT

可以使用如下命令查看添加的防火牆規則:

# iptables -L

有關如何使用 rsync 客戶命令從匿名服務器同步數據的內容請參考上一節

參考


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