本文已不再維護,更新文章請參考這裡

很多朋友因為自身或服務單位的需求,總是有架設各種網路伺服器的時刻,這個時候大多數的前輩都會推薦他們使用 Linux 做為伺服器架設的作業系統。但因為這些朋友很多都沒有受過 Linux 作業系統方面的訓練,因此總覺得反正都是作業系統,所以 Linux 應該也跟 Windows 差不多吧!那麼就硬著頭皮使用圖形介面去設定好眾多的伺服器,也有可能參考網路上一些文章, 即使是透過文字介面去設定,也能夠很輕鬆的作好伺服器的架設。問題是,這樣的一部伺服器是很容易被綁架的, 而且,如果網路不通,你如何自行將問題克服 (trouble shooting)?難道出問題只能無語問蒼天?所以囉, 除非你只是暫時需要架設網路,可以請朋友或其他資訊公司幫你忙,如果你本身就是資訊方面的服務提供者, 那鳥哥建議你在進行伺服器實務設定之前,看一看這篇,試試看你到底有沒有具備網路伺服器的設定技能了呢?

1.1 前言: Linux 有啥功能
  1.1.1 只想用 Linux 架設伺服器需要啥能力?
  1.1.2 架設伺服器難不難呢?
1.2 基本架設伺服器流程
  1.2.1 網路伺服器成功連線的分析
  1.2.2 一個常見的伺服器設定案例分析
  1.2.2-1 瞭解網路基礎
  1.2.2-2 伺服器本身的安裝規劃與架站目的的搭配全新安裝, 全新設定
  1.2.2-3 伺服器本身的基本作業系統操作建立帳號, 修改權限, Quota, LVM
  1.2.2-4 伺服器內部的資源管理與防火牆規劃
  1.2.2-5 伺服器軟體設定:學習設定技巧與開機是否自動執行
  1.2.2-6 細部權限與 SELinux
  1.2.3 系統安全與備份處理
1.3 自我評估是否已經具有架設伺服器的能力
1.4 本章習題
1.5 針對本文的建議:http://phorum.vbird.org/viewtopic.php?t=23676

1.1 前言: Linux 有啥功能

很多剛接觸 Linux 的朋友常常會問的一句話就是:『我學 Linux 就是為了架設伺服器,既然只是為了架設伺服器,為什麼我還要學習 Linux 的其他功能?例如:例行性工作排程、Bash Shell ,又幹嘛去認識所有的登錄檔等等,我又用不到!此外,既然有好用的 Web 介面的 Server 設定軟體,可以簡單的將網站架設起來,為什麼我還要去學習 vim 手動的編輯一些設定檔?幹嘛還需要去理解伺服器的工作的原理?』上面這些話對於剛剛學會架設網站的人來說,真是替他們道出了一個新手的心聲啊!不過,對於任何一個曾經有過架設公開網站的朋友來說,上面這些話,真的是會害死人!為什麼呢?底下我們就來分析一下。


1.1.1 只想用 Linux 架設伺服器需要啥能力?

如果有人問你:『Linux 最強大的功能是什麼』?大概大家都會回答『是網路功能啊!』,接下來,如果對方再問:『所以學 Linux 就是為了架設伺服器囉?』呵呵!這個問題可就見仁見智囉!說穿了, Linux 其實就是一套非常穩定的作業系統,任何工作只要能在 Linux 這個作業系統上面跑,那他就是 Linux 可以達成的功能之一囉!所以 Linux 的作用實在不止於網路伺服器的架設吶。

舉例來說,在 Linux 上面開發跨平台的數值模式 (model) 諸如大型的大氣模擬模式,由於 Linux 的穩定與完善的資源分配功能,使得在 Linux 上面開發出來的程式運作的又快又穩定。此外,諸如 KDE, GNOME 等漂亮的圖形介面,搭配諸如 Open Office 等辦公室軟體,Linux 立刻搖身一變而成為優秀的辦公室桌面電腦了 (Desktop)。此外,Google 製作出專門給手機系統用的 Android 也是以 Linux 為底開發的。所以說,千萬不要小看了 Linux 的多樣功能吶。

不過,不管怎麼說, Linux 的強大網路功能確實是造成 Linux 能夠在伺服器領域內佔有一席之地的重要項目。 既然如此,我們就好好的來探索一下 Linux 的網路世界吧!首先, Linux 到底可以達成哪些網路功能呢?這可就多著咯!不論是 WWW, Mail, FTP, DNS, 或者是 DHCP, NATRouter 等等,Linux 系統都可以達到,而且,只要一部 Linux 就能夠達到上面所有的功能了!當然,那是在不考慮網路安全與效能的情況下,你可以使用一部 Linux 主機來達成所有的網路功能。

但是你得要知道,『架站容易維護難』啊!更深一層來說,『維護還好、除錯更難啊!』架設一個網站有什麼難的?即使你完全沒有摸過 Linux ,只要參考鳥哥的書籍或者是網站,而且一步一步照著做,包準你一個下午就可以架設完成五個以上的網路服務了!所以說, 架設伺服器有什麼難的?但要曉得的是,這樣的一個網站,多則三天,少則數小時,立刻就會被入侵了! 此外,被入侵之後,或許可以藉由一些工具來幫你將 root 的密碼救回來,可惜的是, 這樣的一個網站還是有被做為中繼站的危險存在的!

另外,如果你使用工具 (例如 Webmin) 卻怎麼也架設不起來某個網站時,要怎麼解決?如果你不懂該 Server 的運作原理與 Linux 系統的除錯訊息,那麼難道只能無語問蒼天?不要懷疑這種情況的可能性, 參考一下各大論壇上面的留言就可以很清楚的知道這種情況的存在有越來越明顯的趨勢呢!

所以說,架設伺服器之前還是有一些基本的技能需要學會的!而且這些技能是『一旦學會之後,真正是終身受用啊!』只要花一個學期 (三~六個月) 就能學會一輩子可以使用的技能,這個學習的投資報酬率真是太高了! 所以,一開始的學習不要覺得苦,那真的是值得的喔!^_^

舉例來說,鳥哥在 2003 ~ 2005 年跑去當兵了,當兵期間很少碰 Linux 啦!等到退伍後接到的第一個班要帶 Linux 國際證照時,幾乎所有的指令都在看不起鳥哥 @_@∼不過,懂得學習的方法的鳥哥,透過 man 啦,透過 google 啦, 透過以前學習的一些概念啦,遇到問題幾乎都可以在一分鐘內解決,同學也不會有突然不知所云的困擾!你說, 這樣是不是很好呢?

Linux 不是很好學,根據鳥哥過去教學的經驗,很多同學在學 Linux 時真是非常的痛苦,不過學完之後, 以前在 Windows 上面遇到的困難卻也自然而然的迎刃而解!因為 Linux 訓練我們時,是要我們去解決一個發現的問題, 這過程需要很多基礎知識的培養,所以學完他之後,你會覺得很多事情都變的很簡單而單純。但如果使用 Windows 的懶人方案,很多問題就不可能瞭解為啥會發生與為啥可以這樣處理了!我們會在下一節分析一下架設伺服器的流程, 也會提供相對應的你應該要會的 Linux 技能喔!


1.1.2 架設伺服器難不難呢?

不管是 Windows 還是 Linux ,要架設好一部堪稱完美的伺服器,『基本功課』還是得做的,這包括了:

  1. 基礎網路的基本概念,以方便進行聯網與設定及除錯;
  2. 熟悉作業系統的簡易操作:包括登錄分析、帳號管理、文書編輯器的使用等等的技巧;
  3. 資訊安全方面:包括防火牆與軟體更新方面的相關知識等等;
  4. 該伺服器協定所需軟體的基本安裝、設定、除錯等,才有辦法實作。

而且,每一個項目裡面所需要學習的技巧可多著呢!『什麼?要學的東西那麼多啊!』是啊! 所以,不要以為資訊管理人員整天閒閒沒事幹的吶,大家可是天天在出賣知識的,同時, 還得天天應付隨時可能會發生的各種漏洞與網路攻擊手法呢!真不是人幹的工作∼∼

這麼說的話,架設伺服器真的是挺難的喔!事實上,架設伺服器其實蠻簡單的哩!咦!∼怎麼又說架設伺服器簡單了? 不是說架設伺服器難嗎?呵呵!其實『架設伺服器很難』是由於朋友們學習的角度有點偏差的原因啦! 還記得當初進入理工學院的時候,天天在唸的東西是基礎物理、基礎化學、工程數學與流體力學等基礎科目, 這些科目花了我們一至兩學期的時間,而且內容還很難吶∼都是一大堆的理論背不完。 怪了?我們進理工學院是為了求取更高深的知識,那麼這些基礎知識學了有什麼用吶? 呵呵!更高深的知識都是建構在這些基本科目的理論上面的,所以 萬一你基礎的科目沒有讀好,那麼專業科目裡面提到的基本理論怎麼可能聽的懂?

這樣說應該就不難瞭解了吧!沒錯!認識作業系統與該作業系統的基本操作,還有那個重要的網路基礎, 就是我們在架設伺服器前的『基礎科目』啦!所以說,在進入 Linux 的伺服器世界之前,真的不能夠略過網路基礎的相關知識,同時, Linux 系統的基本技能也必需要能夠理解吶!

好了,或許你還是對於 Linux 系統裡面『什麼是很重要的知識』不甚瞭解, 果真如此的話,那麼我們就舉個簡單的例子來說明一下囉!底下列出一般的架設伺服器流程, 我們由架設伺服器的流程當中,來看一看什麼是重要的 Linux 相關技能吧! ^_^。

在這一章當中,鳥哥不再就 linux 基礎指令進行解析,因為在 『鳥哥的 Linux 私房菜 -- 基礎學習篇』裡面已經詳細的介紹過了! 如果持續的介紹指令,簡直是浪費篇幅∼所以底下僅介紹一個 Linux 基礎學習重要性的分析喔!

1.2 基本架設伺服器流程

雖然不同的伺服器提供的服務並不相同,而且每種服務的原理也不見得都一樣,不過,每種伺服器由規劃、架設到後續的安全維護, 其實整個流程是大同小異的。什麼?你不相信啊?為了讓你相信,那我們就來一項一項的分析看看吧!


1.2.1 網路伺服器成功連線的分析

底下我們就整個伺服器的簡易架設流程當中來分析一下,以瞭解為什麼瞭解作業系統的基礎對於網站維護是相當重要的呢?首先,到底我們是如何連線到伺服器的? 連線到伺服器又取得啥咚咚?我們先以底下這張圖示來作個簡單的說明好了:

網路連線至伺服器所需經過的各項環節
圖 1.2-1、網路連線至伺服器所需經過的各項環節

先來理解一下,到底我們連線到伺服器想要得到什麼?舉例來說,你連線到 Youtube 想要看影片,所以對方就提供影片串流資料給你; 你連到 Yahoo 想要看新聞,所以對方就提供新聞的文字檔案給你;你連線到無名小站想要看美女,對方就傳圖檔給你;你連線 Facebook 想要去種田,對方就參考你之前留下來的記錄,從資料庫裡面將你的記錄拿出來傳給你。看到沒有,你連線到伺服器,重點在取得對方的資料, 而一般資料的存在就是使用檔案囉!那你有沒有權限取得?最終與該檔案系統的設定有關啦!

上圖顯示的是:首先,用戶端到伺服器的網路要能夠通,等到用戶端到達伺服器後,會先由伺服器的防火牆判斷該連線能否放行, 等到放行之後才能使用到伺服器軟體的功能。而該功能又得要通過 SELinux 這個細部權限設定的項目後,才能夠讀取到檔案系統。 但能不能讀到檔案系統呢?這又跟檔案系統的權限 (rwx) 有關啦!上述的每個部分都要能夠成功,否則就無法順利讀取資料囉。

所以,根據上面的流程我們大概可以將整個連線分為幾個部分,包括:網路、伺服器本身、內部防火牆軟體設定、各項服務設定檔、細部權限的 SELinux 以及最終最重要的檔案權限。底下就分幾個細項來談談囉。

  1. 網路:瞭解網路基礎知識與所需服務之通訊協定

    既然要架設伺服器,首先當然得要瞭解一下網際網路。因為不管是哪種作業系統,若想要與網際網路連線,這個網路基礎就得瞭解。 舉例來說,『網域』是經常會談到的概念,當你發現一個設定為 192.168.1.0/255.255.255.0 時,曉得那是什麼鬼東西嗎? 如果不知道的話,呵呵!絕對無法設定好網站的啦!另外,為何你需要伺服器?當然是想要達成某項網路服務。 舉例來說,傳輸檔案可以用 FTP,那 WWW 可以傳遞檔案嗎?網芳可以傳遞嗎?各有何用處?哪個比較方便? 對於客戶或老闆來說,我們所設定的服務能否滿足他們的需求等等,這都需要瞭解,否則你將一頭霧水啊! 因此這部份你就得要瞭解:

    • 基本的網路基礎知識:包括乙太網路硬體與協定、TCP/IP、網路連線所需參數等;
    • 各網路服務所對應的通訊協定原理,以及各通訊協定所需對應的軟體。

  2. 伺服器本身:瞭解架網路伺服器之目的以配合主機的安裝規劃

    想要架設伺服器嗎?那...架什麼伺服器?這個伺服器要不要對 Internet 開放?這個服務要不要針對客戶提供相關帳號? 要不要針對不同的客戶帳號進行例如磁碟容量、可活動空間與可用系統資源進行限制?如果要進行各項資源的限制, 那伺服器作業系統應該要如何安裝與設定?問題很多吧!所以,先瞭解你要的伺服器服務目的之後,後續的規劃才能陸續出爐。 不過,如果架站只是為了『練功』而已,呵呵!那就不需要考慮太多了∼

  3. 伺服器本身:瞭解作業系統的基本操作

    網路服務軟體是需要建置在作業系統上面的,所以基本的作業系統操作就得要瞭解才行啊!包括軟體如何安裝與移除? 如何讓系統進行例行的工作管理?如何依據伺服器服務之目的規劃檔案系統?如何讓檔案系統具有未來擴充性 (LVM 之類)? 系統如何管理各項服務之啟動?系統的開機流程為何?系統出錯時,該如何進行快速復原等等,這都需要瞭解的呢!

  4. 內部防火牆設定:管理系統的可分享資源

    一部主機可以擁有多種伺服器軟體的運作,而很多 Linux distributions 出廠的預設值就已經開放很多服務給 Internet 使用了,不過這些服務可能並不是你想要開放的呢。我們在瞭解網路基礎與所需服務的目的之後, 接下來就是透過防火牆來規範可以使用本伺服器服務的用戶,以讓系統在使用上擁有較佳的控管情況。 此外,不管你的防火牆系統設定的再怎麼嚴格,只要是你要開放的服務, 那防火牆對於該服務就沒有保護的效果。因此,那個重要的線上更新軟體機制就一定要定期進行!否則你的系統將會非常非常的不安全!

  5. 伺服器軟體設定:學習設定技巧與開機是否自動執行

    剛剛第一點就提到我們得要知道每種服務所能達成的功能,如此一來才能夠架設妳所需要的服務的網站。 那妳所需要的服務是由哪個軟體達成的?同一個服務可否有不同的軟體?每種軟體可以達成的目的是否相同? 依據所需要的功能如何設定你的伺服器軟體?架設過程中如果出現錯誤,妳該如何觀察與除錯? 可否定期的分析伺服器相關的登錄資訊,以方便瞭解該伺服器的使用情況與錯誤發生的原因? 能否通知多個用戶進行連線測試,以取得較佳的伺服器設定值?所以這裡你可能就得要知道:

    • 軟體如何安裝、如何查詢相關設定檔所在位置;
    • 伺服器軟體如何設定?
    • 伺服器軟體如何啟動?如何設定自動開機啟動?如何觀察啟動的埠口?
    • 伺服器軟體啟動失敗如何除錯?如何觀察登錄檔?如何透過登錄檔進行除錯?
    • 透過用戶端進行連線測試,如果失敗該如何處理?連線失敗的原因是伺服器還是防火牆?
    • 伺服器的設定修改是否有建立日誌?登錄檔是否有定期分析?
    • 伺服器所提供或分享的資料有無定期備份?如何定期自動備份或異地備份?

  6. 細部權限設定:包括 SELinux 與檔案權限

    等到你的伺服器全部設定妥當,最後你所提供的檔案資料權限卻是給了『 000 』的權限分數, 那鳥哥很肯定的說,大家都無法讀到你所提供的資料啊...!此外,新的 distributions 都建議你要啟動 SELinux ,那是什麼咚咚? 如果你的資料放置於非正規的目錄,那該如何處理 SELinux 的問題?又如何讓檔案具有保密性或共享性 (檔案權限概念ACL 等)?等等,這也都是需要釐清的觀念喔!

上述的伺服器架設流程中,其實除了第 5 點之外,其他步驟在各伺服器設定都需要瞭解啊!而且都是一樣的東西說! 因此,這些基礎如果學會了,最終,你只要知道第 5 點裡面那個軟體的基礎設定,你的伺服器一下子就可以設定完成啦! 這樣說,你是否開始覺得基礎學習很重要啊! ^_^


1.2.2 一個常見的伺服器設定案例分析

上面講完後或許你還是不很清楚到底這些技能如何串起來?鳥哥這裡提供一個簡單的案例來分析一下好了, 這樣你應該就比較容易清楚的知道為何需要學習這些咚咚。

在上述的環境中,你要考慮的東西有哪些呢?依據本小節一開始談到的六個步驟來分析的話,你可能需要底下這些咚咚喔!


1.2.2-1 瞭解網路基礎

我們想要將五部電腦串接在一塊,但是卻又只有一個可以對外的連線,此時就得要購買集線器 (hub) 或者是交換器 (switch) 來串接所有的電腦了。但是這兩者有何不同?為何 switch 比較貴?我們知道網路線被稱為 RJ-45 的網路線, 但網路線材竟然有等級之分,這個等級要怎麼分辨?不同等級的線材速度有沒有差異?等到這些硬體基礎瞭解之後, 你才能夠針對你的環境來進行連線的設計。這部份我們等到下一章再來介紹。

由於只有一條對外連線而已,因此通常我們就建議你可以用如下的方式來串接你的網路:

硬體的網路連線示意圖
圖 1.2-2、硬體的網路連線示意圖

透過 IP 分享器,我們的五部電腦就都能夠上網了。此時你得要注意,那麼能否上網與 Internet 有關, Internet 就是那有名的 TCP/IP 通訊協定,而想要瞭解網路就得要知道啥是 OSI 七層協定。我們也知道能連上 Internet 與所謂的 IP 有關,那麼我們內部這五部電腦所取得的 IP 能不能拿來架站?也就是說, IP 有沒有不同種類? 如果 IP 分享器突然掛了,那你的這五部電腦能不能連線玩魔獸?這就考慮你的網路參數設定問題了!

如果你的同學或家人跑來跟你說,網路不通哩!你直覺會是什麼?硬體問題?軟體問題?還是啥莫名其妙的問題? 如果你不懂網路基礎的 IP 相關參數,包括路由設定以及領域名稱系統 (DNS) 的話,肯定不知道怎麼進行連線測試的。 所以囉,此時你就會被罵說:『怎麼都不懂還想要管理我們家網路』...那時不是很糗嗎?所以要學好一些嘛! 這部份就很複雜了,包括 TCP/IP, Network IP, Netmask IP, Broadcast IP, Gateway, DNS IP 等等,都需要理解喔!

瞭解了這些原理之後,你才能夠進行除錯 (debug) 的工作,否則,錯誤一出,你可能就會被罵的臭頭的! 最常見的錯誤中,舉例來說,如果你的主機明明就可以使用 ping 這個指令去接觸遠方的主機 (ping IP),但是就是無法使用 ping hostname 去接觸遠方的主機,請問,這個原因是什麼呢?瞭解網路基礎的朋友一看就知道幾乎是 DNS 出問題了,不曉得的朋友就是想破頭也得不到答案。既然知道出問題的地方,就能夠針對該問題去處理嘛!

網路基礎會影響到你的網路設定是否正確,這真的很重要吶,因為,如果你的網路不通,那麼即使伺服器架設成功了, 別人可以看的到嗎?所以說,要架站,真的得對網路基礎的部分下一些功夫才行的。關於網路基礎這部份我們在基礎篇並沒有談過, 所以我們會在下一章網路基礎時再詳加說明喔!


1.2.2-2 伺服器本身的安裝規劃與架站目的的搭配

如同圖 1.2-2 所示,Server 端是在那五部電腦之中,而且 Server 必須要提供針對不同帳號給予網路磁碟機,我們這邊會提供網芳 (SAMBA) 這個服務,因為他可以在 Linux/Windows 之間通用之故。 且由於需要提供帳號給使用者,以及想到未來的磁碟擴充情況,因此我們想要將 /home 獨立出來,且使用 LVM 這個管理模式, 並搭配 Quota 機制來控制每個帳號的磁碟使用量。

所以說,你得知道 Linux 目錄下的 FHS (Filesystem Hierarchy Standard) 的規範,否則分割槽給到錯誤的目錄,會造成無法開機!那為什麼要將 /home 獨立放入一個分割槽? 那是因為 quota 僅支援 filesystem 而不支援單一目錄啊!好了,如果給你一部全新的主機,那你該如何安裝你的系統呢?

實作題-全新安裝
請到義守大學( http://ftp.isu.edu.tw/pub/Linux/CentOS/ )或國家高速網路中心( http://ftp.twaren.net/Linux/CentOS/ )下載最新的 Linux 映像檔來燒錄,並且依據上述的需求安裝好你的 Linux 系統 (最重要的其實就是那個分割而已, 其他的動作可以在安裝完成後再說) 。
答:
由於 Linux 的安裝我們已經在基礎篇內的第四章介紹過了,這裡我們不再使用圖形介面來說明, 僅使用文字說明來介紹你在每個項目應該處理的動作而已。此外,由讀者們的回應發現,學習者經常只有一部主機, 因此,這裡我們建議您使用 Virtualbox (http://www.virtualbox.org/) 來模擬出一部實體主機,以安裝您的測試環境。並請注意, 這部主機將會使用在本書的各個章節測試中。

Virtualbox 的安裝與設定請自行參考其官網上面的 Documentation 介紹,這裡不再贅言。只是需要注意的是, 若 (1)需要架設網站與上網,建議網路使用橋接模式 (bridge) ,且網路卡類型使用 Intel 的桌上型電腦類型即可。 而 (2)磁碟配置建議使用 SATA 類型,且容量請給予 60GB 以上。 (3)記憶體至少該給予 512MB 以上,最好有 1GB 來測試。 其他的請參考官網文件,或者使用預設配置即可。當然啦,如果你有獨立的實體機器來安裝,那就更好了! 不需理會這一小段文字的說明喔。

預設配置如下:
  • 分割表請依如下方式進行:
    • /  : 3GB
    • /boot: 300MB
    • /usr : 5GB
    • /var : 5GB
    • /tmp : 2GB
    • swap : 1GB
    • /home: 20GB,並且使用 LVM 模式建置,且 LVM 包含全部的剩餘磁碟容量。
  • 軟體挑選時,請選擇預設安裝加上『 Server 』與『 Server-GUI 』項目;
  • 資訊安全部分,防火牆選擇啟動,SELinux 選擇強制 (Enforce);
  • 假設 IP 分享器有自動分配 IP 的功能,所以網路參數先選擇 DHCP 即可,未來再自己修改。
實際流程大致如下 (鳥哥以 CentOS 5.5 為例說明)
  1. 進入 BIOS ,選擇光碟機開機,並且將 CentOS 5.5 的 DVD 放入光碟機中;
  2. 在啟動安裝的畫面中,出現 boot: 時,直接按 Enter 即可;
  3. 出現『 CD Found 』字樣,此時建議可以選擇『 Skip 』即可略過;
  4. 在歡迎畫面以滑鼠點選『 Next 』;
  5. 語系資料可以選擇『Chinese(Traditional)(繁體中文);
  6. 鍵盤格式保留『美式英文』即可;
  7. 第一次使用為分割的磁碟,會出現一個警告為找不到分割表,此時選擇『是』即可略過;
  8. 在出現分割時,選擇最上方資料為『建立自訂的分割模式』,然後按『下一步』;
  9. 按『新增』進入分割畫面,將掛載點、容量填寫完畢就可以按確定了。畫面有點像這樣:
    分割的參數下達示意圖
    圖 1.2-3、分割的參數下達示意圖

  10. 持續進行上述的動作,將所有的資料都處理完畢,除了 /home 之外。
  11. 但是 /home 的處理並非如此!妳必須要先新增一個分割槽, 然後將所有的容量都給這個分割槽,並選擇 LVM ,有點像底下這樣:
    分割出 LVM 分割槽的方式
    圖 1.2-4、分割出 LVM 分割槽的方式"

    接下來回到原本的分割畫面後,按下『 LVM 』來建立一個名為 server 的 LVM VG ,並建立 /home 這個 LV 囉! 畫面有點像底下這樣:
    建立最終的 LVM 的 LV 與 /home
    圖 1.2-5、建立最終的 LVM 的 LV 與 /home"

    回到原本的分割畫面,最終的顯示有點像底下這樣,然後請按下『下一步』繼續:
    分割的最終結果
    圖 1.2-6、分割的最終結果"

  12. 出現開機管理程式,都使用預設值即可,請按『下一步』;
  13. 設定網路裝置,通通選擇 DHCP 即可!保留預設值不要動,按『下一步』繼續;
  14. 預設時區會出現亞洲/台北,保留預設值,按『下一步』繼續;
  15. 出現 root 密碼製作,這裡我們先設定為 centos 吧!你也可以自行設定;
  16. 在出現軟體選擇後,保留原本的並新增『Server』與『Server-GUI』兩項;
  17. 出現相依性檢查完畢後,按『下一步』就開始安裝系統了;
  18. 經過一段時間的等待,出現重新開機後,你就重新開機吧!

處理完畢安裝之後,再來就是需要設定各項基本防護的要求了。這個要求會在首次登入時進行, 當你首次登入後,應該要設定什麼呢?就來處理處理底下的實作題吧:

實作題-全新設定
完成上述的安裝動作並且重新安裝後,依據本章的設定需求,需要有防火牆以及啟動 SELinux , 因此你必須要進行如下的額外設定後,才可以登入系統喔!
答:
事實上這題很簡單呢!流程大致如下:
  1. 第一次開機會製作出許多重要的金鑰資料,因此第一次開機通常時間比較久,請稍作等待;
  2. 出現歡迎畫面後,請按下『下一頁』繼續;
  3. 防火牆設定請選擇『啟用』之外,底下的 SSH 方框請將他取消勾選;
  4. 由於有修改過資料,因此會出現一個確認視窗,請按下『是』吧!
  5. 在出現的 SELinux 設定下,請選擇預設的『強制』後,按下一頁;
  6. 出現 Kdump 時,保留不要選擇,略過這個服務後按下一頁;
  7. 出現日期設定,如果沒有問題就請按下一頁;
  8. 建立使用者名稱的地方,請建立一個帳號:student,全名 student,密碼 123456 的帳號,然後按下一頁;
  9. 若有音效卡會出現音效資訊,也請按下一頁繼續;
  10. 出現其他光碟的部分,沒有需要安裝其他軟體,所以請按『完成』即可
  11. 最終會出現等待登入的畫面,那就是設定完畢了!


1.2.2-3 伺服器本身的基本作業系統操作

既然我們這部主機得要提供不同帳號來使用他們自己的網路磁碟,因此還需要建立帳號啊,使用磁碟配額 (quota) 等等的。 那麼你會不會建立帳號呢?你會不會建置共享目錄呢?你能不能處理每個帳號的 Quota 配額呢?如果 /home 的容量不足了, 你會不會放大 /home 的容量呢?有沒有辦法將系統的磁碟使用情況定期的發送郵件給管理員呢?這些都是基本的維護行為喔! 我們底下就以幾個實際例子來練習看看你的基礎能力吧!

例題-大量建置帳號
假設我的五個朋友帳號分別是 vbirduser{1,2,3,4,5},且這五個朋友未來想要共享一個目錄,因此應該要加入同一個群組,假設這個群組為 vbirdgroup,且這五個帳號的密碼均為 password 。那該如何建置這五個帳號?
答:
你可以寫一支腳本程式來進行上述的工作喔!
[root@www ~]# vim useradd.sh
#!/bin/bash
groupadd vbirdgroup
for username in vbirduser1 vbirduser2 vbirduser3 vbirduser4 vbirduser5
do
	useradd -G vbirdgroup $username
	echo "password" | passwd --stdin $username
done
[root@www ~]# sh useradd.sh
[root@www ~]# id vbirduser1
uid=501(vbirduser1) gid=502(vbirduser1) groups=502(vbirduser1),501(vbirdgroup) 
context=root:system_r:unconfined_t:SystemLow-SystemHigh
最後利用 id 這個指令來查詢看看,是否群組的支援是對的啊!

例題-共享目錄的權限
這五個朋友的共享目錄建置於 /home/vbirdgroup 這個目錄,這個目錄只能給這五個人使用,且每個人均可於該目錄內進行任何動作! 若有其他人則無法使用 (沒有權限),那該如何建置這個目錄的權限呢?
答:
考慮到共享目錄,因此目錄需要有 SGID 的權限才行!否則個別群組資料會讓這五個人彼此間無法修改對方的資料的。因此需要這樣做:
[root@www ~]# mkdir /home/vbirdgroup
[root@www ~]# chgrp vbirdgroup /home/vbirdgroup
[root@www ~]# chmod 2770 /home/vbirdgroup
[root@www ~]# ll -d /home/vbirdgroup
drwxrws--- 2 root vbirdgroup 4096  7月 13 11:11 /home/vbirdgroup
上面特殊字體的部分就是你需要注意的部分囉!特別注意那個權限的 s 功能喔!

例題-Quota 實作:
假設這五個用戶均需要進行磁碟配額限制,每個用戶的配額為 2GB (hard) 以及 1.8GB (soft),該如何處理?
答:
這一題實作比較難,因為必須要包括檔案系統的支援、quota 資料檔案建置、quota 啟動、建立使用者 quota 資訊等過程。 整個過程在基礎篇有講過了,這裡很快速的帶領大家進行一次吧!
# 1. 啟動 filesystem 的 Quota 支援
[root@www ~]# vim /etc/fstab
LABEL=/             /      ext3  defaults                    1 1
/dev/server/server  /home  ext3  defaults,usrquota,grpquota  1 2
LABEL=/tmp          /tmp   ext3  defaults                    1 2
....(底下省略)....
# 因為是要處理使用者的磁碟,所以找到的是 /home 這個目錄來處理的啊!
[root@www ~]# umount /home; mount -a
[root@www ~]# mount | grep home
/dev/mapper/server-server on /home type ext3 (rw,usrquota,grpquota)
# 做完使用 mount 去檢查一下 /home 所在的 filesystem 有沒有上述的字眼!

# 2. 製作 Quota 資料檔,並啟動 Quota 支援
[root@www ~]# quotacheck -avug
quotacheck: Scanning /dev/mapper/server-server [/home] quotacheck: 
....(底下省略)....
# 會出現一些錯誤的警告資訊,但那是正常的!出現上述的字樣就對了!
[root@www ~]# quotaon -avug
/dev/mapper/server-server [/home]: group quotas turned on
/dev/mapper/server-server [/home]: user quotas turned on

# 3. 製作 Quota 資料給用戶
[root@www ~]# edquota -u vbirduser1
Disk quotas for user vbirduser1 (uid 501):
  Filesystem                 blocks  soft        hard  inodes  soft  hard
  /dev/mapper/server-server      56  1800000  2000000       7     0     0
# 因為 Quota 的單位是 KB ,所以這裡要補上好多 0 啊!看的眼睛都花了!

[root@www ~]# edquota -p vbirduser1 vbirduser2
# 持續作幾次,將 vbirduser{3,4,5} 通通補上去!

[root@www ~]# repquota -au
*** Report for user quotas on device /dev/mapper/server-server
Block grace time: 7days; Inode grace time: 7days
                        Block limits                File limits
User             used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root       --  176212       0       0              5     0     0
student    --      56       0       0              7     0     0
vbirduser1 --      56 1800000 2000000              7     0     0
vbirduser2 --      56 1800000 2000000              7     0     0
vbirduser3 --      56 1800000 2000000              7     0     0
vbirduser4 --      56 1800000 2000000              7     0     0
vbirduser5 --      56 1800000 2000000              7     0     0
# 看到沒?上述的結果就是有發現到設定的 Quota 值囉!整個流程就是這樣!

例題-檔案系統的放大 (LVM)
純粹假設的,我們的 /home 不夠用了,妳想要將 /home 放大到 25GB 可不可行啊?
答:
因為當初就擔心這個問題,所以 /home 已經是 LVM 的方式來管理了。此時我們要來瞧瞧 VG 夠不夠用,如果夠用的話, 那就可以繼續進行。如果不夠用呢?我們就得要從 PV 著手囉!整個流程可以是這樣來觀察的。
# 1. 先看看 VG 的量夠不夠用:
[root@www ~]# vgdisplay
  --- Volume group ---
  VG Name               server
  System ID
  Format                lvm2
....(中間省略)....
  VG Size               44.06 GB
  PE Size               32.00 MB
  Total PE              1410
  Alloc PE / Size       625 / 19.53 GB
  Free  PE / Size       785 / 24.53 GB
  VG UUID               RnQYZM-1bXC-hLTg-wT2J-ugHh-LvrH-b0FzmI
# 太棒了!還有 24GB 可以使用!我們只要再增加 5GB 而已!應該是夠用的!

# 2. 檢查 LV 夠用嗎:
[root@www ~]# lvdisplay
  --- Logical volume ---
  LV Name                /dev/server/server
  VG Name                server
  LV UUID                zSW5Cd-NfRV-e5lY-95fH-HAv5-02lO-01z8v8
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                19.53 GB
....(底下省略)....
# 看起來,是需要增加容量囉!我們使用 lvresize 來擴大容量吧!

[root@www ~]# lvresize -L 25G /dev/server/server
  Extending logical volume server to 25.00 GB
  Logical volume server successfully resized
[root@www ~]# lvdisplay
  --- Logical volume ---
  LV Name                /dev/server/server
  VG Name                server
  LV UUID                zSW5Cd-NfRV-e5lY-95fH-HAv5-02lO-01z8v8
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                25.00 GB
....(底下省略)....
# 看來確實是擴大到 25GB  囉!開始處理檔案系統吧!

# 3. 擴大檔案系統
[root@www ~]# resize2fs /dev/server/server
resize2fs 1.39 (29-May-2006)
Filesystem at /dev/server/server is mounted on /home; on-line resizing required
Performing an on-line resize of /dev/server/server to 6553600 (4k) blocks.
The filesystem on /dev/server/server is now 6553600 blocks long.

[root@www ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda5             2.9G  305M  2.4G  12% /
/dev/mapper/server-server
                       25G  173M   23G   1% /home
....(其他省略)....
# 可以看到檔案系統確實有放大到 25G 喔!這樣瞭解了嗎?

做完上面的實作之後,現在你曉得為什麼在基礎篇的時候,我們一直強調一些有的沒有的了吧?因為那些東西在這裡都用的上! 如果本章這些題目你都不會,甚至連為什麼要作這些東西都不懂的話,那得趕緊回去閱讀基礎篇,不要再念下去了! 會非常非常辛苦的呦!


1.2.2-4 伺服器內部的資源管理與防火牆規劃

你可知道本章第一個實作題安裝好了你的 Linux 之後,系統到底開放了多少服務呢?這些服務有沒有對外面的世界開放監聽? 這些服務有沒有漏洞或者是能不能進行網路線上更新?這些服務如果沒有要用到,能不能關閉?此外, 這些服務能不能僅開放給部分的來源使用而不是對整個 Internet 開放?這都是需要瞭解的呢。 底下我們就以幾個小案例來讓你瞭解一下,到底哪些資料是你必須要熟悉的呢?

例題-不同 runlevel 的服務控管
在目前的 runlevel 之下,取得預設啟動的服務有哪些呢?此外,我的系統根本沒有 isdn 與藍芽裝置, 我不想要啟動這兩個服務的話,該如何處理?
答:
預設的 runlevel 可以使用 runlevel 這個指令來處理,那我們預設使用 5 號的 runlevel ,因此你可以這樣做:
[root@www ~]# LANG=C chkconfig --list | grep '5:on'
上面指令的輸出訊息中,會有 isdn 與 bluetooth 兩個服務是在啟動的狀態,如果想要關閉他,可以這樣做:
[root@www ~]# chkconfig isdn off
[root@www ~]# chkconfig bluetooth off
[root@www ~]# /etc/init.d/isdn stop
[root@www ~]# /etc/init.d/bluetooth stop

上面提到的僅只是有啟動的服務,如果我想要瞭解到啟動監聽 TCP/UDP 封包的服務 (網路封包格式下章會談到),那該如何處理? 可以參考底下這個練習題喔!

例題-查詢啟動在網路監聽的服務
我想要檢查目前我這部主機啟動在網路埠口監聽的服務有哪些,並且關閉不要的程式,該如何進行?
答:
網路監聽的埠口分析,可以使用如下的方式分析到:
[root@www ~]# netstat -tulnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address   Foreign Address State   PID/Program name
tcp        0      0 127.0.0.1:2208  0.0.0.0:*       LISTEN  2032/hpiod
tcp        0      0 0.0.0.0:738     0.0.0.0:*       LISTEN  1828/rpc.statd
tcp        0      0 0.0.0.0:111     0.0.0.0:*       LISTEN  1796/portmap
tcp        0      0 127.0.0.1:631   0.0.0.0:*       LISTEN  2059/cupsd
tcp        0      0 127.0.0.1:25    0.0.0.0:*       LISTEN  2091/sendmail: acce
tcp        0      0 127.0.0.1:2207  0.0.0.0:*       LISTEN  2037/python
tcp        0      0 :::22           :::*            LISTEN  2050/sshd
udp        0      0 0.0.0.0:57814   0.0.0.0:*               2196/avahi-daemon:
udp        0      0 0.0.0.0:732     0.0.0.0:*               1828/rpc.statd
udp        0      0 0.0.0.0:735     0.0.0.0:*               1828/rpc.statd
udp        0      0 0.0.0.0:5353    0.0.0.0:*               2196/avahi-daemon:
udp        0      0 0.0.0.0:111     0.0.0.0:*               1796/portmap
udp        0      0 0.0.0.0:631     0.0.0.0:*               2059/cupsd
udp        0      0 :::52792        :::*                    2196/avahi-daemon:
udp        0      0 :::5353         :::*                    2196/avahi-daemon:
現在假設我想要關閉 avahi-daemon 這個服務以移除該服務啟動的埠口時,應該要如同上題一樣, 利用 /etc/init.d/xxx stop 關閉,再使用 chkconfig 去處理開機不啟動的行為!不過,因為啟動的服務名稱與實際指令可能不一樣, 我們在 netstat 上面看到的 program 項目是實際軟體執行檔,可能與 /etc/init.d/ 底下的服務檔名不同,因此可能需要使用 grep 去擷取資料, 或者透過那好棒的 [tab] 按鍵去取得相關的服務檔名才行。
[root@www ~]# /etc/init.d/avahi-daemon stop
[root@www ~]# chkconfig avahi-daemon off

我們常常會開玩笑說,如果對外開放的軟體沒有更新,那防火牆不過是個屁!所以啦,軟體更新是相當重要的。 在 CentOS 內,我們已經有 yum 來進行線上更新了,你當然可以自己利用更改設定檔來指定 yum 要去查詢的映射站 (mirror site),不過這裡鳥哥建議使用預設的設定值即可,因為系統會主動的判斷較近的映射站 (雖然常常會誤判), 不需要人工微調啦!

例題-利用 yum 進行系統更新
假設你的網路已經通了,目前你想要處理全系統更新,同時需要每天凌晨 2:15 自動進行全系統更新,該如何作?
答:
全系統更新使用 yum update 即可。但是由於 yum update 需要使用者手動輸入 y 去確認真的要安裝,因此在 crontab 裡頭處理相關任務時, 就得要使用 yum -y update 了!
[root@www ~]# yum -y update
# 第一次作會進行非常之久!因為系統真的有些資料要更新嘛!還是得等待的!

[root@www ~]# vim /etc/crontab
15 2 * * * root /usr/bin/yum -y update

那個 crontab 檔案的處理,以及 crontab -e 的指令應用,內容的寫法欄位不太一樣,請自行參考基礎篇的說明去加強學習喔!

在通過了上述的各項設定後,我們的 Linux 系統應該是比較穩定些了,再接著下來,我們要開始來設定資源的保護了! 例如 ssh 這個遠端可登入的服務得要限制住可登入的 IP 來源,以及制訂防火牆規則流程等。 這部份則是本教學文件後續要著重介紹的部分,留待後面章節再來談吧!

程式設計師所撰寫的程式並非十全十美的,所以,總是可能有些地方沒有設計好,因此就造成所謂的『程式漏洞』囉。 程式漏洞所造成的問題有大有小,小問題可能是造成主機的當機,大問題則可能造成主機的機密資料外流, 或者主機的操控權被 cracker 取得。在現今網路發達的年代,程式的漏洞問題是造成主機被攻擊、入侵的最主要因素之一了。 因此,快速、有效的針對程式漏洞進行修補,是一個很重要的維護課題。

1.2.2-5 伺服器軟體設定:學習設定技巧與開機是否自動執行

這部份就是整個伺服器架設篇的重要內容了!前一小節也曾談過,在伺服器架設部分你得要熟悉相當多的資訊, 否則未來維護會顯的很麻煩。我們以本章提到的大前提為例,我們想要提供一個網路磁碟機,那麼網路磁碟機使用的機制有哪些呢? 常見的除了網頁形式的分享磁碟之外,還有常見的網芳以及 Linux 的 NFS 方式 (後面章節都會繼續談到)。

由於假設區域網路內的作業系統大部分是 Windows 好了,因此網芳應該是個比較合理的磁碟分享選擇。 那麼網芳到底啟動了多少個埠口?是如何持續提供網芳資料的?提供的帳號有沒有限制?提供的權限該如何設定? 是否可規定誰可登入某些特定目錄?針對網芳服務的埠口該如何設定防火牆?如果系統出錯該如何查詢錯誤資訊? 這個網芳在 Linux 底下要使用什麼服務來達成?這都是需要學習的呢!

直接告訴你,網芳的製作在 Linux 底下是由 Samba 這套軟體來達成的。Samba 的詳細設定我們會在後續章節介紹。 這裡要告訴你的是, 架設一個網芳伺服器,你應該要會的基礎知識有哪些?以及告訴你,你可以背下來的架設流程中, 理論上應該要經過哪些步驟的過程,這樣對你未來處理伺服器設定時,才會有點幫助啊!

  1. 軟體安裝與查詢

    剛剛我們已經知道網芳需要安裝的是 Samba 這套軟體,那麼該如何查詢有沒有安裝呢?如果沒有安裝又該如何安裝呢? 那就來處理處理。

    例題:
    查出你的系統底下有沒有 samba 這套軟體,若無,請自行查詢與安裝該軟體
    答:
    已安裝的軟體可以使用 rpm 去察看看,尚未安裝的則使用 yum 功能。所以可以這樣進行看看:
    [root@www ~]# rpm -qa | grep -i samba
    samba-3.0.33-3.29.el5_5
    system-config-samba-1.2.41-5.el5
    samba-common-3.0.33-3.29.el5_5
    samba-client-3.0.33-3.29.el5_5
    # 看起來是已經安裝成功囉!如果沒有看到上述的特殊字體時,就要這樣做:
    
    [root@www ~]# yum search samba  <==先查一下有沒有相關的軟體
    [root@www ~]# yum install samba <==找到之後,那就安裝吧!
    
    # 那麼如何找出設定檔呢?因為我們總是需要修改設定檔啊!這樣做吧:
    [root@www ~]# rpm -qc samba samba-common
    /etc/logrotate.d/samba
    /etc/pam.d/samba
    /etc/rc.d/init.d/smb
    /etc/samba/smbusers
    /etc/sysconfig/samba
    /etc/samba/lmhosts
    /etc/samba/smb.conf
    /etc/security/pam_winbind.conf
    

  2. 伺服器主設定與相關設定

    這部份可就麻煩了!因為你得要瞭解到,你到底需要的服務是什麼,針對該服務需要設定的項目有哪些? 這些設定需要用到什麼指令或設定檔等等。一般來說,你得要先察看這個服務的通訊協定是啥,然後瞭解該如何設定, 接下來編輯主設定檔,根據主設定檔的資料去執行相對應的指令來取得正確的環境設定。以我們這裡的網芳為例, 我們需要設定工作群組,然後需要設定可以使用網芳的身份為非匿名,接下來就能夠開始處理主設定檔。 因此你需要有:

    1. 先使用 vim 去編輯 /etc/samba/smb.conf 設定檔;
    2. 利用 useradd 建立所需要的網芳實體用戶;
    3. 利用 smbpasswd 建立可用網芳的實體帳戶;
    4. 利用 testparm 測試一下所有資料語法是否正確;
    5. 檢查看看在網芳內分享的目錄權限是否正確。

    這些設定都搞定之後,才能夠繼續進行啟動與觀察的動作呦!而想要瞭解更多關於 samba 的相關設定技巧與應用, 除了 google 大神之外, /usr/share/doc 內的文件,以及 man 這個好用的傢伙都必須要去閱讀一番!

  3. 伺服器的啟動與觀察

    在設定妥當之後,接下來當然就是啟動該伺服器了。一般伺服器的啟動大多是使用 stand alone 的模式, 如果是比較少用的服務,如 telnet ,就比較有可能使用到 super daemon 的服務啟動類型。我們這裡依舊使用 samba 為例, 來瞧瞧如何啟動他吧!

    例題:
    如何啟動 samba 這個服務呢?並且設定好開機就啟動他!
    答:
    想要瞭解如何啟動,得要使用 rpm 去找一下軟體的啟動方式,然後再去處理啟動的行為囉!
    # 先查詢一下啟動的方式為何:
    [root@www ~]# rpm -ql samba | grep '/etc'
    /etc/logrotate.d/samba
    /etc/pam.d/samba
    /etc/rc.d/init.d/smb   <==所以說是 stand alone 且檔名為 smb 喔!
    /etc/samba/smbusers
    /etc/sysconfig/samba
    
    # 開始啟動他!且設定開機就啟動喔!:
    [root@www ~]# /etc/init.d/smb start
    [root@www ~]# chkconfig smb on
    
    # 接下來,讓我們觀察一下有沒有啟動相關的埠口吧!
    [root@www ~]# netstat -tlunp | grep '[sn]mbd'
    tcp   0   0 0.0.0.0:139          0.0.0.0:*   LISTEN   7893/smbd
    tcp   0   0 0.0.0.0:445          0.0.0.0:*   LISTEN   7893/smbd
    udp   0   0 192.168.201.111:137  0.0.0.0:*            7896/nmbd
    udp   0   0 0.0.0.0:137          0.0.0.0:*            7896/nmbd
    udp   0   0 192.168.201.111:138  0.0.0.0:*            7896/nmbd
    udp   0   0 0.0.0.0:138          0.0.0.0:*            7896/nmbd
    
    最終我們可以看到啟動的埠口有 137, 138, 139, 445 喔!

  4. 用戶端的連線測試

    接下來就是要找一部機器做為用戶端,然後嘗試使用本機器提供的網芳功能啊!這樣才能夠瞭解設定是對還是錯! 相關的用戶端連線與伺服器提供的服務有關,例如 WWW 伺服器就要使用 browser 去測試,網芳當然就得要使用網芳用戶端程式囉!這部份也是本伺服器篇要講的基本內容啦!

    但是很多時刻,用戶端連線測試不成功並非是伺服器設定的問題,很多是用戶端使用方式不對! 包括用戶端自己的防火牆沒開啦,用戶端的帳號權限密碼等等記錯啦等等的,問題很大啦! 總體來說:『教育你的 Client 使用者具有最最基礎的 Linux 帳號、群組、檔案權限等概念,才是一個徹底解決問題的方法』,但這也是最難的部分...

  5. 錯誤克服與觀察登錄檔

    一般來說,如果 Linux 上面的服務出現問題時,通常會在螢幕上面直接告訴你錯誤的原因為何,所以你得要注意螢幕訊息。 老實說,螢幕訊息通常就已經告訴你該如何處理了。如果還不能處理呢?你可以這樣處置看看:

    • 先看看相關登錄檔有沒有錯誤訊息,舉例來說, samba 除了會在 /var/log/messages 裡面列出訊息外, 大部分的訊息應該是擺放在 /var/log/samba/ 這個目錄下的資料,因此你就得先去查閱一番。通常在登錄檔內的資訊, 會比在螢幕上的還要仔細,那你就可以自行處理完畢了;
    • 將訊息帶入 Google 查詢,通常可以解決登錄檔出現的但是你沒有辦法克服的問題喔!達成率可達 95% 以上吧!
    • 還是不成功,那就到各大討論區去發問吧!建議到酷學園 (http://phorum.study-area.org)

    最常出現的其實是 SELinux 的錯誤啦!此時就得要使用 SELinux 的方法來嘗試處理囉! 這也是本伺服器篇後續會稍微提到的內容。

經過上面的流程,你就可以知道啦,架設好一部主機需要知道:(1)各個 process 與 signal 的觀念;(2)帳號與群組的觀念與相關性;(3)檔案與目錄的權限,這當然包含與帳號相關的特性; (4)套件管理員的學習;(5)BASH 的語法與 shell scripts 的語法,還有那個很重要的 vim 囉!:(6)開機的流程分析,以及記錄登錄檔的設定與分析;(7)還得知道類似 quota 以及連結檔等等的概念。要知道的真的很多,而且還是不能省略的步驟喔!


1.2.2-6 細部權限與 SELinux

如果有些特殊的使用情況時,權限設定就是個很重要的因素。舉例來說,我們系統上面,現在有 vbirduser{1,2,3,4,5} 以及 student 等帳號,而共享目錄為 /home/vbirdgroup。現在, vbirdgroup 的群組想要讓 student 這個用戶可以進入該共享目錄查閱, 但是不能夠更改他們原本的資料,你該如何進行呢?你或許可以這樣想:

傳統的身份與權限概念就只有上面兩種解決方案而已,這下子嚴重了!我們沒有辦法針對 student 進行權限設定! 此時就得要使用 ACL 囉∼同樣這個例子,我們就來實作一下:

例題-單一用戶、群組的權限設定 ACL
想要讓 student 可以進入 /home/vbirdgroup 進行查詢,但不可寫入。同時 vbirduser5 在 /home/vbirdgroup 內, 不具有任何權限。
答:
只能使用 ACL 囉!由於安裝時預設格式化就加上 acl 的檔案系統功能支援,因此你可以直接處理如下的各項指令。 如果你是使用後來新增的 partition 或 filesystem ,或許得要在 /etc/fstab 內額外增加 acl 控制參數才行喔!
[root@www ~]# setfacl -m u:student:rx /home/vbirdgroup
[root@www ~]# setfacl -m u:vbirduser5:- /home/vbirdgroup
[root@www ~]# getfacl /home/vbirdgroup
# file: home/vbirdgroup
# owner: root
# group: vbirdgroup
user::rwx
user:student:r-x    <==就是這兩行,額外的權限參數哩!
user:vbirduser5:---
group::rwx
mask::rwx
other::---
[root@www ~]# ll -d /home/vbirdgroup
drwxrws---+ 2 root vbirdgroup 4096  7月 13 11:11 /home/vbirdgroup

上面說的是正確的權限控制行為。那萬一系統管理員不是個東西...不是啦!系統管理員並不知道權限的重要性時, 常常會因為某些特殊需求,就將整個目錄設定為 777 的情況!舉例來說,如果是一個不怎麼想要負責的網管人員, 為了自己方便、大家方便,就將 /home/vbirdgroup 設定為 777 ,這樣『大家歡喜』嘛!此時,如果你沒有加上任何管理機制, 嘿嘿!這個群組成員工作的成果,通通可以被大家所竊取,真是要命了!

為了預防這種心不在焉的管理員,於是就有了 SELinux 這個玩意兒。SELinux 主要在控制細部的權限, 他可以針對某些程序要讀取的檔案來設計 SELinux 類別,當程序與檔案的類別形態可以相符合時,該檔案才能夠開始被讀取。 如此一來,當你設定檔案權限為 777 ,但是因為程序與檔案的 SELinux 例行不符,所以沒關係的,因為該程序還是讀不到該檔案! 所以我們在圖 1.2-1 才會將 SELinux 的圖示繪製到 daemon 與 file permission 中間啊!

事實上 SELinux 還挺複雜的,但是我們如果僅是想要應用而已,那麼 SELinux 的處理方式通通可以透過登錄檔來處置! 所以 SELinux 出現問題的機會非常大,但是解決技巧卻很簡單!就是透過登錄檔內的說明去作即可。 詳細的作法我們在後續章節再持續說明吧!


1.2.3 系統安全與備份處理

老實說,在鳥哥管理伺服器的經驗來說,硬體問題要比作業系統與軟體問題還來的嚴重,而人的問題又比硬體問題嚴重! 舉例來說,如果你的老闆跟你說:『我要的帳號是 eric ,而且我的密碼也要是 eric !這樣比較好記嘛!』 你應該要怎麼處理呢?『果然需要再教育』!教育誰?教育自己啦!是要忍耐還是要說服老闆別這樣∼好討厭的感覺吧!

因此,在系統安全方面,首要的工作是透過日常生活的社交活動中,慢慢透露一些資安方面的困擾, 並提供老闆一些制訂資安規則方面的資訊,這樣未來比較好鼓吹資安條件的制訂。我們就先由嚴格的密碼來建議吧:

『猜密碼』仍是一個不可忽視的入侵手段!例如 SSH 如果對 Internet 開放的話,你又沒有將 root 的登入權限關閉,那麼對方將可能以 root 嘗試登入你的 Linux 主機,這個時候對方最重要的步驟就是猜出你 root 的密碼了!如果你 root 的密碼設定成『1234567』哈哈!想不被入侵都很難∼ 所以當然需要嚴格的規範使用者密碼的設定了!那麼如何規範嚴格的密碼規則呢?可以藉由 (1)修改 /etc/login.defs 檔案裡面的規則,以讓使用者需要每半年更改一次密碼,且密碼長度需要長於 8 個字元呢!(2)利用 /etc/security/limits.conf 來規範每個使用者的相關權限,讓你的 Linux 可以較為安全一點點∼(3)利用 pam 模組來額外的進行密碼的驗證工作。

另外,雖然『防火牆無用論』常常被提及,但是 netfilter (Linux 的核心內建防火牆) 其實仍有他存在的必要。 因此你還是得就要你自己的主機環境來設計專屬於自己的防火牆規則,例如上面提到的 SSH 服務中, 你可以僅針對某個區域網路或某個特定 IP 開放連線功能即可啊!

最後,備份是不可忽略的一環。本節開頭就講到了,鳥哥遇過常常莫名其妙自動重開機或系統不穩的,經常都不是被攻擊, 而是硬體內部的電子零件老化所造成的系統不穩定...此時,異地備援啦、備用機器的接管理等等的,就很重要囉! 而你總不想要因為硬碟掛點導致資料『害害去』,所以囉,備份就真他X的重要囉!

例題:
系統上比較重要的目錄有 /etc, /home, /root, /var/spool/mail 等,你現在想要在每天 2:45am 進行備份,且備份資料存到 /backup 內, 備份的舉動使用 tar ,那該如何處理?
答:
鳥哥通常是使用 shell script 來進行備份資料的彙整,範例如下:
[root@www ~]# mkdir /root/bin; vim /root/bin/backup.sh
#!/bin/bash
backdir="/etc /home /root /var/spool/mail"
basedir=/backup
[ ! -d "$basedir" ] && mkdir $basedir
backfile=$basedir/backup.tar.gz
tar -zcvf $backfile $backdir

[root@www ~]# vim /etc/crontab
45 2 * * * root sh /root/bin/backup.sh

無論如何,以現今的網路功能及維護來看,架設一個『功能性強』的主機, 還不如架設一個『穩定且安全的主機』比較好一點!因此,對於主機的安全要求就需要嚴格的要求啦!就鳥哥的觀點來看, 如果你的主機是用來替你賺錢的,例如某些研究單位的大型 Cluster 運算主機, 那麼即使架設一個甚至讓你覺得很不方便的防火牆系統,都是合理的手段!因為主機被入侵就算了,若資料被竊取,呵呵! 那可不是鬧著玩的!

由上面的整個架站流程來看,由規劃到安裝、主機設定、帳號與檔案權限管理、後續安全性維護與管理以及重要的備份工作等等, 必需要每個環節都很清楚,才能夠設定出一個較為穩定而可正常工作的伺服器。而上面的每一個工作都涉及到相當多的 Linux 基礎操作與相關的概念,所以說,想要學架站,真的真的不能省略了 Linux 的基礎學習, 這也是為什麼我們一再強調 Linux 新手不要一頭栽入想要單純架設伺服器的迷思當中吶! 如果你對於上面談到的幾個基礎概念不是很清楚的話,那麼建議你由底下的兩個網站學起:


1.3 自我評估是否已經具有架站的能力

網管人員需要什麼能力呢?我想,架幾個站跟作一個稱職的網管人員, 相差是甚遠的!架站,說真的,是一件很簡單的事情,看著書本一步一步的作上去,一定可以成功的!但是,很多人都只曉得 『如何架站』卻不知到『如何維護一個網站的安全』!基本上, 維護一個已經架設好的網站的正常運作,真的要比架設一個網站難的多了!你得要隨時知道你的系統狀況, 隨時注意是否有新的套件漏洞而去修補他,隨時要注意各種服務的登錄檔案(logfile)以瞭解系統的運作情況! 得知道發生問題的時候,到底問題點是在哪一個!

比如說當機了,那麼你知道當機的原因嗎? 即使不知道,也可得需要約略猜得出來才行。而,如果安全出了問題,被入侵了,除了 format + 重灌之外,可有辦法在不移除系統的情況下修補漏洞? 這些都是網管人員需要學習的,而且,通常都是需要經驗的累積才會知道問題的所在! 此外,保持身心的活力以隨時注意線上公布的安全防備資訊等等!都需要具備的!

此外,最嚴重的問題是,網管人員其實最需要的是 『道德感與責任感』!你可要曉得你的機器上所有人的隱私都在你的監控之下, 如果你本身就已經有偷窺慾了,可知道這有多可怕嗎?另外,如果沒有責任感的人作為一個網管, 可能會瘋掉,因為不論何時何地,只要是你監控的主機出了問題,嘿嘿嘿嘿,你一定是第一個被想到的人物, 所以,你得隨時隨地做好可能隨時會被召喚回主機跟前的心理準備!

更可笑的是,如果你服務的人群中, 有幾個連開機的時候軟碟機塞了一塊不可開機的軟碟,導致無法正常開機, 也都會跟你抱怨說『唉呦!你經手的電腦怎麼這麼爛,動不動就不能開機』的時候, 你得要有容人的雅量,說說冷笑話解解悶吧!總之,網管人員並不是只要會架站就可以了, 『道德感』『責任感』還有『耐心』呵呵!套一句現在人喜歡說的口頭禪『這是一定要的啦!』

網管人員是什麼? 好久以前看到了報紙的一篇報導, 內容大概是說:臺灣的網路管理人員對於『網路安全性防護』的認知不夠,或許是防火牆機制建立不完整, 或者是認為駭客不會入侵小型網站,所以在不甚瞭解的情況下,被所謂的『中東駭客組織』所入侵, 然後以臺灣被入侵的電腦為跳板,去攻擊賓拉登的仇敵美國,然後引起美國高度的不滿。由於臺灣的立場有點得罪不得美國 ( 這邊不提及政治因素,反正目前的情況是這樣。 ) ,所以一接到美國來的抗議信函就很棘手。 這只是一個事件問題,不過這個事件問題也點出了一個重點,就是我們的網路資訊可能真的是蠻發達的, 不過,管理網路的人員可能在認知的程度上就有點參差不齊了!網路安全是蠻重要的,只是, 大家常常會忘記他!個人認為,網管是蠻重要的角色,應該不能等閒視之才對。

好了,如果你瞭解了上面小弟所想要表達的意念之後,來評估看看你是否適合當一個稱職的網管人員吧!
  1. 是否具有 Linux 的基礎概念
    這當然包含很多部分,例如帳號管理、BASH、權限的概念、Process 與 signal 的概念、簡易的硬體與 Linux 相關性 (如 mount)的認識、登錄檔案的解析、daemon 的認識等等,都需要有一定程度的瞭解;

  2. 是否具備基礎網路知識
    沒有網路知識想要架站,那是天方夜譚!請確認你已經熟悉 IP, Netmask, route, DNS, daemon 與 port, TCP 封包的概念等基本知識;

  3. 是否已經身心活化了
    網管人員必須要隨時注意網站的相關資訊,這包括網站套件的漏洞修補、 網路上公告的網路安全通報等等,還有,得要每日分析主機的登錄檔, 你是否已經具備了隨時注意這些資訊的『耐心』呢?

  4. 是否具有道德感與責任感
    如果還是具有一點點的偷窺慾,再加油吧!^_^ ,另外,如果老闆想要請你『偷窺』時,請想盡任何方法,讓他理解這麼做是多麼的可笑∼

當然,一再強調的,架設一個 Linux 伺服器是很簡單的,但是維護的工作除了身心已經活化, 並且還要擁有高標準的道德感,否則.....倒站恐怕是可以預見的一個後果.....


1.4 本章習題

2003/07/30:第一次完成日期!
2003/08/19:加入了課後練習,如果你無法回答上面的問題.....不要懷疑,趕緊回去參考 Linux 基礎篇!
2003/09/06:加入課後練習的參考用解答
2006/02/07:將原本的舊文移到此處
2006/06/06:將 SATA 介面的硬碟代號再次做個修訂!目前 SATA 的格式有分兩種呢!
2007/01/02:將一些排版重整,將一些日期方面的資料重整,將課後練習補上來
2010/05/07:將 CentOS 4.x 為底的舊文章移動到 此處
2010/07/22:重新設計伺服器安裝流程,並且在每個基礎資料都加上練習!尤其是全新安裝一部 server 以供使用!