如果您使用 Linux,那么您就已經(jīng)可以使用那些創(chuàng)建定制備份解決方案的極其強(qiáng)大的工具。本文中的方案,可以讓您使用幾乎每個(gè) Linux 發(fā)行版本都附帶的開放源代碼工具來執(zhí)行從簡(jiǎn)單的到更高級(jí)而且安全的網(wǎng)絡(luò)備份。
簡(jiǎn)單備份
本文按照一步一步的方法來進(jìn)行講述,只要您遵循那些基本的步驟,此方法會(huì)是非常直觀的。
在研究更高級(jí)的分布式備份解決方案之前,讓我們首先來看一個(gè)簡(jiǎn)單而強(qiáng)大的存檔機(jī)制。讓我們來分析一個(gè)名為 arc 的方便的腳本,它可以讓我們?cè)?Linux shell 提示符中創(chuàng)建備份快照。
#!/bin/sh
tar czvf $1.$(date +%Y%m%d%-H%M%S).tgz $1
exit $?
清單 1. arc shell 腳本 arc 腳本接收一個(gè)單獨(dú)的文件或目錄名作為參數(shù),創(chuàng)建一個(gè)壓縮的存檔文件,同時(shí)將當(dāng)前日期嵌入到生成的存檔文件的名字之中。例如,如果您有一個(gè)名為 beoserver 的目錄,您可以調(diào)用 arc 腳本,將 beoserver 目錄名傳遞給它以創(chuàng)建一個(gè)壓縮的存檔文件,如: beoserver.20040321-014844.tgz
使用 date 命令是為了嵌入一個(gè)日期和時(shí)間戳以幫助您組織存檔文件。日期的格式是年、月、日、小時(shí)、分、秒 —— 雖然秒域的使用有一些多余。查看 data 命令的手冊(cè)( man date)來了解其他選項(xiàng)。另外,在清單 1 中,我們向 tar 傳遞了 -v(verbose)選項(xiàng)。這就使得 tar 顯示出它正在存檔的文件。如果您喜歡靜默地進(jìn)行備份,那么刪除這個(gè) -v 選項(xiàng)。
$ ls
arc beoserver
$ ./arc beoserver
beoserver/
beoserver/bookl.dat
beoserver/beoserver_ab_off
beoserver/beoserver_ab_on
$ ls
arc beoserver beoserver.20040321-014844.tgz
清單 2. 存檔 beoserver 目錄高級(jí)備份
這個(gè)簡(jiǎn)單備份是實(shí)用的;不過,它仍然包含一個(gè)人工備份的過程。行業(yè)最佳經(jīng)驗(yàn)通常建議將數(shù)據(jù)備份到多個(gè)媒體上,并備份到分開的不同地理位置。中心思想是避免依賴于任何一個(gè)單獨(dú)的存儲(chǔ)媒體或單獨(dú)的位置。
在下一個(gè)例子中我們將應(yīng)對(duì)這一挑戰(zhàn),我們將分析一個(gè)如圖 1 所示的假想的分布式網(wǎng)絡(luò),它展示了對(duì)兩臺(tái)遠(yuǎn)程服務(wù)器和一臺(tái)離線存儲(chǔ)服務(wù)器的系統(tǒng)管理。
圖 1. 分布式網(wǎng)絡(luò)
服務(wù)器" #1 和 #2 上的備份文件將安全地傳輸?shù)诫x線存儲(chǔ)服務(wù)器上,而且整個(gè)分布式備份過程將在沒有人工干涉的情況下定期進(jìn)行。我們將使用一組標(biāo)準(zhǔn)的工具(開放安全 shell 工具套件(OpenSSH)的一部分),以及磁帶存檔器(tar)和 cron 任務(wù)調(diào)度服務(wù)。我們的全部計(jì)劃是,使用 cron 進(jìn)行調(diào)度,使用 shell 程序和 tar 應(yīng)用程序完成備份過程,使用 OpenSSH 安全 shell(ssh)加密進(jìn)行遠(yuǎn)程訪問、認(rèn)證、安全 shell 拷貝(scp)以自動(dòng)完成文件傳輸。要獲得另外的資料請(qǐng)務(wù)必查看每個(gè)工具的手冊(cè)。使用公鑰/私鑰進(jìn)行安全的遠(yuǎn)程訪問
在數(shù)字安全的上下文中,密鑰(key)指的是用來加密或解密其他數(shù)據(jù)片斷的一個(gè)數(shù)據(jù)片斷。公鑰私鑰模式的有趣之處在于,使用公鑰加密的數(shù)據(jù),只有用相應(yīng)的私鑰才可以解密。您可以自由地發(fā)布一個(gè)公鑰,這樣別人就可以對(duì)發(fā)送給您的消息進(jìn)行加密。公鑰/私鑰模式徹底改變了數(shù)字安全的原因之一是,發(fā)送者和接收者不必再共享一個(gè)通用的密碼。除了其他方面的貢獻(xiàn),公鑰/私鑰加密使用電子商務(wù)和其他安全傳輸成為可能。在本文中,我們將創(chuàng)建并使用公鑰和私鑰來創(chuàng)建一個(gè)非常安全的分布式備份解決方案。
要進(jìn)行備份過程的每臺(tái)機(jī)器都必須運(yùn)行 OpenSSH 安全 shell 服務(wù)(sshd),同時(shí)讓 22 端口可以通過任何內(nèi)部防火墻被訪問。如果您訪問遠(yuǎn)程的服務(wù)器,那么很有可能您正在使用安全 shell。
我們的目標(biāo)將是,不需要人工提供密碼就可以安全地訪問機(jī)器。一些人認(rèn)為最簡(jiǎn)單的辦法是設(shè)置無密碼的訪問:不要這樣做。這樣做不安全。不用那樣,本文中我們將使用的方法可能會(huì)占用您大約一個(gè)小時(shí)的時(shí)間,建立起一個(gè)與使用“無密碼”帳號(hào)同樣方便的系統(tǒng) —— 不過它是公認(rèn)非常安全的。
讓我們首先確保 OpenSSH 已經(jīng)安裝,接下來查看它的版本號(hào)。完成本文時(shí),最新的發(fā)行的 OpenSSH 是 2004 年 2 月 24 日發(fā)布的版本 3.8。您應(yīng)該考慮使用一個(gè)較新的而且穩(wěn)定的發(fā)布版本,至少所用的版本應(yīng)該要比版本 2.x 新。訪問 OpenSSH Security 網(wǎng)頁(yè)以獲得關(guān)于特定舊版本的缺陷的細(xì)節(jié)(請(qǐng)參閱本文后面的 參考資料 中的鏈接)。到目前為止,OpenSSH 是非常穩(wěn)定的,而且已經(jīng)證明不存在其他 SSH 工具所報(bào)告的很多缺陷。
在 shell 提示符中,輸入 ssh 并給出重要的 V 選項(xiàng)來檢查版本號(hào):
$ ssh -V OpenSSH_3.5p1, SSH protocols 1.5/2.0, OpenSSL 0x0090701f
如果 ssh 返回的版本號(hào)大于 2.x,則機(jī)器處于相對(duì)良好的狀態(tài)。無論如何,建議您所有的軟件都使用最新的穩(wěn)定版本,這對(duì)于安全相關(guān)的軟件來說尤其重要。
我們的第一個(gè)步驟是,使用將會(huì)有特權(quán)訪問服務(wù)器 1 和 2 的帳號(hào)登錄到離線存儲(chǔ)服務(wù)器機(jī)器(見圖 1)。
$ ssh accountname@somedomain.com
登錄到離線存儲(chǔ)服務(wù)器以后,使用 ssh-keygen 程序并給出 -t dsa 選項(xiàng)來創(chuàng)建一個(gè)公鑰/密鑰對(duì)。 -t 選項(xiàng)是必須的,用來指定我們要生成的密鑰類型。我們將使用數(shù)字簽名算法(Digital Signature Algorithm,DSA),它讓我們可以使用更新的 SSH2 協(xié)議。參閱 ssh-keygen 手冊(cè)以獲得更多細(xì)節(jié)。
在 ssh-keygen 執(zhí)行的過程中,在詢問您口令(passphrase)之前,將提示您輸入 ssh 密鑰存儲(chǔ)的位置。當(dāng)詢問在何處存儲(chǔ)密鑰時(shí)只需要按下回車鍵,然后 ssh-keygen 程序?qū)?chuàng)建一個(gè)名為 .ssh 的隱藏目錄(如果原來不存在),以及兩個(gè)文件,一個(gè)公鑰文件和一個(gè)私鑰文件。
ssh-keygen 的一個(gè)有趣特性是,當(dāng)提示輸入一個(gè)口令時(shí),它讓您可以只是簡(jiǎn)單地按下回車鍵。如果您沒有給出口令,那么 ssh-keygen 將生成沒有加密的密鑰!如您所想,這不是個(gè)好主意。當(dāng)要求輸入口令時(shí),確保輸入一個(gè)足夠長(zhǎng)的字符消息,最好包含混合字符而不僅僅是一個(gè)簡(jiǎn)單的密碼字符串。
[offsite]:$ ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/accountname/.ssh/id_dsa):
Enter passphrase (empty for no passphrase): (enter passphrase)
Enter same passphrase again: (enter passphrase)
Your identification has been saved in /home/accountname/.ssh/id_dsa.
Your public key has been saved in /home/accountname/.ssh/id_dsa.pub.
The key fingerprint is: 7e:5e:b2:f2:d4:54:58:6a:fa:6b:52:9c:da:a8:53:1b accountname@offsite
清單 3. 永遠(yuǎn)選擇好的口令由于 ssh-keygen 生成的 .ssh 目錄是一個(gè)隱藏的“dot”目錄,所以要給 ls 命令傳入一個(gè) -a 選項(xiàng)來查看新創(chuàng)建的目錄:
[offsite]$ ls -a . .. .bash_logout .bash_profile .bashrc .emacs .gtkrc .ssh
進(jìn)入隱藏的 .ssh 目錄并列出其內(nèi)容:
[offsite]$ cd .ssh [offsite]$ ls -lrt id_dsa id_dsa.pub


