Linux 系統管理

来源:百度文库 编辑:神马文学网 时间:2024/04/24 14:30:19
Fedora Linux 系統管理
李忠憲sean@tp.edu.tw
2007/04/05 修訂
Fedora Core (有時又稱為 Fedora Linux,第七版以後改名為Fedora) 是較具知名度的 Linux 發行套件之一,由 Fedora Porject 社群開發、Red Hat 公司贊助,目標是建立一套新穎、多功能並且自由(開放原始碼)的作業系統。
Fedora 是奠基於 Red Hat Linux,在 Red Hat Linux 終止發行後,Red Hat 公司計畫以 Fedora 來取代 Red Hat Linux 在個人應用的領域,而另外發行的 Red Hat Enterprise Linux (Red Hat 企業版 Linux,RHEL)則取代 Red Hat Linux 在商業應用的領域。
Fedora 的功能可從兩個角度來看:對於使用者而言,它是一套功能完備、更新快速的免費作業系統,而對贊助者 Red Hat 公司而言,它是許多新技術的測試平臺,被認為可用的技術最終會加入到 Red Hat Enterprise Linux 中。
Fedora Project 大約每六個月發佈新版本,目前 Fedora 最新的版本是 Fedora Core 6。
OpenSource:
由於 Free 一詞容易造成誤解,目前談論 Linux 概念是使用「open source」這個字眼,其實 Linux 會成為 Open Source 理念的代名詞是一種集體創作的結果,由於眾多電腦高手(俗稱駭客 Hacker)對這個小玩具的關愛,撰寫並提供許多免費工具(身為駭客,這樣做是含有濃厚炫技的意味在裡面),使得 Linux 慢慢成長茁壯,成為一套穩定犀利的作業系統,真要歸屬起著作權來還真的是非常困難,因此 Linux 也就變成全民共同擁有的財產,許多腦筋動得快的商人將 Linux 包裝起來販賣,還取了好聽的名字叫做 Red Hat 、Mandrake......什麼的,Linux 就有了各種不同發行版本,Linux 採用的 GPL 授權條款並不禁止將 Linux 拿來販賣,因為商業推廣有助於系統的持續發展,但無論你如何透過 Linux 來發財,最重要的是必須將原始碼公開,否則將違反 Linux 的版權合約。
由於所有 Linux 的開發商都必須將原始程式碼公開,別人拿去參考或修改出更好用的程式,一樣可以拿來賣錢和發行,這就會形成一種良性競爭(就像駭客之間互比高低一樣,不會為了幾個臭錢把獨門技術隱藏在法律後面),因此我們可以預期 Linux 的永續發展不是沒有道理的。
早期的 Linux 由於缺乏金援,通常是由個人依自己專長興趣來參與開發工作,現在系管師中還有不少是為了要寫一個好玩的電動而開始寫程式的,一定能明白手工打造的樂趣和痛苦,所以早期的 Linux 發展相當遲緩,也由於個人經濟能力有限,買不起眾多周邊設備,所以早期 Linux 能支援的硬體實在不多,而且經常支援一些罕見的設備(當然與提供該驅動程式的作者的工作環境有關),後來有些志同道合的作者開始組織團體,向有錢的企業募款來支援系統程式的開發,例如:Apache、X window(注意:沒有 s)......就是屬於這一類的產品,也由於這些慈善團體的犧牲奉獻,Linux 才能發展出今天的規模。
系統特色:
一般學術界討論 Linux 的特色,總是喜歡與微軟的 Windows 來做比較,實際上這就像拿橘子比蘋果一樣。Linux 作為一套仿自 Unix 的作業系統,當然我們要與 Unix 比比看,為何它能夠成為未來作業系統的主流,主要原因只有兩個:
將一切視為檔案(store all data in file),換句話說, 無論是硬體裝置或是核心軟體功能,通通以檔案方式存在,這樣就把一切系統資源(無論硬體或軟體)的作業模式統一了,因此作業系統核心就具有獨立完整性,能夠跟硬體周邊或應用程式分離開發,同時作業系統核心程式也較為精簡,甚至可以將系統精簡到只要一片磁片就可以裝得下的地步。
開發模式不同,這個特色是由於第一項特色而得以實現,實際上 除了核心程式以外,其它的一切工具程式、驅動程式或應用系統都可以由不同作者分別開發,每個人獨立開發一部分,組合起來就能運作,大部分時候系統程式完全不須修改,偶爾需要小幅修改以促進相容。 這種開發模式,就稱為網路開發。Linux的作者 Linus 說:Linux 是一套真正的網路作業系統,因為它自己本身就是網路的產物。
網路資源:
最新版本發行文件http://fedora.redhat.com/docs/release-notes/
錯誤回報http://fedoraproject.org/wiki/BugsAndFeatureRequests
Fedora 概觀http://fedoraproject.org/wiki/Overview
常見問題(Fedora FAQ)http://fedoraproject.org/wiki/FAQ 使用者社群http://fedoraproject.org/wiki/Communicate 參與 Fedora 專案http://fedoraproject.org/wiki/HelpWanted 關於 Fedora 專案http://fedora.redhat.com/About/
硬體平台之支援:
i386 支援 x86 架構之32位元CPU,包含:Intel 的 Pentium and Pentium-MMX, Pentium Pro, Pentium-II, Pentium-III, Celeron, Pentium 4, Xeon, Core Duo, and Centrino/Centrino Duo; VIA C3/C3-m and Eden/Eden-N 以及 AMD 的 Athlon, AthlonXP, Duron, AthlonMP, Sempron, and Turion
x86_64 支援 x86 架構之64位元CPU,包含:AMD 的 Athlon64/FX/X2, Turion64, Opteron 以及Intel 的 EM64T
ppc 支援 PowerPC 處理器,例如:Apple Power Macintosh, G3, G4, and G5, and IBM pSeries systems
安裝套件的檔名將會標示其所支援的平台,例如:koules-1.2-2.i386.rpm
磁碟命名法與磁區分割:
Linux 檔案系統需要運用兩種不同磁區型態,那就是 ext3 和 swap。swap 用來作為虛擬記憶體使用,在多工環境作本文切換(content switch)而 RAM 不夠使用時,會將 RAM 的資料轉換到磁碟上,以避免記憶體不足的問題發生,由於這個原因因此 swap 總空間大小必須是主記憶體的兩倍(最低,至少需要 32 MB,目前最高上限為 2GB)。
新版本的 Linux 是使用 ext3 (type 83)作為檔案系統,比起舊的 ext2 格式速度更快、修復省時、更可靠安全,因此建議一律使用 ext3 不要再用 ext2。
Linux 將一切裝置視同為檔案,當然磁碟機也不例外,所以 DOS 時代常用的磁碟代號,在 Linux 上不能使用,取而代之的是檔案命名法, Linux 將一切裝置定義在 /dev 這個資料夾內,軟碟機稱為 fd,軟碟機編號為 0~7,第一台軟碟機就稱為 /dev/fd0;硬碟稱為 hd,硬碟編號是根據排線的位置來計算,第一條排線第一顆硬碟稱為 hda,依此類推,最多到 hdt。光碟機由於接在硬碟排線上,也被視為硬碟,為了使用上的方便,通常會替光碟機取別名為 /dev/cdrom,至於 SCSI 硬碟比較特殊,是使用 sd 來命名,編號方式與一般硬碟相同。
由於大容量硬碟通常因應使用上的需求都會加以分割,因此我們也必須熟悉磁區命名的方法,磁區分為兩種:主要磁區(primary)與延伸磁區(extension),延伸磁區可以繼續進行複數分割,稱為邏輯磁區(logical)。由於延伸磁區是為了作虛擬分割而存在的,因此一顆硬碟上最多只能有一個延伸磁區,並且因為磁區分割表容量的限制,在一顆硬碟上主要磁區加上延伸磁區不得超過 4個,其編號為 1~4,而邏輯磁區則沒有數量限制,使用號碼 5~32。假設在一顆硬碟有 hda1、hda2、hda3、hda5、hda6,沒有 hda4 這並非錯誤,這是因為這顆硬碟有兩個主要磁區(1和 2)、一個延伸磁區(3),延伸磁區並分割為兩個邏輯磁區(5和 6)的緣故。
特別要注意的是這些裝置畢竟不同於一般檔案,所以大部分檔案操作指令都不支援,舉例來說,您要切換到第二顆磁碟機不能使用下面的指令:
cd  /dev/hdb1
正確的方法是先將該磁碟機掛載到檔案系統上,然後再使用它,例如:
mount  /dev/hdb1  /home
cd  /home
磁區的分割,對安裝 Linux 來說非常重要,主要是因為:
分割開的磁區比較安全,萬一其中一個磁區壞了,不會影響到其它磁區
分割開的磁區可以分別設定不同的磁碟配額,這對磁碟空間的管理非常有幫助
磁碟配額用來分配磁碟空間給每個使用者,並限制使用者的用量,以避免系統因磁碟空間不足而無法運作。由於磁碟配額會作用在整個分割區,因此在切割硬碟時就必須考慮磁碟配額的規劃。舉例來說:
個人網頁空間:應該在 /home 所在磁區安裝使用者配額,配額大小通常為
(磁區總容量/使用者數量)* 2
這是因為大多數的使用者並不會把配額空間全部用完,因此可以先預留一半空間提供給他人使用,在配額計算上直接乘以2 來估算。
電子郵件信箱:應該在 /var 所在磁區安裝使用者配額,配額大小通常為
(磁區總容量/使用者數量)/ 2
電子郵件依據存取的頻率不同,保留在伺服器上的信件量也不同,郵件信箱被撐爆的機會很大,因此不必預留空間。除以 2 是因為除了收信以外,使用者寄出的信件也需要空間儲存,寄出的郵件並不是以使用者名義儲存,因此除以 2 先預留空間給郵件系統。
為了系統的最佳化,我們會根據不同需求來劃分磁區,分別敘述如下:
作為學校官方網站用途:由於不提供給使用者使用,通常只需將 /var 單獨分割,以便為網站內容和存取紀錄作資料保全。
作為師生個人網站用途:需將 /home 單獨分割,以便為每個使用者作資料保全,以及分配磁碟配額。
作為郵件伺服器用途:需將 /home 及 /var 單獨分割,以便開立大量帳號,並分配磁碟配額給郵件信箱。
作為 X window 軟體平台(工作站):需將 /usr 單獨分割,以便為各種辦公軟體預留安裝空間。
作為資料庫伺服器:需將 /usr 和 /var 單獨分割,以便為資料庫系統預留安裝空間。
多重開機系統:需將 /boot 單獨分割,以便保護多重開機系統不受硬碟損壞影響。
檔案伺服器:請先自行分割大容量磁區,再將該磁區掛載成 /share。
安裝 Linux:
使用FC6開機光碟,進入安裝畫面後,直接按 Enter 啟動預設安裝模式。
接著檢查光碟片,如果要節省時間,您也可以跳過不檢查。
選擇安裝語系。

選擇鍵盤,由於系統有自動偵測功能,通常使用預設值即可。

使用圖形介面安裝 Fedora Core 6 非常的容易,出現歡迎畫面後,按下一步。

選擇要升級還是安裝。

安裝開機選單,如果是升級安裝,應該使用「更新」選項,硬碟已安裝其他多重開機系統的話,則「跳過」不安裝,正常安裝請選擇「建立」選項。Fedora 使用的開機選單系統稱為 GRUB。

接下來是安裝過程中最困難的部分:分割磁區,如果您的硬碟容量小於 5 GB,建議使用自動分割功能,以避免發生遺憾。大容量硬碟請根據用途來劃分磁區,請參考前一小節的說明。

使用 Disk Druid 分割磁區,其實沒那麼難,分割新磁區時有三個磁區是必要的:/、/boot 和 swap,如下圖。若要作為師生網頁主機,請務必依照磁碟配額來計算 /home 所需要的空間大小。

Fedora 支援兩種進階磁區,分別是 softRAID 和 LVM(Logical Volume Management) 。 前者是透過RAID軟體將多顆硬碟組合成一個 RAID 系統,並支援 RAID 1、5 兩種模式。後者是將多顆硬碟或磁區虛擬成單一裝置,也就是所謂的 RAID 0,在該虛擬裝置上你可以自由切割磁區配置空間,也可以將新硬碟加入虛擬裝置來擴充空間,讓磁碟空間的管理更具彈性。
設定開機選單,GRUB 預設會安裝於 MBR(Master Boot Record)。在這裡你還可以設定 GRUB 密碼,該密碼會被保存於 /boot/grub/grub.conf,如果你想修改密碼,請參考【系統安全】GRUB 小節的說明。。

如果你要使用多重開機系統,請自行新增開機選項。

網卡設定,雖然可以使用 DHCP client 自動取得 IP,但如果要當成伺服器使用,最好還是要有固定IP。如果稍後要修改設定,請參考【系統組態檔】/etc/sysconfig 小節的說明。

選擇時區,請從世界地圖選擇台灣。

設定管理員密碼。

選擇安裝類型, 不同的選擇使用的硬碟空間也不同,最小安裝(都不選,建置防火牆時建議使用這個方式安裝)約需 700MB。辦公用途,將會安裝圖形介面及應用程式,約需3GB;如果 通通勾選,則視安裝多少套件而定,最多需要 9GB空間。安裝套件的選擇在下一步驟進行。

選擇安裝套件,如下圖之 X window 和 Desktop Environment 由於很耗用系統資源, 沒有必要的話建議不要裝(除非該機器要當工作站使用)。

將要安裝的類別打勾後,可以按 Optional packages,進一步來挑選要安裝的細項。

所有設定完成後,系統會檢查安裝的套件是否有相依性,通常會讓系統自動將相依套件裝上。

完成第一階段的安裝後,重開機後系統會自動執行設定精靈(setup-agent) 。

請閱讀 Fedora 的版權聲明。

防火牆(iptables)預設會被啟用,請把該伺服器要提供的服務打勾。 在現在這個駭客盛行的年代,請務必要安裝防火牆。防火牆的概念與設定方法,請詳見【使用 iptables 建置 Linux 防火牆】一文。

SELinux(Security Enhanced Linux) 是 Fedora 的預設必裝套件之ㄧ,它可以提供額外的稽核功能,以確保系統不會遭受入侵。但如果沒有正確設定,許多網路伺服器將無法正常提供服務。有關 SELinux 的設定方式,可以查閱http://fedora.redhat.com/docs/selinux-faq/。為避免設定的麻煩,建議使用 Permissive 模式。

系統的日期時間雖然可以從系統時鐘直接取得,但為了避免時間不統一,最好是採用網路校時的方式。台灣的標準時間伺服器為:clock.stdtime.gov.tw。

除了管理員帳號外,還需要新增一般使用者帳號, 來進行系統維護測試。請妥善設定密碼,避免密碼被猜中盜取。

設定音效卡,安裝程式會自動偵測音效晶片。

系統修補:請在安裝完成後,以管理員身分執行 yum update 指令。
檔案結構:
Linux 檔案結構是遵循 FHS 標準,該項標準可以在http://www.pathname.com/fhs 找到,底下介紹常見的幾個資料夾及其用途:
目錄名稱 用    途    說    明
/home 用來建立使用者的家目錄,由於使用者必須將其個人資料儲存於家目錄裡,包含:個人郵件、設定檔、個人網站......等,因此如果使用者眾多,需要相當大的硬碟容量才夠用。為了資料的安全起見,通常會將此資料夾放在獨立的磁區上,以免因系統當機而導致資料流失。
/dev 是用來擺放各種周邊硬體裝置的地方,除了前面介紹的磁碟機外,其他像 CPU、主機板、音效卡、網路卡、數據機、數值運算器......等等,也都是以檔案形式存在。比較特別的是由於 Linux 是網路作業系統,因此遠端連線也被視為是一個裝置(終端機),命名為 tty。
/etc 是用來擺放各種系統設定檔,這些檔案都是文字檔格式, /etc 下面有兩個子資料夾: X11 和 skel,/etc/X11是用來擺放 X window 相關設定檔,而 /etc/skel 則用來擺放使用者預設組態,該組態會在建立使用者帳號時,自動複製到使用者家目錄。
etc 中最重要的檔案有:passwd 檔保存帳號資料、group 檔保存群組資料、shadow 檔保存密碼資料。請務必定期備份。
/sbin 用來擺放開機程序會使用到的相關執行檔,需要有 root 身分才能執行。其他非開機使用的工具程式,若為一般使用者有權限使用的,則擺放於 /bin 資料夾中。如果是使用者自行安裝或開發的工具,則擺放在 /usr/bin 或 /usr/sbin 當中(端看是否與開機程序相關)。
/lib 顧名思義是系統的函式庫,用來擺放 /bin 和 /sbin 中之執行檔執行時所需要的函式模組。
/mnt 用來掛載可卸除的儲存裝置,例如:軟碟機、光碟機......等等。
/usr 這個資料夾擺放可以分享給遠端使用者的檔案,包含可執行檔在內。通常會擺放套裝軟體,例如:各種伺服器、字典、統計軟體、資料庫系統、辦公軟體......等等。如果您的伺服器是要提供應用程式服務,這個資料夾最好放在獨立的磁區,容量不能太小。
/usr/local 則是擺放使用於系統管理的套裝工具,必須是與系統核心無關的獨立套件,不會因為系統升級或該工具本身需升級而影響系統運作,通常這些套裝工具需分享給其他使用者或遠端使用者,例如:apache......等。
/var 擺放各種程式的 log 檔、lock 檔以及程式運作所需要的 spool 或暫存空間。
/proc 這是一個虛擬的檔案系統,用來建立與系統核心運作的溝通管道,可以用來讀取監測核心運作的資訊,或送出資訊給核心處理。舉例來說,想查看 CPU 的使用狀態,使用下面的指令即可:
cat  /proc/cpuinfo
請自行列出 /proc 目錄內容,看看除了 CPU 外,還能查看哪些資訊。
透過 proc 虛擬檔案系統來設定 kernel 並不常用,但由於這些核心功能也被視同為檔案,因此我們可以簡單的使用導向符號 > 來設定它們(不建議這樣做),例如要設定 hostname,可以用底下的指令:
echo  redhat.spps.tp.edu.tw  >  /proc/sys/kernal/hostname
基本指令:
由於 Linux 是一套網路作業系統,因此可以允許同時多人上線操作,事實上每個人還可以同時處理許多不同的工作,這種作業模式就稱為多人多工模式。當我們從主控台登入時,可以使用 Ctrl+Alt+F1~F6 來切換不同文字模式終端機,另外 Ctrl+Alt+F7 保留給圖形模式(X window)使用,每個虛擬終端機實際上是各自獨立的,可以用不同身分登入進行不同工作。
如果我們不在機器旁邊,但是卻有管理該機器的需要時,我們可以使用 telnet 軟體從遠端登入系統,telnet 雖然是最常用的方法,但並不是最好的方法,為了系統安全我們建議使用 ssh 來進行遠端登入。在後面的章節將會仔細討論 ssh。
底下就來介紹純文字模式下的常用指令,在介紹指令之前,首先有些規矩必須先說明:
Linux 系統會區分大小寫,因此 abc.txt 和 abc.Txt 會被視為不同檔案。
指令與參數之間必須有空格,不可以連著打,例如: cd/ 這道指令在 Linux 上就無法執行。
執行目前目錄下的程式時,前面仍然必須加上路徑,不可直接寫檔名,例如: ./install。(如果想要跟 DOS 一樣忽略路徑名稱,必須預先在環境變數 PATH 中加入 . 這個搜尋路徑)。
指令如果同時用到多個選項,可以寫在一起,例如:ls  -a  -l 和 ls  -al 是一樣的,選項沒有順序關係,因此剛才的指令也可以寫成 ls  -la。
通配字元用法與 DOS 不太一樣,【?】可以代替任意一個字元,【*】則是代表不定個數的任意字元,除此之外,還可以使用列舉式,例如:a0[1-3].txt 代表 a01.txt  a02.txt  a03.txt,如果號碼不連續則使用逗號分隔,例如:a0[a-b,C,1].txt。
可以使用重導向符號 >  <  >> 來變更輸出入的目標裝置,例如:ls *.jpg > a.txt 是將 ls 的結果輸出到 a.txt 檔案內(原本會輸出在螢幕上),pwdck > /dev/null 則是不顯示執行結果(/dev/null 是黑洞,/dev/zero 是白洞), mail < myletter 是將 myletter 的檔案內容輸入給 mail 指令(原本會從鍵盤讀取),ls *.gif >> a.txt 是將 ls 的結果添加到 a.txt 檔案內。
當從鍵盤輸入多行文字時,可以使用 Here Document 功能,例如: cat << 123 > a.txt
可以使用管道符號,將某程式的輸出導向成某程式的輸入,用法與 > 很像,但目的地不一樣 (前者是另一支程式,後者是一個檔案)。
一次可以執行多道命令,中間以 ; 區隔,例如: cd / ; ls -al
自動補字功能,當檔案名稱或目錄名稱太長時,只要打出前面幾個字再按 TAB 自動將檔名補齊
執行命令時如果在指令後方加上 &,命令就會在背景執行,用這個方式同時可以執行多個程式(這就是所謂多工)
常用指令介紹:
線上求助:
man info
系統管理:
login,logout(exit) shutdown,halt reboot date hostname
domainname ps kill top free
ntsysv chkconfig service dmesg env
drakconf[linuxconf] qe rpm chconfig watch
帳號管理:
passwd,gpasswd useradd,groupadd
chsh,usermod su whoami
w (who) pwck,grpck setquota
檔案管理:
cd,pwd ls -al
more,less grep cp -Rp
mv rm mkdir rmdir cat
head,tail df,du tar zip,unzip gzip,ungzip
whereis locate,slocate find mount,umount parted(Partition Editor)
chmod chgrp chown mount -o loop
應用程式:
wget up2date yum ncftp
開機程序與系統救援
Linux 安裝好後,有時候因為不正常開關電源或是修改組態的失誤,而造成系統無法正常開機的情況,當遇到這種情形時,不要急著重新安裝系統,而是要根據開機流程找出補救的方法,這樣系統管理能力才會進步,遇到問題就重灌系統是初學者常犯的錯誤,哪樣做或許可以解決問題,但卻無法得知問題的成因,並且無法學習解決問題的方法。
Linux 的開機程序及問題解決方法大致整理如下:
開機流程 可能出現問題 解決方式
載入BIOS偵測程式,偵測硬體環境 硬碟偵測不到 請檢查硬碟排線是否正確連接 移除同一排線的其他硬碟後,再開機測試 進入 BIOS 重新設定硬碟參數
讀取硬碟 MBR,準備載入GRUB MBR 中找不到起動點(boot jumper) 使用 SPFdisk 清除 MBR 使用光碟開機後,進入 rescue 模式,重新安裝 GRUB,rpm -Uvh grub*
讀取 GRUB 組態 開機組態錯誤,無法載入系統核心 進入 GRUB 編輯模式修改開機組態 或使用光碟開機後,進入 rescue 模式,修改 /boot/grub/grub.conf
讀取系統核心映像檔,解壓縮並建立軟體磁碟 核心損毀無法載入 使用舊核心模組開機 或從別台機器複製核心模組 進入 rescue 模式,重新安裝核心模組,rpm -Uvh kernel*
從軟體磁碟載入核心模組(IO存取模組)
以唯讀模式掛載根磁區 磁區損毀 系統會自動嘗試修復,無法修復的情形下,必須更換硬碟,重新安裝系統,並將原有硬碟磁區加掛到新系統,以取回帳號密碼和使用者資料
載入周邊裝置之驅動程式 驅動程式錯誤 系統仍然可以開機,但部分功能可能無法使用,需重新安裝驅動程式
讀取 /etc/fstab 取得所有磁區列表 fstab 組態錯誤 進入 rescue 模式,修改 /mnt/sysimage/etc/fstab
以讀寫模式依序掛載所有磁區 磁區損毀 系統會自動嘗試修復 進入 single mode 進行手動修復,fsck 使用 fdisk 命令調校磁碟設定 無法修復的情形下,必須更換硬碟,重新安裝系統,並將原有硬碟磁區加掛到新系統,以取回帳號密碼和使用者資料
讀取 /etc/rc.d 載入各種應用服務套件 服務啟動失敗 系統仍然可以開機,開機後需修改該服務之組態設定 或重新安裝該服務之套件
執行 /etc/rc.d/rc.local 開機程序
載入系統殼層 殼層載入失敗,造成系統無法登入 使用管理員帳號登入,若無法登入則進入 single mode 修改 /etc/passwd 中之 shell 欄位,使用其他殼層登入
提示登入畫面
MC檔案總管
MC 的全名是 Midnight Commander,是 Unix Like 系統上功能非常強大的檔案管理程式,在 DOS 的年代有一套Cview 跟 MC 很像,用過的人應該對 MC 不陌生,MC 除了進行一般性的檔案操作例如:新建目錄(F7)、刪除(F8)、拷貝(F5)、移動(F6)、搜尋、修改權限(Ctrl+x  c)、修改擁有者(Ctrl+x  o)......之外,還能進行遠端傳輸、瀏覽打包檔(.tar)(Enter)、執行程式(Enter)、救回刪除檔案、目錄比對、檔案打包壓縮(F2)、文書處理(F4)....等工作,因此是系管師不得不用的工具。
MC 內附完整線上說明,直接按 F1 即可翻閱,按 F10 離開。多數功能都有快速鍵的設計,如果記不住快速鍵,也可以從選單選取,請按 F9 開啟選單,延伸選單上還有一些專門提供給進階使用者的額外功能,可以使用 F2 來開啟,其它功能鍵用法都寫在 MC 畫面的正下方,如果忘記了很容易查閱。
MC 的外觀分隔成左右兩個面板,是為了讓使用者能在兩個不同目錄間進行快速拷貝、移動而設計,我們可以按 TAB 鍵在兩個面板上切換游標。這兩個面板可以分別設定檢視模式,包括:詳細檔案資訊(Ctrl+x  i)、檔案內容摘要(Ctrl+x  q)、樹狀結構、自訂顯示欄位、排序方式、或改為只顯示一個大面板,修改這些設定請按 F9,然後從上方選單選擇要修改的面板(Left或Right),直接點選選項即可。
如果想要一次處理多個檔案,請在檔案上按 Ctrl+t 來選取檔案,再按一次則會取消選取,這個功能特別是在進行多檔拷貝的時候特別有用。
想要將整個資料夾打包壓縮成一個檔案嗎?透過 MC 要做這件事真的非常簡單,請進入要壓縮的資料夾,先確認有哪些檔案要打包壓縮,接著按 F2 選打包為 tar.gz,按 Enter 即可,打包好的檔案將會放在上一層目錄裡,請確認您對上層目錄有寫入的權限,否則打包壓縮的動作會失敗。
透過 MC 可以在本地端與遠端進行雙向檔案傳輸,MC 除了自己有專用通訊協定外,也可以使用 FTP 來連結遠端主機,使 MC 搖身一變成了 FTP 工具,以 MC 專屬通訊協定進行連結,請先以 TAB 決定要使用的面板,然後輸入 cd   /#mc:username@ip ,想要使用 FTP 連結遠端主機,請輸入 cd  /#ftp:username@ip ,你也可以透過面板選單來操作,請參考前一小節之說明。
想要救回刪除檔案,做法與上述步驟類似,但請輸入 cd  /#undel:hda2 (磁區名稱),救回檔案時會先讀取該磁區內的所有 inode ,以便計算出可以完整救回的檔案有哪些,這會耗掉半天以上的時間,所以除非萬不得已不要使用這個功能。
MC 的檔案搜尋功能很強,尤其是內文搜尋功能,我們可以按 F9,從命令(Command)選單選取搜尋檔案(Find File)功能,設定搜尋條件可以使用正規表達式(regular expression),選擇區分或不區分大小寫,搜尋結束後可以進行編輯或其它檔案操作,建議先選擇面板化(panelize),這樣會把搜尋到的檔案一一列在面板上,就像是開啟一個資料夾一樣,然後就可以進行任何檔案操作,這樣做可以獲得比較多的功能。
關於系管師某些日行安全檢查工作,MC 已經內建在延伸選單(Ctrl+x  !)裡,例如想要知道目前系統上被植入哪些特洛伊木馬,我們可以檢查具有 Suid 權限的檔案,如果列出來的檔案中,有沒看過的或非系統安裝的檔案,請儘速查明後刪除。
使用 MC 提供的文書編輯器功能強大, 後面章節介紹的各種組態檔編輯,也請使用 MC 來進行。MC 相較於其它文書編輯器比較不同的地方是它有提供剪貼簿,因此可以進行跨檔案拷貝,請開啟來源檔案,用 F3 功能鍵標示出要拷貝的段落,按 Ctrl+f 或者是按 F9 從檔案(File)選單選擇 Copy to file,接著離開編輯模式開啟目的地檔案,將游標移到要複製的位置,按 F9 從檔案(File)選單選擇 Insert file,這樣就可以跨檔編輯了。
權限管理
由於 Linux 將所有軟硬體裝置通通視為檔案,因此對於 Linux 來說權限管理只要在意檔案權限的設定即可,這一點與 windows 作業系統將權限細分為管理權、操作權、擁有權、遠端登入權、虛擬連線權、檔案操作權、服務操作權......等等複雜化的做法有非常大的不同,雖然 Linux 的做法比較單純,但是並不表示 Linux 比較不安全,相反的 Linux 的安全等級比 windows 更早獲得美國國家安全局的C2認證。
Linux 對檔案的權限管理分別透過檔案擁有者與存取權限來管理。每個檔案都必須設定擁有人和擁有群組,有時候某使用者帳號被移除,但檔案忘記移除,這些檔案就會變成無人擁有,這種檔案視同 root 所擁有。
Linux 將存取權限區分為四個部分,分別是:setuid(設定身分權限)、owner(使用者權限)、group(群組權限)、other(其它使用者權限,相當於 windows 下的 everyone),每個部分都由三個位元構成,除了 setuid 以外,其餘三種權限的三個位元分別代表讀取、寫入和執行,當我們用 ls 指令去觀察時,程式會使用文字來表示存取權限,例如:
rwxr-xr-x
其中 r 代表讀取,w 代表寫入,x 代表執行,- 代表沒有權限,我們將上述權限三個一組分解開來,分別是擁有者:可讀寫執行,群組成員:可讀及執行,其它使用者:可讀及執行。上述權限也可以用八進位數字 755 來表示。
setuid(設定身分權限)是一種比較特殊的權限,三個位元的意義與前面所說的不相同,分別代表以擁有者身分執行(setuid)、以群組成員身分執行(setgid)、以及刪除時額外檢查使用者身份(sticky bit,當以 Samba 來共享資料夾,但又開放寫入權限時特別有用,可讓使用者僅對自己建立的檔案有完整權限,而無法刪除或修改別人的檔案),例如:sendmail 程式擁有者為 root,擁有群組為 mail,而存取權限為 755,當該程式被設定以群組成員身分執行時,使用者 shane 去執行程式(寄信),在程式執行期間可以暫時成為 mail 群組的成員,因此能讀寫 mail 群組才能讀寫的檔案(例如:/var/spool/mail/maggy,也就是說 shane 把信寄給 maggy),從這個例子可以了解 setXid 對於伺服器功能非常的重要。我們如果用八進位數字來表示 sendmail 的完整存取權限,應該寫成 2755 而不是 755,用 ls 指令來觀察,則以底下的文字來表示:
rwxr-sr-x
注意到群組權限中的執行權限從 x 變成了 s ,表示該程式執行時會暫時獲得擁有群組的身分。
多重開機設定
舊版Linux 使用 LILO 作為多重開機系統,而新版本改採 GRUB,GRUB 是使用圖形介面感覺跟純文字介面的 LILO 差蠻多的,當然它能支援較大硬碟以及更多作業系統類型。除此之外,兩者間還有其他明顯差異:
編修方式:開機選單出現後,可以線上編修組態
命令模式:提供 grub shell ,可透過主控台進行偵錯與系統設定,並支援 RS232 連線
組態生效時機:GRUB 修改組態後立即生效,不需要重開機
無硬碟環境:支援從網路載入系統(系統載入前可以先啟動網卡,支援 dhcp),因此可以被應用於無硬碟環境
安全性:GRUB 可以設定密碼,並能將密碼以 MD5 編密
GRUB 設定檔位於 /boot/grub/grub.conf ,也可以從 /etc/grub.conf 修改,組態檔設定範本如下:
default=0
timeout=10
splashimage=(hd0,0)/grub/splash.xpm.gz
title  Red Hat Linux (2.4.18-14)
root (hd0,1)
kernel /vmlinuz-2.4.18-14 ro root=LABEL=/
initrd /initrd-2.4.18-14.img
title  single mode
root (hd0,1)
kernel /vmlinuz-2.4.18-14 ro root=LABEL=/ single
initrd /initrd-2.4.18-14.img
title  FreeBSD
root (hd0,2,a)
kernel /boot/loader
title  DOS or Windows NT / Windows 9x
root (hd0,0)
makeactive
chainloader +1
# For loading DOS if Windows NT is installed
# chainload /bootsect.dos
指令說明:
root 指定啟動分割區的所在地,hd0 是第一顆硬碟,其後的數字代表分割區編號,英文字母代表虛擬分割區的順序。
kernel 指定要載入的核心映像檔及核心啟動參數。
initrd(init ram disk的縮寫),在記憶體建立虛擬硬碟,並將核心模組解壓縮到虛擬硬碟中。
makeactive 暫時將指定分割區設定為啟動分割區,當要載入 GRUB 不認識的作業系統時使用。
chainloader +1 從指定分割區載入第一個磁區中的程式,當要載入 GRUB 不認識的作業系統時使用。
map (hd0) (hd1)
map (hd1) (hd0)
交換磁碟機代號,如果要啟動的 windows 作業系統安裝在另ㄧ顆硬碟時,先將它轉換成第一顆硬碟然後再載入,這樣磁碟機代號 c: 才會對應正確。
系統組態檔
/etc/fstab
這個檔案是用來定義系統可用的儲存裝置,通常在增加硬碟或增刪磁區之後(進階班課程),需要由系管師手動修改設定,另外掛載遠端目錄時也需要修改它,例如:NFS、windows共享資料夾.......等等。
各欄位說明如下:
裝置名稱(fs spec): 要掛載的裝置名稱,如果該磁區有定義磁區標籤也可以直接指定 LABEL(想定義磁區標籤請使用 e2label 指令),如果要掛載 NFS 或者是 windows 網芳共享目錄,請輸入 :,例如:file.spps.tp.edu.tw:/share。如果是虛擬裝置則將裝置名稱指定為 none。
掛載名稱(fs file):要掛載到哪個目錄下,如果要掛載的目錄不存在請自行用 mkdir 建立一個空目錄,然後才能掛載成功,由於 swap 磁區沒有掛載點,請直接輸入 swap。
磁區類型(fs vfstype):指定要掛載的磁區是哪一種檔案系統,Linux 支援的檔案系統非常多,比較常用的除了 ext2、ext3、swap 外,還有 windows 系統使用的 vfat ,光碟片用的 iso9660,或是使用 auto 讓系統自動偵測(通常用於可抽換式磁碟機)。
功能選項(fs mntops):指定掛載方式,常用選項包括:rw(可讀寫),suid(讓設定身分權限有效),dev(是字元或區塊寫入裝置),exec(可執行程式),auto(自動掛載),nouser(使用者不能自由掛載或卸載),async(非同步讀寫)(以上七個選項合稱 defaults),其它還有 ro(唯讀),noauto(手動掛載),owner(擁有者才能掛載),kudzu(開機自動偵測),usrquota(開啟使用者磁碟配額功能,僅適用於 Linux 磁區),grpquota(開啟群組磁碟配額功能,僅適用於 Linux 磁區),iocharset(指定雙位元檔名解譯方式,此選項僅適用於 windows 磁區)。
備份(fs freq):當進行備份時(使用 dump 指令),是否需要處理,0 代表不要備份。
檢查順序(fs passno):開機時檢查磁區是否損壞(使用 fsck 指令)的順序,0 代表開機時不檢查。
/etc/fstab 內容範例
裝置名稱 掛載名稱 磁區類型 功能選項 備份 檢查順序
LABEL=/ / ext3 defaults 1 1
LABEL=/boot /boot ext3 defaults 1 2
LABEL=/home /home ext3 defaults 1 2
/dev/hda5 swap swap defaults 0 0
none /proc proc defaults 0 0
/dev/cdrom /mnt/cdrom iso9660 iocharset=cp950,noauto,owner,kudzu,ro 0 0
/dev/fd0 /mnt/floppy auto iocharset=cp950,noauto,owner,kudzu 0 0
/etc/inittab
該檔案控制六種不同啟動模式的運作程序,六種不同啟動模式分別是:
0.關機
1.單人修復模式(single mode)
2.多人無網路文字環境
3.多人文字環境
4.未使用
5.多人圖形環境
6.重新開機
初學者最常用的是修改 initdefault ,如果該行是
id:5:initdefault:
則表示開機後會使用圖形介面進行登入,登入後自動開啟 X window,若將 5 改成 3,那麼開機後會使用文字模式登入,必須要下 startx 指令才會開啟 X window。
這個組態檔還可以控制 Ctrl+Alt+Del 的行為,通常按下這三個按鍵,將導致系統 shutdown,如果要關閉這個功能,請將下面這一行 remark 起來:
ca::ctrlaltdel:/sbin/shutdown  -t3  -r  -now
/etc/hosts
這個檔案用來定義主機名稱,其作用相當於 windows 下的 LMHOSTS,當該單機需要解析主機名稱時,會先查詢此檔案,由於校園網路內普遍已建置 DNS 伺服器,因此不設定也無所謂。
底下幾種理由我們會設定這個檔案:一、為了改進區域網路的性能,二、確保重要服務不會因為 DNS 故障受到影響,三、某些主機因安全考量並未定義在 DNS 內,那就必須自行將名稱加到 hosts,以確保名稱能正確解析。如果在安裝 Linux 時,未設定網路組態,預設值是:
網路位址 DNS 領域名稱 主機名稱
127.0.0.1 localhost.localdomain localhost
為了增進系統效能,我們會將自己這台主機的正式網域名稱加入到該檔案,請不要把上面那一行移除,因為這樣會造成名稱解析函式無法解析 localhost。
/etc/resolv.conf
這個檔案用來定義本地端進行名稱解析時的預設伺服器,通常我們必須將它設定在校內專用的 DNS 上面,設定方式如下,同時可以設定多台 DNS(一般會設定三台,最多可以設到八台):
search spps.tp.edu.tw
nameserver  192.57.1.23
nameserver  163.21.249.166
nameserver  163.21.249.167
/etc/ntp/ntpservers
這個檔案用來定義網路校時伺服器的所在位置,可以使用多台網路校時伺服器,每台伺服器一行,輸入網址或 IP 都可以。
clock.stdtime.gov.tw
/etc/rc.d/rc.local
這個檔案用來自行加入開機指令稿,當我們希望某些程式在開機完成後就自動啟動執行,我們只要將指令加入到這個檔案內就可以了,舉例來說:希望開機後能自動將 WAM 伺服器執行起來,請在最後一行加入:
/usr/libexec/apache_wam/bin/apachectl start
/etc/sysconfig
各位系管師在修改某些系統設定後,是否發現在重新開機後,設定值又被改了回來,造成有些系管師只好把修改的指令寫到前面所介紹的 /etc/rc.d/rc.local 檔案內,要求系統開機時一再重改設定,這樣做當然也行得通,但並不是最好的方法。
事實上開機時會使用到的設定值都保存在 /etc/sysconfig 這個資料夾裡,我們只需要去修改相關的設定檔,就可以要求系統在下次開機時,使用新的設定值,而不需要事後改來改去,這個資料夾內由於設定檔眾多,詳細設定資訊可以參考 /usr/share/doc/initscripts-x.xx/sysconfig.txt ,現在只介紹幾個常用的設定檔:
/etc/sysconfig/clock
這個檔案是用來指定時區,範例如下:
ZONE="Asia/Taipei"
UTC=false
ARC=false
/etc/sysconfig/i18n
這個檔案是用來定義語系以及字型,中文語系設定方法如下:
LANG="zh_TW.UTF-8"
SYSFONT="lat0-sun16"
若在文字模式想要暫時改回英文語系,以避免螢幕輸出變成亂碼,可以直接在 shell 鍵入
LANG=en
/etc/sysconfig/selinux
這個檔案是用來設定 SELinux 的啟動參數,內容如下:
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - SELinux is fully disabled.
SELINUX=disabled
# SELINUXTYPE= type of policy in use. Possible values are:
#     targeted - Only targeted network daemons are protected.
#     strict - Full SELinux protection.
SELINUXTYPE=targeted
# SETLOCALDEFS= Check local definition changes
SETLOCALDEFS=0
/etc/sysconfig/syslog
這個檔案用來設定系統日誌(syslog)的啟動參數,系統日誌平時是以單機模式執行,如果希望把該機器變成日誌伺服器,讓無法提供連線紀錄的設備,如:NAS、AP、Firewall......等,可以透過日誌通訊協定(UDP 514)把日誌內容寫入到日誌伺服器中。
# Options to syslogd
#  -m 0 disables ‘MARK‘ messages.
#  -r enables logging from remote machines
#  -x disables DNS lookups on messages recieved with -r
# See syslogd(8) for more details
SYSLOGD_OPTIONS="-r -m 0"
# Options to klogd
#  -2 prints all kernel oops messages twice; once for klogd to decode, and
#   once for processing with ‘ksymoops‘
#  -x disables all klogd processing of oops messages entirely
# See klogd(8) for more details
KLOGD_OPTIONS="-x"
#
SYSLOG_UMASK=077
/etc/sysconfig/network
這個檔案用來控制網路組態中的本機名稱和預設閘道設定,和 /etc/hosts 不同的是,這個檔案是要讓系統在開機後決定自己的主機名稱用的,設定範例如下:
NETWORKING=yes
HOSTNAME=wam.spps.tp.edu.tw
GATEWAY=172.16.1.254
/etc/sysconfig/static-routes
這個檔案用來定義開機後要啟動的靜態路由,假使學校內使用兩個 /24 的網路,而主機是擺放在其中一組 C 級網段中,那麼定義靜態路由是最簡便能讓網路連通的方法,定義方法如下:
eth0 net 192.57.2.0 netmask 255.255.255.0 gw 192.57.1.10
/etc/sysconfig/networking/devices/ifcfg-eth0
這個檔案是用來定義網路卡的起始設定值,以避免使用 ifconfig 指令改完 IP後,重開機設定又消失了。隨著我們要修改的網卡不同,設定檔的檔名也不同,這裡所寫的 eth0 是指第一片網卡,如果要修改第二片網卡,請修改 ifcfg-eth1。
設定範例如下:
GATEWAY=192.57.1.253
TYPE=Ethernet
DEVICE=eth0
HWADDR=00:40:95:30:3f:a3
BOOTPROTO=none
NETMASK=255.255.255.0
ONBOOT=yes
IPADDR=192.57.1.251
USERCTL=no
PEERDNS=no
NETWORK=192.57.1.0
BROADCAST=192.57.1.255
Xinetd 網路服務
xinetd 服務俗稱叫 super server,原因是它管制著非常多的被動式服務,所謂被動式服務是指平時該伺服器不會常駐執行,只有當用戶端連上來時,伺服器才啟動執行,這類的服務包括:telnet、ftp、imap、pop3、rsync......等等。xinetd 在這類服務中扮演分配封包、啟動伺服器的白手套工作,當用戶端的要求封包送來時,xinetd 會讀取 /etc/service 以便從封包埠號查出服務名稱,接下來 xinetd 會讀取 /etc/xinetd.d 資料夾中與服務名稱同名的設定檔,舉 telnet 為例,該檔案(/etc/xinetd.d/telnet)內容為:
# default: on
# description: The telnet server serves telnet sessions; it uses \
# unencrypted username/password pairs for authentication.
service telnet
{
disable = no
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/sbin/in.telnetd
log_on_failure += USERID
}
這個檔案告訴 xinetd 要如何啟動對應的伺服器程式,以上面的設定為例,將會以 root 身分啟動 /usr/sbin/in.telnetd 程式來執行,執行時 xinetd 會將原始封包擺放在主控台的輸入佇列中,以方便讓 telnet 主程式讀取。
使用被動式服務除了比較省系統資源外,另一個好處是在服務被啟動前,能夠先進行存取控制,對於那些簡單而無法自行實作安全機制的服務來說,多了一層保障(雖然安全性還是不夠),過去舊版 inetd 必須依靠 Tcp Wrapper 來進行網址過濾,新版的 xinetd 則可以自己進行這個工作,在上面設定檔中加入:
no_access = IP 或網域名稱,IP 或網域名稱
就可以禁止表列中的機器存取該服務,要使用正面表列定義可以存取的機器,請使用以下設定:
only_from = IP 或網域名稱,IP 或網域名稱
由於 telnet 已經是一個不安全的服務,我們想要直接將它關閉不提供服務,只要修改上面檔案中的 disable = no 改成 disable = yes,然後將 xinetd 重新啟動就可以了,啟動方法很多,例如:您可以使用底下的指令
/sbin/service xinetd restart
需要系管師自行修改的服務設定檔,除了 telnet 以外,還有 rsync 在【備份策略】小節介紹。
由於 xinetd 可以用 root 身分存取 shell 指令,因此有被駭客入侵之虞,有些系統對安全要求比較高,不喜歡用 xinetd,這時候就會另行安裝提供主動式服務的套件,例如:dovecot ......等等。
磁碟配額管理
首先,修改 /etc/fstab 在想要啟動磁碟配額管理的磁區上,設定 usrquota 參數,例如:
LABEL=/home /home ext3 defaults,usrquota 1 2
修改完畢以後,必須讓系統重新載入 /etc/fstab 才行,方法有兩個:
重新開機
重新掛載該磁區: umount /home : mount /home
由於 / 所在磁區無法重新掛載,如果你要在 / 磁區安裝磁碟配額,就一定要重開機才行。
接著要建立 quota 記錄檔,aquota.user 和 aquota.group,可以透過 quoyacheck 指令來進行,該指令會計算目前所有使用者的用量,並自動產生 quota 記錄檔。
使用 quotaon 啟動磁碟配額功能,這樣當磁碟進行存取動作時,系統會同步更新配額紀錄。
配額紀錄檔產生後,就可以使用 edquota username 的方式替每一個使用者建立配額,如果使用者人數很多時,建議使用 WAM 提供的磁碟配額工具來進行一次大量設定。
配額設定完成,可以使用 quota -u username 來查看該使用者配額使用情形。使用 repquota 來找出所有已達上限的使用者。
工作排程
Linux 提供四種自動執行程式的機制,包含:cron、anacron、at 和 batch。使用時機分述如下:
cron 主要用來做周期性工作的排程,會根據系統時間來判斷程式是否該執行,萬一系統時間設定不正確將會造成排程錯亂。
anacron 和 cron 一樣也是用來做周期性工作的排程,但是它不檢查系統時間,而改以讀取時間戳記來計算間隔日數,依間隔日數判斷是否該執行,適用於每天、每週或每月只執行一次的工作。
at 讓指定程式在某個時間點到達時自動執行,適用於只執行一次的工作。
batch 指定工作在系統閑置時執行,可用來避開高負載時段。
使用 cron 前請先確定伺服程式是否已經執行,可以使用以下指令來查看:
/sbin/service  crond  status
雖然 cron 允許使用者自行安排自己的工作,以方便在結束連線後,程式能自動運作,但這類工作對於已經提供多種網路服務的伺服器來說負擔太大,因此建議不要教使用者使用它,本文也不討論這類的事情,畢竟我們的伺服器只是 PC,不是 main frame。
cron 的主要設定檔 /etc/crontab 內容如下:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
前面幾行是定義 cron jobs 執行時的環境,我們不需要去修改它,底下四行是用來定義工作排程,上面看到的是系統排程的定義區分為七個欄位,分別代表:分、時、日、月、星期、執行時的身分、要執行的 script,而一般的工作則只區分為六個欄位,前五個欄位與系統排程相同,最後一個欄位則是要執行的工作。
欄位 有效數值
分 0~59, * 代表每分鐘都要執行,1-4 是指前四分鐘各要執行一次,如果執行的時間不是連續的,可以用逗號來區隔,例如:5,10,15,20 代表第五分鐘、第十分鐘、第十五分鐘、第二十分鐘時要執行,如果每隔五分鐘要執行一次,可以簡寫為 */5。
時 採用 24 時制,有效數值為 0~23,可以使用 * - , / 等通配字元,意義同上。
日 1~31,如果使用 30,則每逢二月會跳過不執行,如果使用 31,會變成大月時才執行,因此對於每月都得執行一次的工作,請安排在 28 日以前執行。當月份有指定時,必須為有效日期,否則該工作將永遠不執行。通配字元使用方式同上。
月 1~12,也可以直接用英文縮寫:jan、feb......等。 通配字元使用方式同上。
星期 0~7,其中 0 和 7 都代表星期天,也可以使用英文縮寫:sun、mon......等。 通配字元使用方式同上。
如果要執行的工作是屬於每天、每週或每月執行一次,建議改用 anacron 以確保一定會執行,如果是每小時要執行,建議直接在 /etc/cron.hourly 目錄內直接新增一個定義檔,語法需與 /etc/crontab 相同。 其它情形則把定義檔放置在 /etc/cron.d,這裡的定義檔將會每分鐘都檢查一次。
anacron 的設定檔位於 /etc/anacrontab,如前所述它是以檢查時間間隔的方式來決定是否執行,因此不受系統時間設定的影響,為了要檢查時間間隔必須紀錄每個工作每次執行時的時間戳記(timestamp),這些檔案會放置在 /var/spool/anacron 目錄裡面。
anacron 設定檔分為間隔週期、執行延遲時間、工作識別名稱、 要執行的工作四個欄位,說明如下:
欄位 使用說明
間隔週期 每次執行工作時應相隔幾天,小於一天的請改用 cron
執行延遲時間 當距離上次執行的時間超過時間間隔,這表示中間有執行失敗的情形,這種情形下在延遲幾分鐘後,該工作會再嘗試執行一次。
工作識別名稱 用來識別不同工作,同一名稱不能重複使用。
要執行的工作 通常是一個命令或 script
anacron 的設定檔預設內容如下:
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin;/usr/local/sbin;/usr/local/bin
# These entries are useful for a Red Hat Linux system.
1     5     run-parts /etc/cron.daily
7     10   run-parts /etc/cron.weekly
30   15   run-parts /etc/cron.monthly
這個設定可以用來確保 cron job 一定會如期執行。
at 指令用來執行一次性的工作而非週期性的工作,我們可以指定要執行的時間,它和 cron 一樣會檢查系統時間的設定,因此設定錯誤會造成工作無法正確執行,設定方式如下:
at  16:00 011503[ ENTER](排定執行時間是 2003年1月15日下午4點)
at> perl /root/backup.pl[Ctrl-D]
我們可以使用 atq  指令來查詢現在尚未執行的預定工作。
如果想根據主機負載情形來決定執行時間,必須使用 batch 指令,實際上 batch 指令算是 at 的特殊應用,使用方式如下:
batch[ ENTER](不用指定執行時間)
at> perl /root/backup.pl[Ctrl-D]
安裝 WAM 帳號管理員
WAM 是筆者為了推廣 Linux 校園應用而開發的系統,目前 2.0 版尚未開發完成,因此本次研習仍使用舊版教學,請大家見諒!
WAM 安裝與應用方式,請閱讀WAM 使用手冊。
備份策略
為了避免因硬碟損毀造成資料流失,建立備份機制是必要的。尤其是系統帳號密碼和各種服務設定所在的 /etc 目錄,以及擺放使用者資料的 /home 目錄,擺放系統資料庫、各種網路服務資料的  /var 目錄,更是需要定期備份。
備份在 Linux 上區分為底下幾種作法:
備份時機 備份地點 備份模式 備份實作方式
離線備份 本機 磁區完整備份 使用 tar 指令將整個目錄打包儲存
離線備份 異地 磁區完整備份G4L,linux 上的 ghost
在線備份 本機 目錄差異性備份 使用 cp -Rpu 備份
在線備份 異地 目錄完整備份 使用 scp 備份
在線備份 異地 目錄差異性備份 使用 rsync 服務備份
上表中,離線備份是指所有服務必須關閉,進入 single mode 進行備份或者是卸載磁區後再備份。在線備份則不需要關閉服務,可以一邊提供服務,一邊備份。
底下介紹 rsync 備份工具,它目前是由rsync.samba.org 維護,採用 "rsync 演算法"計算兩個對應檔案之間的差異部份,然後透過專屬通訊協定(TCP 873)來傳輸,使本地端與遠端二部主機之間的檔案達到同步,所以備份速度相當的快速。
由於 rsync 可以搭配 SSH 安全連線,比起一般透過 samba 或 nfs 備份還要安全,因此引起大家普遍的注意,算是備份工具中的明星產品。
通常進行備份時,需要有一台或多台主機提供足夠的備份空間,並在該主機上執行 rsync 服務,這樣的主機可以稱為備份主機( Backup Server)。備份主機會開啟一個 873 的服務通道(port),等待對方 rsync 連接,連線後如果檢查 SSH 密碼無誤,就開始進行檔案傳輸。第一次傳輸,由於沒有舊的備份檔所以會進行完整備份,以後只傳送更新的部份。
備份主機需要進行底下四項設定:
規劃建立備份目錄區 設定 /etc/xinetd.d/rsync 設定 /etc/rsyncd.conf 設定 密碼檔
一、備份目錄區建議採用一個大容量且獨立的分割區,有 RAID 硬碟是最好的。在該分割區建立掛載點,例如:/bk/server
二、接著設定 /etc/xinetd.d/rsync 如下:
service rsync{disable = nosocket_type = streamwait = nouser = rootserver = /usr/bin/rsyncserver_args = --daemonlog_on_failure += USERID}執行 service xinetd restart 來啟動 rsync 服務。
三、設定 /etc/rsyncd.conf  如下:
[teacher] 備份名稱用來區隔不同的備份工作,名稱可自訂
path = /bk/server/teacher 設定保存備份資料的位置
auth users = teacher_bk 備份時的認證帳號,必須存在於密碼檔(secrets file)中
uid = root 備份時以何種身分執行
gid = root
secrets file = /etc/rsyncd.secrets 儲存帳號密碼的檔案位置
read only = no
四、設定密碼檔
rsyncd.secrets 的內容很簡單,格式為 帳號:密碼,例如:
teacher_bk:myPasswd
由於在這個檔案中,密碼是以明碼(未加密)來儲存,請務必要修改檔案權限,以避免密碼遭竊。檔案擁有者設為 root 權限設為 600。
chown root.root rsyncd.secrets
chmod 600 rsyncd.secrets
備份主機設定好後,就可以來進行測試。假設有一台伺服器 teacher.xxps.tp.edu.tw 需要進行備份,備份內容為該主機的官方網頁,但是 log 部份不備份:
首先,在 teacher 主機上建立一個密碼檔(secrets file)放在 /root/rsyncd.secrets 中,內容只要含有密碼一行即可:
myPasswd
注意:檔案擁有者應設為 root,權限應設為 600。
測試底下指令能否成功執行:
/usr/bin/rsync -rvlHpogDtS --password-file=/root/rsyncd.secrets /usr/local/apache --exclude apache /logs teacher_bk@bk.xxps.tp.edu.tw::teacher
測試沒有問題後,就可以放入工作排程,讓它每天進行自動備份
0 5 * * * /usr/bin/rsync -rvlHpogDtS --password-file=/root/rsyncd.secrets /usr/local/apache --exclude apache /logs teacher_bk@bk.xxps.tp.edu.tw::teacher
20 5 * * * /usr/bin/rsync -rvlHpogDtS --password-file=/root/rsyncd.secrets /usr/local/etc teacher_bk@bk.xxps.tp.edu.tw::teacher
40 5 * * * /usr/bin/rsync -rvlHpogDtS --password-file=/root/rsyncd.secrets /usr/local/home teacher_bk@bk.xxps.tp.edu.tw::teacher
如果您覺得僅備份一份不夠安全,可依上面介紹的設定方法,自行增加任意多台備份主機來分散風險。
RPM 套件管理
RPM 全名叫做 Red Hat Package Manager,是由 Red Hat 公司所開發,因應傳統程式套件安裝方式太複雜,需要先將程式套件解壓縮,然後編譯程式,接著在拷貝到規定的資料夾,然後要自行建立相關組態檔及連結檔,這些流程不是玩家恐怕難以順利達成,因此將安裝程序和壓縮檔打包在一起,並透過單一程式 rpm 來進行解壓與編譯安裝等所有工作,以減輕系管師的負擔。在爾後的版本裡,Red Hat 公司陸續加入來源碼版本控制的機制、遠端安裝功能,使得 RPM 成為一套 Linux 必備的系統,在其它的 Linux 發行版本,也都提供了 RPM。
套件安裝
能夠透過 RPM 安裝的程式套件,附加檔名一定是 .rpm ,同時為了方便後續的管理,檔名會依照 Red Hat 的統一命名法,舉例如下:
netscape-navigator-4.51-4CLE.i386.rpm
從左往右閱讀,分別是套件名稱(netscape-navigator)、版本序號(4.51-4)、特殊修正版本(CLE)、套件類別(i386),常見的套件類別說明如下:
i386:表示是專為 intel 386 CPU 以上的電腦發行的
alpha:表示是專為 alpha CPU 的電腦發行的
src:表示是程式原始碼及說明文件
使用 rpm 指令來安裝套件是非常容易的,例如要安裝 netscape-navigator-4.51-4CLE.i386.rpm,只要輸入
rpm -ivh netscape-navigator-4.51-4CLE.i386.rpm
套件升級
當程式套件釋出新版本時,我們可以使用底下指令來升級:
rpm -Uvh netscape-navigator-4.61-4CLE.i386.rpm
套件移除
移除套件更容易,只要輸入套件名稱就好了,不需要打完整檔名,這是因為 rpm 為了因應來源碼版本控制的需求,使用資料庫來管理套件,因此直接會使用名稱到資料庫尋找符合的資料,例如:
rpm -e netscape-navigator
套件查詢
由於 rpm 使用資料庫來進行套件管理,因此套件查詢對 rpm 來說是很簡單的任務,rpm 的查詢指令非常多,現在只介紹常用的指令:
rpm -q netscape-navigator(查詢目前所安裝的版本序號)
rpm -ql netscape-navigator-4.61-4CLE.i386.rpm(查詢此套件的詳細檔案列表)
rpm -qa(列出所有已安裝的套件)
其它特異功能
rpm 還有一些重要的功能,由於頗為複雜,所以不在這裡詳細說明,舉例如下:
rpm -V netscape-navigator-4.61-4CLE.i386.rpm(檢查檔案是否損壞)
rpm --recompile netscape-navigator-4.61-4CLE.src.rpm(重新編譯程式)
rpm -i ftp://ftp.spps.tp.edu.tw/linux/md5-1.7.i386.rpm(遠端安裝)
rpm -K netscape-navigator-4.61-4CLE.i386.rpm(檢查套件的數位簽章是否正確,可使用 MD5 sum 或是 GPG)
系統自動更新
由於 RPM 所管理的套件在安裝的時候必須要考慮到不同套件之間的相依性,因此在安裝 RPM 套件的過程中,有時候會因為版本不一的問題而導致安裝失敗,為了克服這個問題,所以就開始有 APT/YUM 之類的無痛更新方案誕生。APT ( Advanced Package Tool ) 最早是由 debian 這個 Linux 發行版本所發展出來的,而 YUM ( Yellow dog Updater, Modified ) 則是由Duke University 所發起的計劃之一,由於功能比 APT 強大,目前已經被內建在 FC6 中,成為發行版本的一部份。也就是說裝好 Fedora 後,就有 yum 指令可以直接使用。
yum 服務是 Server - Client 架構,yum Server 負責提供 RPM 套件以及標頭檔(紀錄套件之間的相依性);client 端下載標頭檔後,先分析相依性以及排列安裝順序,然後自動從 Server 下載所需之 RPM 套件並進行安裝。由於系統修補更新頻繁,自行架設 yum 伺服器並不是一個好點子,最好還是利用公用 yum Server 來進行系統更新,才不會掛一漏萬,又或者是耽誤更新時效,導致系統漏洞遭到利用。
使用 yum 進行更新很簡單,只要在命令列輸入 yum update 即可。yum 除了會更新一般套件外,也可以用來進行 kernel 更新和系統升級(例如:FC5 升到 FC6),yum 常用指令如下:
yum install gimp 安裝指定之套件,相依套件將會一併安裝或升級
yum update gimp 更新指定之套件,未指定套件時,會更新所有已安裝之套件
yum upgrade 系統升級,除了更新舊有的套件外,還會安裝新開發的套件
使用 yum 進行系統升級的方法如下,以 FC5 升到 FC6 為例:
# rpm -ev fedora-release --nodeps
# rpm -Uvh fedora-release-notes-6-3.noarch.rpm
# rpm -Uvh fedora-release-6-4.noarch.rpm
# yum update kernel
# rpm -ev kernel-2.6.15-1.2054_FC5
# yum -y update
移除舊版的發行摘要
安裝新版的發行摘要
FC6的發行摘要已經細分為兩個,因此要分別安裝一次
升級 kernel 後,重新啟動以新的 kernel 開機
新 kernel 開機沒有問題的話,移除舊 kernel
如果想要讓系統每天都自動進行更新,可以安裝 yum-update 服務,安裝方法如下:
yum install yum-update
安裝完成後,記得使用 ntsysv 設定為開機自動執行之服務,或手動啟動:
service yum-update start
系統安全
系統維護模式
通常系統未正常關機時,在下一次啟動程序中,會自動以 fsck 加以修復,但有時候發生比較嚴重的問題時,必須以手動方式強迫修復硬碟,這時候就會進入 single mode,手動進入 single mode 的方法,請參考前面 GRUB 章節。
如果有製作開機磁片,也可以使用磁片來進入 single mode,請在安裝或升級好系統後,依底下步驟建立開機片,等到系統當掉再做就來不及了:
dd if=boot.img of=/dev/fd0(如果找不到 boot.img 這個檔案,在光碟片上有)
緊急救援模式
當 / 所在的磁區損毀時,這時候由於無法掛載根目錄,連 single mode 都進不去,這時候就必須使用緊急救援模式,請放入 Linux 開機光碟,開機後輸入 linux rescue,以此模式開機會將系統所需檔案放在 RAM disk 中,接著會將原來硬碟上的 / 目錄掛載在 /mnt/sysimage 目錄下,由於這時候系統所用的 / 是從 RAM disk 掛載進來的,與硬碟上的 / 無關,因此在進行強制修復時,可以很容易將該磁區取消掛載。
修復完成後,可以執行 chroot /mnt/sysimage 將根目錄取回,並使用 init 3 指令測試是否能進入多人工作模式。
GRUB 的安全
由於 LILO 有安全上的漏洞,因此建議您使用 GRUB,GRUB 可以使用 MD5 密碼來保護選單編輯的功能 ,方法是先建立 MD5 雜湊:
/sbin/grub-md5-crypt
執行這個命令後,會得到一個雜湊字串,接著請編輯 grub.conf,在 time out 下面加入這一行:
password --md5 password-hash
其中 password-hash 的地方請輸入剛才得到的雜湊字串。
很不幸的是萬一攻擊者開機時,選擇沒有安全防護的系統來開機,例如:dos,然後使用一些特殊工具來讀取 Linux 磁區內的檔案,這也不是不可能,因此像 DOS 的開機也應該要加以保護,我們可以在定義 DOS 開機選單的部分,使用底下組態來加以保護:
title  DOS
lock
password --md5 password-hash
root (hd0,0)
makeactive
chainloader +1
SSH 的使用與安全
使用 openSSH 來取代 telnet 已經是系管師必備的能力了,在 win98 平台上習慣用 netterm 的老師,還是可以繼續使用新一代的 secureNetterm,這個版本已經加入所有 openSSH 會用到的功能。
openSSH 實際上是包含三個工具,即 SSH、SCP、SFTP,其中 SSH 用來取代 telnet,SFTP 用來取代 FTP,而 SCP 就比較少用,是用來取代 rsh,除了這三種通訊協定外,透過 port 轉送技術也能處理 X window 的加密,但前提條件是必須在 win98 上先安裝 local X 程式。
有鑒於傳統連線工具因為不具備編碼能力,所以直接在網路上傳輸明碼,這就容易遭到攔截而導致秘密外洩,為了解決這個問題,新一代的 SSH 通訊協定則是運用雙金鑰編密來進行安全連線,所謂雙金鑰,就是公鑰跟私鑰,SSH 套件內含產生金鑰的工具程式 ssh-keygen,透過這支程式可以產生兩把鑰匙,其中的私鑰是安置在本地端,為了系統安全應盡量提升私鑰的存取權限限制,一般會設定成 640。公鑰則必須上傳到被控端,當本地端連上被控端時,本地端會先核對通行密碼(passPhrase),接著送出連線要求(ssh 與 telnet 不同,是使用 TCP 22),被控端會根據來源主機及使用者名稱來判斷應讀取哪一個公鑰,接著會隨機產生一個亂數,我們稱它為一次性密碼,因為這個密碼只使用在本次的連線中,將要求登入的訊息以公鑰編密後連同一次性密碼送回給本地端,本地端則以私鑰解密,並將使用者名稱與密碼以私鑰編密連同一次性密碼送去給被控端,雙方便以此種方式溝通。為了確保安全,被控端不應該得知私鑰的內容,以避免萬一公鑰外洩,因缺乏私鑰而無法假冒本地端,來與被控端連線,這樣可以將被控端被駭客破解的可能性降到最低。有關於 ssh 詳細的連線過程,可自行參考底下流程:
Initiating SSH session at Tue Nov 26 12:08:21 2002
SSHClientInitialize,Protocol 2
Connected to canonical hostname: wam.spps.tp.edu.tw
Attempting login as user shane, protocol 2
identity file C:\Program Files\InterSoft International, Inc\SecureNetTerm\.ssh\id_dsa type 3
Remote protocol version 1.99,remote software version OpenSSH_3.4p1
match: OpenSSH_3.4p1 pat OpenSSH*
Enabling compatibility mode for protocol 2.0
Local version string SSH-2.0-SecureNetTerm-3.1
SSH2_MSG_KEXINIT sent
SSH2_MSG_KEXINIT received
kex: server->client cast128-cbc hmac-sha1 zlib
kex: client->server cast128-cbc hmac-sha1 zlib
dh_gen_key: priv key bits set: 166/320
bits set: 516/1024
sending SSH2_MSG_KEXDH_INIT
expecting SSH2_MSG_KEXDH_REPLY
Host ‘wam.spps.tp.edu.tw‘ is known and matches the DSA host key.
Found key in C:\Program Files\InterSoft International, Inc\SecureNetTerm\.ssh\known_hosts2:1
bits set: 520/1024
kex_derive_keys
newkeys: mode 1
Enabling compression at level 6.
SSH2_MSG_NEWKEYS sent
waiting for SSH2_MSG_NEWKEYS
newkeys: mode 0
SSH2_MSG_NEWKEYS received
done: ssh_kex2.
send SSH2_MSG_SERVICE_REQUEST
service_accept: ssh-userauth
got SSH2_MSG_SERVICE_ACCEPT
authentications that can continue: publickey,password,keyboard-interactive
next auth method to try is publickey
try privkey: C:\Program Files\InterSoft International, Inc\SecureNetTerm\.ssh\id_dsa
authentications that can continue: publickey,password,keyboard-interactive
next auth method to try is password
packet_send2: adding 24 (len 29 padlen 11 extra_pad 64)
ssh-userauth2 successful: method password
Authentication complete.
channel 0: rfd=-1, wfd=-1, new [client-session]
send channel open 0
client_set_session_ident: id 0
Entering interactive session.
NetWatchProc is running
Starting client_init_dispatch, compat20 = 1
client_init id 0 arg 0
client_set_session_ident: id 0
channel 0: open confirm rwindow 0 rmax 32768
在 Windows 平台上可以使用 pietty 軟體來進行 Linux 的遠端連線:

SSH 的安全性是依靠正確的連線步驟來完成的,如果使用錯誤的方法來連線,安全性將會比使用 telnet 還糟糕,不論是使用 telnet 或 SSH,請記住絕對不可以用 root 身分來登入,請打開 /etc/ssh/sshd_config 組態檔,將 PermitRootLogin 這一個參數設為 no,以防止意外發生。
命令殼層的安全
學校內使用者多為老師或學生,他們並沒有遠端登入伺服器的需求,因此這項功能對他們來說是多餘的,如果保留遠端登入的功能又容易遭到駭客入侵,徒增管理上的負擔,為了安全考量,建議將此項功能關閉。
請編輯 /etc/passwd 檔案,將 /bin/bash 改為 /sbin/nologin,如果您使用巨集取代,不要忘記把自己及系統管理人員的命令殼層改回來,否則自己也登不上去了。
主控台的安全
如果您的伺服主機是擺放在公開場所,或是主機房管理鬆散,導致不相干的人也有機會使用主控台登入,請務必做好主控台保全。
建議的做法是,禁止以 root 身分登入主控台,必須使用一般帳號登入後,才能以 su 或 sudo 指令轉換身分為 root,這樣做就可以避免 root 密碼被反覆在主控台上測試。請將 /etc/securetty 檔案清除成空白就可以了。
服務的安全
由於 FTP 及 Mail 程式本身的漏洞,當 client 端連上來透過某複雜的特定程序造成緩衝區溢位,就可以取得 root 的身分來進行惡意的破壞,例如:讀取 /etc/shadow 檔,而這類動作通常與 FTP 或 Mail 系統的運作無關,也就是說正常運作下程式不會去進行這些動作。關於這個問題,一方面必須等待更新更安全的套件開發出來,一方面還是可以透過 PAM 的機制來進行保護。
由於 FTP 或 MAil 在進行身分驗證時是透過 PAM 模組,透過 PAM 模組的過濾,我們可以禁止這類程式去存取只有 root 身分才能讀取的重要檔案,這雖然無法防止駭客入侵,但至少能阻止駭客進行大規模的破壞。
請打開 /etc/pam.d 找到 system-auth 檔案,請在檔案開頭加入底下這一行:
auth required /lib/security/pam_listfile.so
安全性限制
包括各種系統資源的使用限制,收集擺放於  /etc/security 目錄中,請自行查看。
調整虛擬記憶體
在 Linux 上是使用 swap 技術將硬碟空間挪用為虛擬記憶體,當伺服器建置完成使用一段日子以後,有可能會擴充硬體,其中又以擴充主記憶體來改善執行效能最為普遍,在這種情形下,就需要增加 swap 虛擬記憶體的容量。
由於 swap 跟 LVM 機制一樣能將多塊磁碟分割區虛擬成一塊,因此我們並不需要將舊的 swap 磁區先移除,或是直接修改 swap 磁區大小,而是可以採用追加 swap 磁區的方式來配置。做法如下:
mkswap  /dev/hdx2(將新磁區格式化為 swap)
swapon  /dev/hdx2(立即啟用新的 swap 磁區)
修改 /etc/fstab 加入下面這一行
/dev/hdx2    swap    swap    defaults    0 0
如果硬碟已經沒有剩餘空間,而且無法加裝新的硬碟,這種情況下,我們沒辦法變更 swap 磁區來滿足需求,但是可以挪用已經掛載的分割區一部分空間,以檔案的形式來追加 swap 虛擬記憶體的容量:
dd  if=/dev/zero  of=/swapfile  bs=1024  count=65536(建立 /swapfile 檔案,單位為 KB,所以這是 64MB)
mkswap  /swapfile(將該檔案空間格式化為 swap)
swapon  /swapfile(立即啟用新的 swap 檔案)
修改 /etc/fstab 加入下面這一行
/swapfile    swap    swap    defaults    0 0
Linux 並沒有辦法搬移 swap 磁區,如果想要把 swap 作成單一一個磁區,必須先將舊 swap 磁區移除,再加入新的 swap 磁區,如果先加入新磁區,則新舊磁區會聯合運作,造成舊磁區無法移除的現象。移除 swap 磁區的方法如下:
swapoff  /dev/hdx2(關閉 swap 功能)
修改 /etc/fstab 移除 /dev/hdx2 那一行
加掛硬碟與檔案系統轉換
當硬碟不敷使用時,需要加掛新的硬碟到系統上,加掛硬碟的做法很簡單,先使用 fdisk 或 parted 將磁區分割好,接著使用 mkfs 指令來格式化硬碟,最後修改 /etc/fstab 讓系統重開機後能自動掛載新的硬碟。
fdisk 的使用方法如下:
#> fdisk /dev/hdb(假設要加掛的硬碟,是接在第一條排線的第二個位置)
The number of cylinders for this disk is set to 2498.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)
Command (m for help): m
Command action
a
b
c
d
l
m
n
o
p
q
s
t
u
v
w
x toggle a bootable flag
edit bsd disklabel
toggle the dos compatibility flag
delete a partition
list known partition types
print this menu
add a new partition
create a new empty DOS partition table
print the partition table
quit without saving changes
create a new empty Sun disklabel
change a partition‘s system id
change display/entry units
verify the partition table
write table to disk and exit
extra functionality (experts only)
Command (m for help):
先用 l 指令列出所有已分割好的磁區,你可以使用 d 指令將不要的磁區刪除,或使用 t 指令將磁區的檔案系統改為 Linux 用的 82(swap) 或 83(ext2,ext3),假如硬碟是空的尚未分割任何磁區,這時候請用 n 指令建立磁區,所有需要的修改完成後,輸入 w 指令將設定儲存起來,然後重開機讓修改生效,以便進行後續動作。
磁區分割好了以後,必須針對每個不同檔案系統將磁區格式化,swap 磁區格式化的方法前面已經提過,而作為一般用途的磁區,建議直接格式化為 ext3:
/sbin/mkfs  -t  ext3  /dev/hdb1(將空白磁區格式化為 ext3)
ext3 是從 ext2 改良而來,主要是挪用 ext2 一些 inode 拿來做成日誌檔(.journal),因此它與 ext2 只有些微不同,兩種系統也可以很容易互相轉換(轉換完仍需自行修改 /etc/fstab 組態):
/sbin/mke2fs  /dev/hdb1(將空白磁區格式化為 ext2)
/sbin/tune2fs  -j  /dev/hdb1 (將 ext2 轉為 ext3,轉換時順便建立日誌檔)
當新磁區格式化好了之後,就可以將它掛載上來,您可以直接指定要掛載的磁區型態:
/sbin/mount  -t  ext3  /dev/hdb1  /mount/point(指定掛載 ext3 磁區到 /mount/point 目錄)
或先修改 /etc/fstab 然後再掛載,修改 /etc/fstab 的方法是插入下面這一行:
/dev/hdb1        /mount/point        ext3        defaults        0 0
接著掛載時不需指定磁區型態及裝置名稱,指令如下:
/sbin/mount  /mount/point
已經格式化為 ext3 的磁區,如果要掛載到 6.X版以前的系統上使用,必須將格式改回 ext2,變更方法如下:
/sbin/tune2fs  -O  ^has_journal /dev/hdb1 (通知 kjournald 關閉日誌檔功能)
mount  -t  ext2  /dev/hdb1  /mount/point(將 ext3 掛載為 ext2)
rm  -f  .journal(刪除日誌檔)
將 ext2 轉換成 ext3 有許多好處,包括速度快、安全、高可用性、修復省時......等等優點。簡單的講,所謂 journal 就是把檔案讀寫動作逐項紀錄下來,當硬碟未正常關機(unclean shutdown)時,不需要檢查硬碟(e2fsck)直接可以掛載(mount),如果以 fsck 強制修復硬碟,則直接從日誌檔讀取需要修復的磁區資料,而不需要整顆硬碟都檢查。由於這些優點,我們也建議不要再使用舊的 ext2 格式。
掛載好後,如需進行資料移轉,可以使用 cp -Rp 指令,參數 R 表示連子資料夾一起備份,參數 p 表示要保留所有檔案權限設定,例如:
cp  -Rp  /home  /home1
進階磁碟系統
LVM 邏輯磁區
事實上新版 Linux 由於提供 LVM (Logical Volume Manager)功能,可以將多個磁區組合成一個 VG(Volume Group),然後將一個 VG 掛載成單一一個目錄,這樣就可以做到磁區合併的效果,省掉轉移資料的麻煩,要使用這項功能,請確定您的系統已經安裝 lvm2 套件,如果想要在開機磁區上使用 LVM,則在安裝過程中就必須先將可能會事後擴充的磁區做成 LVM 磁區型態(代號是 8e),如果您在安裝時沒有啟用這項功能想要事後補做,那樣可行不通,因為修改磁區型態將會造成所有資料遺失!
如果是新硬碟上的磁區,請用 fdisk 修改好磁區型態後,利用以下指令來做起始化的動作,在底下的例子裡,我們會把新硬碟上的三個磁區合併成一個,並在稍後加入第四個磁區以擴充容量(透過這些步驟,可以了解當初 Linux 安裝程式幫我們裝 LVM 時,到底做了哪些事情):
/sbin/pvcreate  /dev/hdb1
/sbin/pvcreate  /dev/hdb2
/sbin/pvcreate  /dev/hdb3
然後需建立 VG,建立好的 VG 將被視為一個裝置名稱,事後可以用  /dev/VG_name 來引用它:
/sbin/vgcreate  new_home  /dev/hdb1  /dev/hdb2  /devhdb3
對於 VG 這種裝置來說,仍必須進一步在上面分割邏輯磁區才能使用,我們不妨把 VG 想像成是一個外掛的 SCSI 磁碟陣列,對主機板來說,他被視為單一一顆硬碟(LVM 並不是真正的 RAID 系統,因為它只能實作 RAID0,事實上 2.4.x 版的 kernel 另外還提供 softRAID 功能,在後面說明)。既然它是一種裝置,當然無法直接掛載使用,必須先進一步作虛擬分割及格式化的動作, 下面的例子裡,我們僅分割單一一個磁區:
/sbin/lvcreate  -L  30g  new_home(將 new_home 虛擬裝置中的 30 GB 空間割成一個虛擬延伸磁區)
使用 lvcreate 指令除了可以分割l邏輯延伸磁區(所謂延伸是指可以動態變大,當然變小也是可以,但應該沒有人會這麼做),還可以分割一種稱為快照的磁區,這可以用來自動備份某塊邏輯延伸磁區,而這種備份是 自動進行的,並不需要人力介入管理。
一但邏輯磁區分割好了,依照慣例仍然得先將磁區格式化,一般是格式化成 ext3:
/sbin/mkfs  -t  ext3  /dev/new_home/lvol1(由於當初分割磁區時未使用 -n 參數來指定名稱,因此系統會自動編號)
格式化好的磁區就可以直接掛載使用:
mkdir  /home2
mount  -t ext3  /dev/new_home/lvol1  /home2
接下來進行資料轉移:
cp  -Rp  /home  /home2(將使用者資料從實體磁區拷貝到 lvm 磁區)
以光碟片開機進入 rescue mode
rm  -rf  /home (將 /home 刪除)
mkdir  /home (建立掛載點)
mount  -t ext3  /dev/new_home/lvol1  /home (重新將 /dev/new_home/lvol1 掛載到 /home)
rmdir  /home2(刪除掛載點)
緊接著修改 /etc/fstab 來掛載這個新作好的邏輯磁區:
/dev/new_home/lvol1        /home        ext3        defaults        0 0
重開機後,系統會嘗試掛載該虛擬磁區,如果掛載失敗,請在 /etc/rc.d/rc.local 加入以下指令:
vgchange -a y new_home
mount /dev/new_home/lvol1 /home
假如使用一段時間後, /home  的空間不足,這時我們可以動態加入新的實體磁區(以 /dev/hdb4 為例)來擴充空間:
以 fdisk 修改 /dev/hdb4 的磁區類型為 8e
/sbin/pvcreate  /dev/hdb4 (邏輯磁區起始化)
/sbin/vgextend  new_home  /dev/hdb4(將實體磁區加入到虛擬裝置上)
/sbin/lvextend  -L +10g  /dev/new_home/lvol1  /dev/hdb4(從該實體磁區擴充 10GB 空間至邏輯磁區)
完成以上步驟後,現在的 /home 空間容量已經變成 40GB!然而使用 df 指令去查看 inode,卻發現空間沒有增加,這時候必須使用 lvresize 指令來改變 inode 數,這樣才能使用新的空間。
磁碟陣列
RAID 一般分類成 Software RAID、Hardware RAID 與 BIOS RAID 三種,分別說明如下:
Software RAID 是由作業系統來提供 RAID 功能,此舉會耗用較多 CPU 運算資源來作動,所以要運行軟體模擬 RAID 最好是雙 CPU 以上且高時脈等級主機,不然當遇到大量運算時,整體效能會大打折扣。在 Linux 上可以使用 raidtools 套件來管理軟體磁碟陣列,它提供了很多相關工具,底下的範例將使用 raidtools 來介紹設定軟體磁碟陣列的方法。新版 Fedora 則提供另一個整合工具 mdadm,修正了 raidtools 的一些程式錯誤,有關 mdadm 的使用方式你可以參考這個文件:http://unthought.net/Software-RAID.HOWTO/Software-RAID.HOWTO.html。
Hardware RAID 由專屬 RAID 運算晶片,晶片位於介面卡或直接嵌入在主機板上,這時候作業系統只需要驅動 RAID 晶片即可,如此一來把 RAID 任務分工給 RAID 晶片,CPU 也較為輕鬆,管理上會比較簡便。Hardware RAID 以往應用在 SCSI 硬碟較多、使用 ATA/IDE 硬碟較少,近年來因為 SATA 硬碟價格低、容量大、效能還不差,廠商紛紛出產使用 SATA 硬碟的磁碟陣列卡。
BIOS RAID 又稱為ATA(SATA) RAID 或 Fake RAID,這類型 RAID 介於 Software RAID 與 Hardware RAID 之間,由主機板晶片(而非轉屬 RAID 晶片)來「幫忙」RAID 運算,因此有 Fake RAID(假 RAID)之稱。要啟動這個 RAID 功能,要先在 BIOS 畫面設定以後,再使作業系統能夠正確辨識裝置即可。Fedora Linux 使用 dmraid 工具來支援 ATARAID,開機後可以將自動掃描 ATARAID 並在 /dev/mapper 中建立裝置,你可以使用 mount 指令直接將它掛載使用。
使用軟體磁碟陣列應該在安裝 Linux 時,直接透過 Disk-Druid 來設定比較方便,如果事後想要手動加上去,步驟比較繁雜,首先和 LVM 系統一樣,你必須先使用 fdisk 將預先割好要作磁碟陣列的分割區改為 fd 類型,千萬不要拿已經有資料的 Linux ext2 或 swap 來改,否則資料會全部遺失,修改方法請自行參考前面的解說。特別要注意的是,要作磁碟陣列的分割區其容量必須一致,不可以有大有小!
改好磁區類型後,請用底下指令建立軟體磁碟陣列組態檔:
touch /etc/raidtab
該檔案內容如下:
raiddev                           /dev/md0 //定義磁碟陣列的裝置名稱
raid-level                        1 //定義磁碟陣列的等級,RAID 1 就是 Mirror
nr-raid-disks                   2 //定義磁碟陣列是由多少實體分割區組成的
chunk-size                      64k //定義 chunk 大小,由於是軟體陣列所以是使用系統主記憶體來進行 chunk,這個數值設大一點雖然對磁碟陣列效能有幫助,但卻會耗掉系統資源,建議使用預設值就好了
persistent-superblock       1//啟用 superblock,這是用來作磁碟定址,它能幫助 kernel 在偵測 RAID 磁碟時不會誤判
nr-spare-disks                 0 //定義備用的磁區
device                        /dev/hda1 //定義組成 RAID 的第一塊實體分割區
raid-disk                     0
device                        /dev/hdc1 //定義組成 RAID 的第二塊實體分割區
raid-disk                     1
以上面這個例子來說,作好的磁碟陣列在寫入資料時,兩個實體分割區都會寫入資料,讀取資料時,則只要其中一個磁區能正常讀取即可,這樣就可以充分利用磁碟陣列的好處來進行資料保全。做好組態設定以後,接下來請以下列指令開始製作磁碟陣列:
mkraid /dev/md0
磁碟陣列一但製作好了,依然得先將磁區格式化,一般是格式化成 ext3:
/sbin/mkfs  -t  ext3  /dev/md0
格式化好的磁區就可以直接掛載使用:
mkdir  /secure_data
mount  -t ext3  /dev/md0  /secure_data
資料保全測試:
使用 fdisk 將 RAID 磁碟陣列其中一個實體分割區刪除後,重新開機,發現 RAID 啟動時出現錯誤訊息,警告我們有部分磁碟損毀,但儲存的資料仍然具全沒有遺失。
如果開機訊息閃得太快沒有看清楚,可以使用底下指令來觀察:
lsraid -a /dev/md0
將該分割區重新分割並修改格式為 fd 後,重開機讓 softRAID 自動進行資料復原工作。使用 lsraid 指令來觀察,發現 RAID 裝置已經恢復正常。
from: http://newweb.syups.tp.edu.tw/documents/memo/linux/linux.htm