淺談備份策略啊!
萬一不幸你的 Linux 被駭客入侵了、或是你的 Linux 系統由於硬體關係 (不論是天災還是人禍) 而掛掉了!這個時候,請問如何快速的回復你的系統呢?呵呵!當然囉,如果有備份資料的話, 那麼回復系統所花費的時間與成本將降低相當的多!平時最好就養成備份的習慣, 以免突然間的系統損毀造成手足無措!此外,哪些檔案最需要備份呢?又,備份是需要完整的備份還是僅備份重要資料即可? 嗯!確實需要考慮看看呦!
備份是個很重要的工作,很多人總是在系統損毀的時候才在哀嚎說:『我的資料啊!天那...!』此時才會發現備份資料的可愛! 但是備份其實也非常可怕!因為你的重要資料都在備份檔裡面,如果這個備份被竊取或遺失,其實對你的系統資安影響也非常大! 同時,備份使用的媒體選擇也非常多樣,但是各種儲存媒體各有其功能與優劣,所以當然得要選擇囉!閒話少說,來談談備份吧!
老實說,備份是系統損毀時等待救援的救星!因為你需要重新安裝系統時, 備份的好壞會影響到你系統復原的進度!不過,我們想先知道的是,系統為什麼會損毀啊?是人為的還是怎樣產生的啊? 事實上,系統有可能由於不預期的傷害而導致系統發生錯誤! 什麼是不預期的傷害呢?這是由於系統可能因為不預期的硬體損壞,例如硬碟壞掉等等,或者是軟體問題導致系統出錯, 包括人為的操作不當或是其他不明因素等等所致。底下我們就來談談系統損壞的情況與為何需要備份吧!
基本上,『電腦是一個相當不可靠的機器』這句話在大部分的時間內還是成立的! 常常會聽到說『要電腦正常的工作,最重要的是要去拜拜!』嘿嘿!不要笑!這還是真的哩! 尤其是在日前一些電腦周邊硬體的生產良率 (就是將硬體產生出來之後,經過測試, 發現可正常工作的與不能正常工作的硬體總數之比值) 越來越差的情況之下,電腦的不穩定狀態實在是越來越嚴重了!
舉個例子來說,鳥哥曾經同時買過同一廠牌的 30GB 硬碟三顆,回來之後經過一個星期,嘿嘿!掛掉了兩顆! 其中一顆是有壞軌,另外一顆是『完全死掉』,拿去公司要求修理,結果呢?嗯!店家直接拿了一顆新的給我, 害我嚇一跳,店家的工程師說『唉呀!目前這個牌子的良率太差了,所以代理商為了怕麻煩,都會直接拿新的替換給我們啦!』 要曉得的是,當初那一顆完全死掉的硬碟,是我用來備份我的主機資料的.... 好在當時我將備份的資料放在三四個地方,還好...
一般來說,會造成系統損毀的硬體元件應該要算硬碟吧!因為其他的元件壞掉時,雖然會影響到系統的運作, 不過至少我們的資料還是存在硬碟當中的啊!為了避免這個困擾,於是乎有可備份用的 RAID1, RAID5 等磁碟陣列的應用啊!但是如果是 RAID 控制晶片壞掉呢?這就麻煩了~所以說,如果有 RAID 系統時, 鳥哥個人還是覺得需要進行額外的備份才好的!如果資料夠重要的話。
根據分析,其實系統的軟體傷害最嚴重的就屬使用者的操作不當啦!像最近這幾天才在鳥園討論區發現, 有網友手滑了一下,結果在指令列輸入了『 rm -rf /home 』,這造成什麼後果?就造成使用者家目錄被刪光光~ 因為當時下達指令的身份是 root 啊~會欲哭無淚喔!為了避免這方面的『手滑』問題,備份是重要的!
軟體傷害除了來自主機上的使用者操作不當之外,最常見的可能是資安攻擊事件了。 假如你的 Linux 系統上面某些 Internet 的服務軟體是最新的!這也意味著可能是『相對最安全的』, 但是,這個世界目前的閒人是相當多的,你不知道什麼時候會有所謂的『駭客軟體』被提供出來,萬一你在 Internet 上面的服務程序被攻擊,導致你的 Linux 系統全毀,這個時候怎麼辦?當然是要復原系統吧?
那如何復原被傷害的系統呢?『重新安裝就好啦!』或許你會這麼說, 但是,像鳥哥管理的幾個網站的資料,尤其是 MySQL 資料庫的資料,這些都是彌足珍貴的經驗資料, 萬一被損毀而救不回來的時候,不是很可惜嗎?這個還好哩,萬一你是某家銀行的話, 那麼資料的損毀可就不是能夠等閒視之的!關係的可是數千甚至上萬人的身家財產!這就是備份的重要性了! 他可以最起碼的稍微保障我們的資料有另外一份 copy 的備援以達到『安全回復』的基本要求!
由於軟硬體的問題都可能造成系統的損毀,所以備份當然就很重要啦!問題是,每一部主機都需要備份嗎? 多久備份一次呢?要備份什麼資料呢?
如果是針對個人桌上型電腦使用的資料,那麼 Norton 的『 Ghost 』應該算是一套好到不行的備份大師了! 最主要是 Ghost 可以針對整個 partition 來進行備份,所以囉,我們可以將 Windows 系統當中的整個 C 或者是整個 D 槽完整的備份下來。甚至在還原方面也是非常的快速,而且操作簡便! 另外,由於個人桌上型電腦所使用的資料量通常不大,所以當 ghost 完成之後,通常只要將資料燒錄到光碟片當中,大約只要一至兩片的光碟片也就綽綽有餘囉! 那麼將光碟片保存好,這就是最簡易的資料備份模式囉! 此外,由於個人的資料變動性不大,所以資料的備份頻率方面也不需要非常的頻繁!
但是,萬一你的主機有提供 Internet 方面的服務呢?又該如何備份啊?舉個例子來說,像是我們 Study Area 團隊的討論區網站 http://phorum.study-area.org 提供的是類似 BBS 的討論文章, 雖然資料量不大,但是由於討論區的文件是天天在增加的,每天都有相當多的資訊流入, 由於某些資訊都是屬於重要的人物之留言,這個時候,我們能夠讓機器死掉嗎?或者是能夠一季三個月才備份一次嗎? 這個備份頻率需求的考量是非常重要的!
再提到 2002 年左右鳥哥的討論區曾經掛點的問題,以及 2003 年初 Study-Area 討論區掛點的問題,討論區一旦掛點的話,該資料庫內容如果損毀到無法救回來, 嘿嘿!要曉得討論區可不是一個人的心血耶!有的時候 (像 Study-Area 討論區) 是一群熱心 Linux 的朋友們互相建立交流起來的資料流通網,如果死掉了,那麼不是讓這些熱血青年的熱情付之一炬了嗎? 所以囉,建立備份的策略 (頻率、媒體、方法等) 是相當的重要的。
由於電腦 (尤其是目前的電腦,操作頻率太高、硬體良率太差、使用者操作習慣不良、 『某些』作業系統的當機率太高....) 的穩定性較差,所以囉!備份的工作就越來越重要了! 那麼一般我們在備份時考慮的因素有哪些呢?
底下我們就來談一談這些問題的解決之道吧! ^_^
一般來說,鳥哥比較喜歡備份最重要的檔案而已 (關鍵資料備份),而不是整個系統都備份起來 (完整備份, Full backup)!那麼哪些檔案是有必要備份的呢?具有備份意義的檔案通常可以粗分為兩大類,一類是系統基本設定資訊、一類則是類似網路服務的內容資料。 那麼各有哪些檔案需要備份的呢?我們就來稍微分析一下。
這方面的檔案主要跟『帳號與系統設定檔』有關係! 主要有哪些帳號的檔案需要備份呢?就是 /etc/passwd, /etc/shadow, /etc/group, /etc/gshadow, /home 底下的使用者家目錄等等, 而由於 Linux 預設的重要參數檔都在 /etc/ 底下,所以只要將這個目錄備份下來的話, 那麼幾乎所有的設定檔都可以被保存的!
至於 /home 目錄是一般用戶的家目錄,自然也需要來備份一番!再來,由於使用者會有郵件吧!所以呢,這個 /var/spool/mail/ 內容也需要備份呦!另外,由於如果你曾經自行更動過核心,那麼 /boot 裡頭的資訊也就很重要囉!所以囉,這方面的資料你必須要備份的檔案為:
這部份的資料可就多而且複雜了,首先是這些網路服務軟體的設定檔部分, 如果你的網路軟體安裝都是以原廠提供的為主,那麼你的設定檔案大多是在 /etc 底下,所以這個就沒啥大問題!但若你的套件大多來自於自行的安裝,那麼 /usr/local 這個目錄可就相當的重要了!
再來,每種服務提供的資料都不相同,這些資料很多都是人們提供的!舉例來說,你的 WWW 伺服器總是需要有人提供網頁檔案吧?否則瀏覽器來是要看啥咚咚?你的討論區總是得要寫入資料庫系統吧? 否則討論的資料如何更新與記載?所以,使用者主動提供的檔案,以及服務運作過程會產生的資料, 都需要被考慮來備份。若我們假設我們提供的服務軟體都是使用原廠的 RPM 安裝的!所以要備份的資料檔案有:
由上面的介紹來看的話,如果你的硬體或者是由於經費的關係而無法全部的資料都予以備份時, 鳥哥建議你至少需要備份這些目錄呦!
有些資料是不需要備份的啦!例如我們在第六章檔案權限與目錄配置裡頭提到的 /proc 這個目錄是在記錄目前系統上面正在跑的程序,這個資料根本就不需要備份的呢!此外,外掛的機器,例如 /mnt 或 /media 裡面都是掛載了其他的硬碟裝置、光碟機、軟碟機等等,這些也不需要備份吧? 所以囉!底下有些目錄可以不需要備份啦!
用來儲存備份資料的媒體非常的多樣化,那該如何選擇呢?在選擇之前我們先來講個小故事先!
在備份的時候,選擇一個『資料存放的地方』也是很需要考慮的一個因素! 什麼叫做資料存放的地方呢?講個最簡單的例子好了,我們知道說,較為大型的機器都會使用 tape 這一種磁帶機來備份資料,而如果是一般個人電腦的話,很可能是使用類似 Mo 這一種可讀寫式光碟片來存取資料!但是你不要忘記了幾個重要的因素,那就是萬一你的 Linux 主機被偷了呢?
這不是不可能的,之前鳥哥在成大唸書時,隔壁校區的研究室曾經遭小偷, 裡面所有的電腦都被偷走了!包括『Mo 片』,當他們發現的時候,一開始以為是硬體被偷走了,還好, 他們都有習慣進行備份,但是很不幸的,這一次連『備份的 MO 都被拿走了!』怎麼辦?!只能道德勸說小偷先生能夠良心發現的將硬碟拿回來囉!唉~真慘....
這個時候,所謂的『異地備援系統』就顯的相當的重要了! 什麼是異地備援呀!說的太文言了!呵!簡單的說,就是將你的系統資料『備份』到其他的地方去, 例如說我的機器在台南,但是我還有另一部機器在高雄老家,這樣的話, 我可以將台南機器上面重要的資料都給他定期的自動的透過網路傳輸回去! 也可以將家裡重要的資料給他丟到台南來!這樣的最大優點是可以在台南的機器死掉的時候, 即使是遭小偷,也可以有一個『萬一』的備份所在!
有沒有缺點啊?有啊!缺點就是~頻寬嚴重的不足! 在這種狀態下,所能採取的策略大概就是『僅將最重要的資料給他傳輸回去囉!』 至於一些只要系統從新安裝就可以回復的咚咚!那就沒有這個必要了!當然囉,如果你的網路是屬於 T1 專線的話,那麼完整備份將資料丟到另一地去,也是很可行的啦!只是鳥哥沒有那麼好命...
在此同時,我們再來談一談,那麼除了異地備援這個『相對較為安全的備份』方法之外, 還有沒有其他的方法可以儲存備份的呢?畢竟這種網路備援系統實在是太耗頻寬了!如果像我們一般家用的 ADSL 根本就是吃不消!那麼怎麼辦?喔~那就只好使用近端的裝置來備份囉! 這也是目前我們最常見到的備份方法!例如一般我們使用的 Tape, Mo, Zip, CD-RW, DVD-RW 還有備份用抽取式硬碟與攜帶式硬碟等等! 那麼在選擇上需要注意些什麼呢?需要注意的地方有幾點:
無論如何,如果經費允許的話, Tape 備份資料真的是一個不錯的點子!因為他的高容量讓我好滿意! 再來,如果經費稍微短缺的話,那麼 DVD-RW 經常性的將資料燒錄下來,這也是蠻好的,尤其 DVD 片又不佔空間!再來,如果還是沒有辦法,那麼一顆內建在 Linux 的硬碟用來備份也是不錯的! 什麼!連備份的硬碟都沒有,唉!怎麼跟我一樣~這個時候沒辦法啦,用原來的安裝系統的硬碟,多留一個 partition 用來當作備份之用吧 (這也是目前鳥哥常用的方法之一!)底下我們來看一看一些常見的裝置代號!
特別留意的是磁帶機呦!如果你有錢的話,那麼買一部磁帶機是相當不錯的建議!沒錢的話,買 IDE 或 SATA 介面的硬碟也很不錯!! ^_^
講了好多口水了,還是沒有講到重點,真是的....好了,再來提到那個備份的種類,因為想要選擇什麼儲存媒體與相關備份工具, 都與備份使用的方式有關!那麼備份有哪些方式呢?一般可以粗略分為『累積備份』與『差異備份』這兩種 (註1)。當然啦,如果你在系統出錯時想要重新安裝到更新的系統時,僅備份關鍵資料也就可以了!
備份不就是將重要資料複製出來即可嗎?幹嘛需要完整備份 (Full backup) 呢?如果你的主機是負責相當重要的服務, 因此如果有不明原因的當機事件造成系統損毀時,你希望在最短的時間內復原系統。此時,如果僅備份關鍵資料時, 那麼你得要在系統出錯後,再去找新的 Linux distribution 來安裝,安裝完畢後還得要考慮到資料新舊版本的差異問題, 還得要進行資料的移植與系統服務的重新建立等等,等到建立妥當後,還得要進行相關測試! 這種種的工作可至少得要花上一個星期以上的工作天才能夠處理妥當!所以,僅有關鍵資料是不夠的!
但反過來講,如果是完整備份的話呢?若硬體出問題導致系統損毀時,只要將完整備份拿出來,整個給他傾倒回去硬碟, 所有事情就搞定了!有些時候 (例如使用 dd 指令) 甚至連系統都不需要重新安裝!反正整個系統都給他倒回去,連同重要的 Linux 系統檔案等,所以當然也就不需要重新安裝啊!因此,很多企業用來提供重要服務的主機都會使用完整備份, 若所提供的服務真的非常重要時,甚至會再架設一部一模一樣的機器呢!如此一來, 若是原本的機器出問題,那就立刻將備份的機器拿出來接管!以使企業的網路服務不會中斷哩!
那你知道完整備份的定義了吧?沒錯!完整備份就是將根目錄 (/) 整個系統通通備份下來的意思! 不過,在某些場合底下,完整備份也可以是備份一個檔案系統 (filesystem)!例如 /dev/sda1 或 /dev/md0 或 /dev/myvg/mylv 之類的檔案系統就是了。
雖然完整備份在還原方面有相當良好的表現,但是我們都知道系統用的越久,資料量就會越大!如此一來, 完整備份所需要花費的時間與儲存媒體的使用就會相當麻煩~所以,完整備份並不會也不太可能每天都進行的! 那你想要每天都備份資料該如何進行呢?有兩種方式啦,一種是本小節會談到的累積備份,一種則是下個小節談到的差異備份。
所謂的累積備份,指的是在系統在進行完第一次完整備份後,經過一段時間的運作, 比較系統與備份檔之間的差異,僅備份有差異的檔案而已。而第二次累積備份則與第一次累積備份的資料比較, 也是僅備份有差異的資料而已。如此一來,由於僅備份有差異的資料,因此備份的資料量小且快速!備份也很有效率。 我們可以從下圖來說明:
假如我在星期一作好完整備份,則星期二的累積備份是系統與完整備份間的差異資料;星期三的備份是系統與星期二的差異資料, 星期四的備份則是系統與星期三的差異資料。那你得要注意的是,星期二的資料是完整備份加第一次累積備份, 星期三的資料是完整備份加第一次累積與第二次累積備份,星期四的資料則是星期一的完整備份加第一次加第二次加第三次累積備份。 由於每次都僅與前一次的備份資料比較而已,因此備份的資料量就會少很多!
那如何還原?經過上面的分析,我們也會知道累積備份的還原方面比較麻煩! 假設你的系統在星期五的時候掛點了!那你要如何還原?首先,你必須要還原星期一的完整備份,然後還原星期二的累積備份, 再依序還原星期三、星期四的累積備份才算完全復原!那如果你是經過了九次的累積備份,就得要還原到第九次的階段, 才是最完整的還原程序!
完整備份常用的工具有 dd, cpio, dump/restore 等等。因為這些工具都能夠備份裝置與特殊檔案! dd 可以直接讀取磁碟的磁區 (sector) 而不理會檔案系統,是相當良好的備份工具!不過缺點就是慢很多! cpio 是能夠備份所有檔名,不過,得要配合 find 或其他找檔名的指令才能夠處理妥當。以上兩個都能夠進行完整備份, 但累積備份就得要額外使用腳本程式來處理。可以直接進行累積備份的就是 dump 這個指令囉!詳細的指令與參數用法, 請前往第九章查閱,這裡僅列出幾個簡單的範例而已。
# 1. 用 dd 來將 /dev/sda 備份到完全一模一樣的 /dev/sdb 硬碟上: [root@www ~]# dd if=/dev/sda of=/dev/sdb # 由於 dd 是讀取磁區,所以 /dev/sdb 這顆磁碟可以不必格式化!非常的方便! # 只是你會等非常非常久!因為 dd 的速度比較慢! # 2. 使用 cpio 來備份與還原整個系統,假設儲存媒體為 SATA 磁帶機: [root@www ~]# find / -print | cpio -covB > /dev/st0 <==備份到磁帶機 [root@www ~]# cpio -iduv < /dev/st0 <==還原
假設 /home 為一個獨立的檔案系統,而 /backupdata 也是一個獨立的用來備份的檔案系統,那如何使用 dump 將 /home 完整的備份到 /backupdata 上呢?可以像底下這樣進行看看:
# 1. 完整備份 [root@www ~]# dump -0u -f /backupdata/home.dump /home # 2. 第一次進行累積備份 [root@www ~]# dump -1u -f /backupdata/home.dump.1 /home
除了這些指令之外,其實 tar 也可以用來進行完整備份啦!舉例來說,/backupdata 是個獨立的檔案系統, 你想要將整個系統通通備份起來時,可以這樣考慮:將不必要的 /proc, /mnt, /tmp 等目錄不備份,其他的資料則予以備份:
[root@www ~]# tar --exclude /proc --exclude /mnt --exclude /tmp \ > --exclude /backupdata -jcvp -f /backupdata/system.tar.bz2 /
差異備份與累積備份有點類似,也是需要進行第一次的完整備份後才能夠進行。只是差異備份指的是:每次的備份都是與原始的完整備份比較的結果。所以系統運作的越久,離完整備份時間越長, 那麼該次的差異備份資料可能就會越大!差異備份的示意圖如下所示:
差異備份常用的工具與累積備份差不多!因為都需要完整備份嘛!如果使用 dump 來備份的話,那麼每次備份的等級 (level) 就都會是 level 1 的意思啦!當然啦,你也可以透過 tar 的 -N 選項來備份喔!如下所示:
[root@www ~]# tar -N '2009-06-01' -jpcv -f /backupdata/home.tar.bz2 /home # 只有在比 2009-06-01 還要新的檔案,在 /home 底下的檔案才會被打包進 home.bz2 中! # 有點奇怪的是,目錄還是會被記錄下來,只是目錄內的舊檔案就不會備份。
此外,你也可以透過 rsync 來進行鏡像備份喔! 這個 rsync 可以對兩個目錄進行鏡像 (mirror) ,算是一個非常快速的備份工具!簡單的指令語法為:
[root@www ~]# rsync -av 來源目錄 目標目錄 # 1. 將 /home/ 鏡像到 /backupdata/home/ 去 [root@www ~]# rsync -av /home /backupdata/ # 此時會在 /backupdata 底下產生 home 這個目錄來! [root@www ~]# rsync -av /home /backupdata/ # 再次進行會快很多!如果資料沒有更動,幾乎不會進行任何動作!
根據分析 (註2) ,差異備份所使用的磁碟容量可能會比累積備份來的大,但是差異備份的還原較快, 因為只需要還原完整備份與最近一次的差異備份即可。無論如何,請依據你自己的喜好來選擇備份的方式吧!
完整備份雖然有許多好處,但就是需要花費很多時間!所以,如果在主機提供的服務並不是一定要 24 小時提供的前提下, 我們可以僅備份重要的關鍵資料即可。由於主機即使當機個一兩天可能也不會影響到你的正常生活時, 僅備份關鍵資料就好啦!不需要整個系統都備份。僅備份關鍵資料是有許多好處的! 由於完整備份可能是在系統運作期間進行,不但會花費非常多時間,而且如果備份當時系統已經被攻破, 那你備份的資料是有問題的,那還原回去也是有問題的系統啊!
如果僅是備份關鍵資料而已,那麼由於系統的絕大部分執行檔都可以後來重新安裝,因此若你的系統不是因為硬體問題, 而是因為軟體問題而導致系統被攻破或損毀時,直接捉取最新的 Linux distribution ,然後重新安裝, 然後再將系統資料 (如帳號/密碼與家目錄等等) 與服務資料 (如 www/email/crontab/ftp 等等) 一個一個的填回去! 那你的系統不但保持在最新的狀態,同時也可以趁機處理一下與重新溫習一下系統設定!是很不錯的呦!
不過,備份關鍵資料最麻煩的地方其實就是在還原啦!上述的還原方式是你必須要很熟悉系統運作, 否則還原得要花費很多時間的!尤其近來的 Linux 強調安全性,所以加入 SELinux 了,你如果要從舊版的 Linux 升級到新版時, 原本若沒有 SELinux 而換成新版則需要啟動 SELinux 時,那個除錯的時間會花很長一段日子哩! 鳥哥認為這是僅備份關鍵資料的一些優缺點啦~
備份關鍵資料鳥哥最愛使用 tar 來處理了!如果想要分門別類的將各種不同的服務在不同的時間備份使用不同檔名, 配合 date 指令是非常好用的工具!例如底下的案例是依據日期來備份 mysql 的資料庫喔!
[root@www ~]# tar -jpcvf mysql.`date +%Y-%m-%d`.tar.bz2 /var/lib/mysql
備份是非常重要的工作,你可不希望想到才進行吧?交給系統自動處理就對啦!請自己撰寫 script , 配合 crontab 去執行吧!這樣子,備份會很輕鬆喔!
每部主機的任務都不相同,重要的資料也不相同,重要性也不一樣,因此,每個人的備份思考角度都不一樣! 有些備份策略是非常有趣的,包括使用多個磁帶機與磁帶來自動備份企業資料哩 (註3) 。
就鳥哥的想法來說,鳥哥並沒有想要將整個系統完整的備份下來,因為太耗時間了!而且就鳥哥的立場而言,似乎也沒有這個必要, 所以通常鳥哥只備份較為重要的檔案而已!不過,由於鳥哥需要備份 /home 與網頁資料,如果天天都備份,我想,系統遲早會受不了 (因為這兩個部分就已經佔去數 10 GB 的硬碟空間...),所以鳥哥就將我的備份分為兩大部分,一個是每日備份經常性變動的重要資料, 一個則是每週備份就不常變動的資訊。這個時候我就寫了兩個簡單的 scripts ,分別來儲存這些資料。
所以針對鳥哥的『鳥站』來說,我的備份策略是這樣的:
那就來看看鳥哥是怎麼備份的吧! ^_^
底下提供鳥哥的備份的 scripts ,希望對大家有點幫助!鳥哥假設你已經知道如何掛載一個新的 filesystem 到 /backup 去,所以格式化與掛載這裡就不再強調囉。
[root@www ~]# vi /backup/backupwk.sh #!/bin/bash # ==================================================================== # 使用者參數輸入位置: # basedir=你用來儲存此腳本所預計備份的資料之目錄(請獨立檔案系統) basedir=/backup/weekly <==您只要改這裡就好了! # ==================================================================== # 底下請不要修改了!用預設值即可! PATH=/bin:/usr/bin:/sbin:/usr/sbin; export PATH export LANG=C # 設定要備份的服務的設定檔,以及備份的目錄 named=$basedir/named postfixd=$basedir/postfix vsftpd=$basedir/vsftp sshd=$basedir/ssh sambad=$basedir/samba wwwd=$basedir/www others=$basedir/others userinfod=$basedir/userinfo # 判斷目錄是否存在,若不存在則予以建立。 for dirs in $named $postfixd $vsftpd $sshd $sambad $wwwd $others $userinfod do [ ! -d "$dirs" ] && mkdir -p $dirs done # 1. 將系統主要的服務之設定檔分別備份下來,同時也備份 /etc 全部。 cp -a /var/named/chroot/{etc,var} $named cp -a /etc/postfix /etc/dovecot.conf $postfixd cp -a /etc/vsftpd/* $vsftpd cp -a /etc/ssh/* $sshd cp -a /etc/samba/* $sambad cp -a /etc/{my.cnf,php.ini,httpd} $wwwd cd /var/lib tar -jpc -f $wwwd/mysql.tar.bz2 mysql cd /var/www tar -jpc -f $wwwd/html.tar.bz2 html cgi-bin cd / tar -jpc -f $others/etc.tar.bz2 etc cd /usr/ tar -jpc -f $others/local.tar.bz2 local # 2. 關於使用者參數方面 cp -a /etc/{passwd,shadow,group} $userinfod cd /var/spool tar -jpc -f $userinfod/mail.tar.bz2 mail cd / tar -jpc -f $userinfod/home.tar.bz2 home cd /var/spool tar -jpc -f $userinfod/cron.tar.bz2 cron at [root@www ~]# chmod 700 /backup/backupwk.sh [root@www ~]# /backup/backupwk.sh <==記得自己試跑看看!
上面的 script 主要均使用 CentOS 5.x (理論上, Red Hat 系列的 Linux 都是用) 預設的服務與目錄, 如果你有設定某些服務的資料在不同的目錄時,那麼上面的 script 是還需要修改的!不要只是拿來用而已喔! 上面 script 可以在底下的連結取得。
再來,繼續提供一下每日備份資料的腳本程式!請注意,鳥哥這裡僅有提供 MySQL 的資料庫備份目錄, 與 WWW 的類似留言版程式使用的 CGI 程式與寫入的資料而已。 如果你還有其他的資料需要每日備份,請自行照樣造句囉! ^_^
[root@www ~]# vi /backup/backupday.sh #!/bin/bash # ========================================================= # 請輸入,你想讓備份資料放置到那個獨立的目錄去 basedir=/backup/daily/ <==你只要改這裡就可以了! # ========================================================= PATH=/bin:/usr/bin:/sbin:/usr/sbin; export PATH export LANG=C basefile1=$basedir/mysql.$(date +%Y-%m-%d).tar.bz2 basefile2=$basedir/cgi-bin.$(date +%Y-%m-%d).tar.bz2 [ ! -d "$basedir" ] && mkdir $basedir # 1. MysQL (資料庫目錄在 /var/lib/mysql) cd /var/lib tar -jpc -f $basefile1 mysql # 2. WWW 的 CGI 程式 (如果有使用 CGI 程式的話) cd /var/www tar -jpc -f $basefile2 cgi-bin [root@www ~]# chmod 700 /backup/backupday.sh [root@www ~]# /backup/backupday.sh <==記得自己試跑看看!
上面的腳本可以在底下的連結取得。這樣一來每天的 MySQL 資料庫就可以自動的被記錄在 /backup/daily/ 目錄裡頭啦!而且還是檔案名稱會自動改變的呦!呵呵!我很喜歡!OK!再來就是開始讓系統自己跑啦! 怎麼跑?就是 /etc/crontab 呀!提供一下我的相關設定呦!
[root@www ~]# vi /etc/crontab # 加入這兩行即可 (請注意你的檔案目錄!不要照抄呦!) 30 3 * * 0 root /backup/backupwk.sh 30 2 * * * root /backup/backupday.sh
這樣系統就會自動的在每天的 2:30 進行 MySQL 的備份,而在每個星期日的 3:30 進行重要檔案的備份!呵呵!你說,是不是很容易呢!但是請千萬記得呦!還要將 /backup/ 當中的資料 copy 出來才行耶!否則整部系統死掉的時候...那可不是鬧著玩的! 所以鳥哥大約一個月到兩個月之間,會將 /backup 目錄內的資料使用 DVD 複製一下,然後將 DVD 放置在家中保存!這個 DVD 很重要的喔!不可以遺失,否則系統的重要資料 (尤其是帳號資訊) 流出去可不是鬧著玩的!
如果你有控管兩部以上的 Linux 主機時,那麼互相將對方的重要資料保存一份在自己的系統中也是個不錯的想法! 那怎麼保存啊?使用 USB 複製來去嗎?當然不是啦!你可以透過網路來處置啦!我們假設你已經有一部主機, 這部主機的 IP 是 192.168.1.100 ,而且這部主機已經提供了 FTP 與 sshd 這兩個網路服務, 同時你已經做好了 FTP 的帳號,sshd 帳號的免密碼登入功能等 (這部分請參考伺服器篇的介紹),接下來你可以這樣做:
假設你要上傳的資料是將 /backup/weekly/ 目錄內的檔案統整為一個 /backup/weekly.tar.bz2 , 並且上傳到伺服器端的 /home/backup/ 底下,使用的帳號是 dmtsai ,密碼是 dmtsai.pass 。 那麼你可以這樣做看看:
[root@www ~]# vi /backup/ftp.sh
#!/bin/bash
# ===========================================
# 先輸入系統所需要的資料
host="192.168.1.100" # 遠端主機
id="dmtsai" # 遠端主機的 FTP 帳號
pw='dmtsai.pass' # 該帳號的密碼
basedir="/backup/weekly" # 本地端的欲被備份的目錄
remotedir="/home/backup" # 備份到遠端的何處?
# ===========================================
backupfile=weekly.tar.bz2
cd $basedir/..
tar -jpc -f $backupfile $(basename $basedir)
ftp -n "$host" > ${basedir}/../ftp.log 2>&1 <<EOF
user $id $pw
binary
cd $remotedir
put $backupfile
bye
EOF
另一個更簡單的方法就是透過 rsync ,但是你必須要在你的伺服器上面取得某個帳號使用權後, 並讓該帳號可以不用密碼即可登入才行!這部分得要先參考伺服器篇的遠端連線伺服器才行! 假設你已經設定好 dmtsai 這個帳號可以不用密碼即可登入遠端伺服器,而同樣的你要讓 /backup/weekly/ 整個備份到 /home/backup/weekly 底下時,可以簡單這樣做:
[root@www ~]# vi /backup/rsync.sh
#!/bin/bash
remotedir=/home/backup/
basedir=/backup/weekly
host=127.0.0.1
id=dmtsai
# 底下為程式階段!不需要修改喔!
rsync -av -e ssh $basedir ${id}@${host}:${remotedir}
由於 rsync 可以透過 ssh 來進行鏡像備份,所以沒有變更的檔案將不需要上傳的!相當的好用呢! 好了!大家趕緊寫一個適合自己的備份 script 來進行備份的行為吧!重要重要喔!
之所以要備份當然就是預防系統掛點啦!如果系統真的掛點的話,那麼你該如何還原系統呢?
由於是硬體損毀,所以我們不需要考慮系統軟體的不穩定問題,所以可以直接將完整的系統復原回去即可。 首先,你必須要先處理好你的硬體,舉例來說,將你的硬碟作個適當的處理,譬如建置成為磁碟陣列之類的。 然後依據你的備份狀態來復原。舉例來說,如果是使用差異備份,那麼將完整備份復原後, 將最後一次的差異備份復原回去,你的系統就恢復了!非常簡單吧!
由於系統的損毀是因為被攻擊,此時即使你恢復到正常的系統,那麼這個系統既然會被攻破, 沒道理你還原成舊系統就不會被再次攻破!所以,此時完整備份的復原可能不是個好方式喔!最好是需要這樣進行啦:
軟體資安事件造成的問題可大可小,一般來說,標準流程都是建議你將出問題的系統備份下來, 如果被追蹤到你的主機曾經攻擊過別人的話,那麼你至少可以拿出備份資料來佐證說,你是被攻擊者, 而不是主動攻擊別人的壞人啊!然後,記得一定要找出問題點並予以克服,不然的話,你的系統將一再地被攻擊啊! 那樣可就傷腦筋囉~