一、簡單備份觀念

++++++++++++++++++++++++++++++++++++++++++++++++
Listing 1. The arc shell script

   #!/bin/sh
   tar czvf $1.$(date +%Y%m%d-%H%M%S).tgz $1
   exit $?
++++++++++++++++++++++++++++++++++++++++++++++++

此 script 接收單一的檔案或目錄為參數,建立一個壓縮後的檔案,檔名則以日期為元素。
date 命令嵌入了日期與時間,可幫助你管理檔案。這裡用到秒的單位或許有點誇張,不過你可以自已 man date,決定使用的方式。如果你的命令不加 -v,tar 就會默默作完它的工作不顯示額外資訊。

假定你要打包 beoserver 這個目錄:

++++++++++++++++++++++++++++++++++++++++++++++++
Listing 2. Archiving the beoserver directory

   $ ls
   arc  beoserver
   $ ./arc beoserver
   beoserver/
   beoserver/bookl.dat
   beoserver/beoserver_ab_off
   beoserver/beoserver_ab_on
   $ ls
   arc  beoserver  beoserver.20040321-014844.tgz
++++++++++++++++++++++++++++++++++++++++++++++++

二、進階備份

簡單備份雖然有用,但仍是得手動進行備份的動作。以公司行號來說,建議你要經常的備份、要置放在多個媒體裡、要收放在不同的地理位置。目的就是要避免仰賴單一媒體或單一位置。

這篇文章將規劃,以一台 administator 的機器透過 internet 連上帶有 DB 的 server1 與 server2,另有一台遠端的 offsite storage server 相互連接。

Server 1 與 Server 2 要備份的檔案都會以安全的方式傳送至 offsite storage server,整個備份過程無須人工/人力的介入。此處將使用標準工具,包括部份 Open Secure Shell 工具組 (OpenSSH)、tar 打包工具、cron 工作排程。計劃將使用 cron 排程,透過 shell 與 secure shell copy (scp) 自動化檔案的傳輸。

三、利用公開/私密金鑰,讓遠端存取動作更安全

在數位安全的世界裡,金鑰 (key) 指的是一段資料,以此加密/解密其它的資料。公開與私密金鑰最棒的設計就在於用公開金鑰加密的資料只有與之相關的私密金鑰才解得開。在本文就是以建立與使用公開/私密金鑰來建立一個高安全性的分散式備份解決方案。

在此解決方案裡的每一台機器都必須跑 OpenSSH secure shell service (sshd),其通訊埠 22 須能通過所有居中的防火牆。

最終,是要提供一個無須手動提供密碼就能達成安全性存取的解決方案,不過若你覺得最簡單的方式就是無須提供密碼,這:萬萬不可啊! 相對地,我們在這使用的方式會花費比較多的時間,建立一套提供所有便利性的 passphraseless 帳號系統,而這麼作其實是具有高度安全性的。

(註:passphraseless 查到的中譯為:無口令,指的是不需要密碼或字串。)

首先,確認所有系統皆已安裝 OpenSSH,並瞭解其安裝版本:

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
$ ssh -V
OpenSSH_3.5p1, SSH protocols 1.5/2.0, OpenSSL 0x0090701f
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

ssh -V 是我們在命令列所下的指令。OpenSSH 開頭的行列為回應的版本資訊,若此處回覆的版本大於 2.x,那麼就可行了! 相對的,若是 2.x 之前的版本,我們會建議你更新到最近一次釋出的穩定版 (stable release),這對安全性相關軟體而言是很重要的。

接下來,使用有權限存取 server 1 與 server 2 的帳號,登入 offsite storage server 的機器。

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
$ ssh accountname@somedomain.com
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

登入後,使用 ssh-keygen 程式,指定 -t dsa 選項建立一對公開/私密金鑰。-t 為必要選項,它是用來指定我們所要產生之金鑰的型態,此處使用的 Digital Signature Algorithm (DSA) 可用於較新的 SSH2 通訊協定,你可以參考 ssh-keygen的 man page 瞭解更多資訊。
 
執行 ssh-keygen 的過程中,在要求你輸入 passphrase 前會提示詢問金鑰的存放位置,你只要按下 【Enter】 ,套用 ssh-keygen 程式為你建立的隱藏目錄 .ssh 即可,此時將產生兩個檔案:公開金鑰檔與私密金鑰檔。

(註:passphrase 指的是用來存取電腦系統、程式或資料的一串字)

需留意的一點是:當 ssh-keygen 提示你輸入 passphrase ,而你只是簡單按下 【Enter】 也是可行的,只是這時 ssh-keygen 為你產生的是一個未加密過的金鑰,這樣太不安全了 !! 所以當要求輸入 passphrase 時,請確認你輸入的是一個合理的、長串的、記得住的字串訊息,它可以包含字母與數字字元,請不要簡單輸入一個密碼字串就了事。

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Listing 3. Always choose a good passphrase

   [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): (輸入 passphrase)
   Enter same passphrase again: (輸入 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
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

由於 ssh-keygen 產生的隱藏檔為 . 開頭的目錄,你在 ls 時要加上 -a 才看得到:

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
[offsite]$ ls -a
. .. .bash_logout .bash_profile .bashrc .emacs .gtkrc .ssh
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

進 .ssh 目錄看看裡頭有什麼:

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 [offsite]$ cd .ssh
[offsite]$ ls -lrt
id_dsa id_dsa.pub
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

此時在 .ssh 目錄下我們已擁有了私密金鑰 (id_dsa) 與公開金鑰 (id_dsa.pub)。你可以用文字編輯 vi 或 emcacs 或者簡單的 less 或 cat 命令查看它的內容。你會發現這裡面的內容是以 base64 編碼的。

接下來就是將公開金鑰複製並安裝至 server 1 與 2 的時侯了。不要使用 ftp ! 請用安全的複製程式將公開金鑰傳送至遠端系統:

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Listing 4. Installing the public keys on the remote servers

   [offsite]$ scp .ssh/id_dsa.pub accountname@server1.com:offsite.pub
   accountname@server1.com's password: (輸入密碼,而不是剛剛那個新的 passphrase!)
   id_dsa.pub 100% |*****************************| 614 00:00

   [offsite]$ scp .ssh/id_dsa.pub accountname@server2.com:offsite.pub
   accountname@server2.com's password: (輸入密碼,而不是剛剛那個新的 passphrase!)
   id_dsa.pub 100% |*****************************| 614 00:00
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

安裝好新公開金鑰後,我們就可以使用剛剛建立公開/私密金鑰的那組 passphrase 簽入每台機器了。之後,登入每台機器,將 offsite.pub 檔的內容,添增到一個叫 authorized_keys 的檔案尾端,authorized_keys 就存放在各台遠端機器的 .ssh 目錄下。你可使用文字編輯程式或簡單的用 cat 命令就完成這件事:

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Listing 5. Add offsite.pub to your list of authorized keys

   [offsite]$ ssh accountname@server1.com
   accountname@server1.com's password: (enter password, not new
   passphrase!)
   [server1]$ cat offsite.pub >> ./ssh/authorized_keys
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

接下來的動作就牽涉到一些安全性的觀念了。首先,將 .ssh 目錄的權限改到只有擁有者可以讀、寫與執行。然後確保 authorized_keys 這個檔只有擁有者可以存取,最後移除先前上傳的 offsite.pub 金鑰檔,因為已不再需要它了。存取權的確認非常重要,因為 OpenSSH 伺服器會拒絕使用非安全存取權限的金鑰。

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Listing 6. Changing permissions with chmod

   [server1]$ chmod 700 .ssh
   [server1]$ chmod 600 ./ssh/authorized_keys
   [server1]$ rm offsite.pub
   [server1]$ exit
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

也在 server 2 完成上述動作後,就可以回到 offsite storage 系統去測試新的 passphrase 型態存取方式。你可以在 offiste 伺服器上,輸入:

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 [offsite]$ ssh -v accountname@server1.com
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

用 -v 選項可以在確認此帳號能否透過新的 passphrase 存取遠端伺服器時,看到除錯的訊息。除錯的輸出訊息不但會顯示重要資訊,還能讓你更進一步瞭解認證程序是如何運作。不過之後作連結的動作就不需要用到 -v 了。


接下來的主題:
四、使用 ssh-agent 讓機器自動存取
五、keychain 可以簡化金鑰的存取
六、將備份程序寫成 script
七、排程
八、確認備份的動作
九、其它的安全性注意事項

自動備份 @ Linux -- Part II

原文參考:
【Automate backups on】
如有版權問題,請來信 (nicaliu at gmail dot com) 告知,謝謝。
arrow
arrow
    全站熱搜

    nicaliu 發表在 痞客邦 留言(0) 人氣()