伺服器架設篇 - CentOS 6.x

第一章、架設伺服器前的準備工作

『架設伺服器』是學習 Linux 的新手最想要進行的工作!但是,不瞭解 linux 的基礎就進行伺服器架設,可能會死的很 慘~在這篇文章中,我們會以簡單的說明告訴大家為何需要學好 Linux 基礎後,才能架設伺服器啊!

最近更新時間: 2011/07/14

很多朋友因為自身或服務單位的需求,總是有架設各種網路伺服器的時刻,這個時候大多數的前輩都會推薦他們使用 Linux 做為伺服器架設的作業系統。但因為這些朋友很多都沒有受過 Linux 作業系統操作方面的訓練,因此總覺得反正都是作業系統,所以 Linux 應該也跟 Windows 差不多吧!那麼就硬著頭皮使用圖形介面去設定好眾多的伺服器,也有可能參考網路上一些文章, 即使是透過文字介面去設定,也能夠很輕鬆的作好伺服器的架設。問題是,這樣的一部伺服器是很容易被綁架的, 而且,如果網路不通,你如何自行將問題克服 (trouble shooting)?難道出問題只能無語問蒼天?

所以囉,除非你只是暫時需要架設網路伺服器,可以請朋友或其他資訊公司幫你忙,如果你本身就是資訊方面的服務提供者, 那鳥哥建議你在進行伺服器實務設定之前,看一看這篇,試試看你到底有沒有具備網路伺服器的設定技能了呢?

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 系統的除錯訊息,那麼難道只能無語問蒼天?不要懷疑這種情況的可能性, 參考一下各大論壇上面的留言就可以很清楚的知道這種情況的存在有越來越明顯的趨勢呢!

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

Tips 鳥哥 舉例來說,鳥哥在 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 相關技能吧! ^_^。

Tips 鳥哥 在這一章當中,鳥哥不再就 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 一個常見的伺服器設定案例分析

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

  • 網路環境:假設你的環境裡面 (不管是家裡還是宿舍) 共有五部電腦,這五部電腦需要串接在一起,且都可以對外連線;
  • 對外網路:你的環境只有一個對外的連線方式,這裡假設是台灣較流行的 ADSL 或 10M 的光纖這種透過電話線撥接的類型;
  • 額外服務:你想要讓這五部電腦都可以上網,而且其中還有一部可以做為網路磁碟機,提供同學或家人作為資料備份與分享之用;
  • 伺服器管理:由於你可能需要進行遠端管理,因此你這部伺服器得要開放連線機制,以讓遠端電腦可以連線到這部主機來進行維護;
  • 防火牆管理:因為擔心這部做為檔案分享伺服器的系統被攻擊,因此你需要針對 IP 來源進行登入權力的控制;
  • 帳號管理:另外,由於同學的資料有隱密與共享之分,因此你還得要提供每個同學個別的帳號, 且每個帳號都有磁碟容量的使用限制;
  • 後端分析:最後,由於擔心系統出問題所以你得要讓系統自動定期分析磁碟使用量、登錄檔參數資訊等等。

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

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

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

預設配置如下:
  • 分割表請依如下方式進行:
    • /  : 2GB
    • /boot: 200MB
    • /usr : 4GB
    • /var : 2GB
    • /tmp : 1GB
    • swap : 1GB
    • /home: 5GB,並且使用 LVM 模式建置
    • 其他容量請保留,未來再來進行額外練習!
  • 軟體挑選時,請選擇『 basic server 』項目即可;
  • 資訊安全部分,防火牆選擇啟動,SELinux 選擇強制 (Enforce);
  • 假設 IP 分享器有自動分配 IP 的功能,所以網路參數先選擇 DHCP 即可,未來再自己修改。
實際流程大致如下 (鳥哥以 CentOS 6.0 為例說明)
  1. 由於我們使用光碟機開機來安裝系統,因此得先進入 BIOS ,選擇光碟機開機,並且將 CentOS 6.x 的 DVD 放入光碟機中;
  2. 在啟動安裝的畫面中,選擇『Install or upgrade an existing system』來安裝新系統;
  3. 出現『 Disc Found 』字樣,此時建議可以選擇『 Skip 』即可略過;
  4. 在歡迎畫面以滑鼠點選『 Next 』;
  5. 語系資料可以選擇『Chinese(Traditional)(中文(正體))』;
  6. 鍵盤格式保留『美式英文』即可;
  7. 安裝包含的裝置類型,直接選擇預設的『基本儲存裝置』即可;
  8. 因為我們是全新的硬碟,因此會出現一個找不到分割表的錯誤,此時選擇『重新初始化』即可;
  9. 進入網路主機名稱的設定,先保留『localhost.localdomain』即可。 同畫面中還有一個『配置網路』的選項,我們先不要動他!等未來談到網路設定再來處理即可;
  10. 進入時區選擇,請選擇『亞洲/台北』即可;
  11. 出現 root 密碼製作,這裡我們先設定為『 centos 』吧! 這個密碼太簡單,系統會出現警告,你選擇『照樣使用』即可。你也可以自行設定其他密碼;
  12. 出現哪一類型安裝的模式,因為我們有自己的分割考量,所以,請選擇『建立自訂分割格式』來處理喔!
  13. 在出現分割畫面中,先點選『sda』項目,然後點選『建立』的按鈕,在出現的視窗中, 再點選『標準分割區』項目,然後點『建立』。 在最後的視窗中填寫掛載點、容量等資訊後,最終按下『確定』即可。最終畫面有點像這樣:
    分割的參數下達示意圖
    圖 1.2-3、分割的參數下達示意圖

  14. 依據前面的分割規劃,持續進行上述的動作,將所有的分割都處理完畢,除了 /home 之外。
  15. 由於 /home 想要使用 LVM 的方式來建立檔案系統,因此點選『建立』後,選擇『LVM 實體卷冊』項目,按下建立,在出現的分割視窗中容量填寫 5GB,示意圖有點像這樣:
    分割出 LVM 分割槽的方式
    圖 1.2-4、分割出 LVM 分割槽的方式

    接下來回到原本的分割畫面後,按下『建立』並選擇『LVM 卷冊群組』項目, 在出現的視窗中,卷冊群組名稱填寫『server』,並且在右下方的邏輯卷冊部分按下『新增』, 又會額外出現一個視窗,此時就填入 /home 的相關參數啦!注意,邏輯卷冊我們這裡設定為 myhome 喔! 畫面有點像底下這樣:
    建立最終的 LVM 的 LV 與 /home
    圖 1.2-5、建立最終的 LVM 的 LV 與 /home

    回到原本的分割畫面,最終的顯示有點像底下這樣,然後請按下『下一步』繼續。 但由於新建分割需要格式化,所以又會出現一個警告視窗!沒問題的,選擇『格式化』以及『將變更寫至磁碟』吧!
    分割的最終結果
    圖 1.2-6、分割的最終結果

  16. 出現開機載入程式作業,都使用預設值即可,請按『下一步』;
  17. 出現安裝類型,因為我們主機的角色為伺服器,因此選擇『Basic Server』項目! 其他項目保留預設,然後按下『下一步』就開始進行安裝程序囉!
  18. 經過一段時間的等待,出現重新開機後,你就重新開機吧!喔!要記得將 DVD 拿出來喔!(怪異的是,鳥哥第一次安裝後, 竟然發現電源管理有問題,得在 kernel 處增加 noapic 才能順利開機呢!)
  19. 裝好並重新開機後,就會進入 runlevel 3 的純文字介面!因為是伺服器嘛!

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

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

例題-大量建置帳號
假設我的五個朋友帳號分別是 vbirduser{1,2,3,4,5},且這五個朋友未來想要共享一個目錄,因此應該要加入同一個群組,假設這個群組為 vbirdgroup,且這五個帳號的密碼均為 password 。那該如何建置這五個帳號?
答:
你可以寫一支腳本程式來進行上述的工作喔!
[root@localhost ~]# mkdir bin
[root@localhost ~]# cd /root/bin
[root@localhost bin]# 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@localhost bin]# sh useradd.sh
[root@localhost bin]# 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@localhost ~]# mkdir /home/vbirdgroup
[root@localhost ~]# chgrp vbirdgroup /home/vbirdgroup
[root@localhost ~]# chmod 2770 /home/vbirdgroup
[root@localhost ~]# ll -d /home/vbirdgroup
drwxrws---. 2 root vbirdgroup 4096 2011-07-14 14:49 /home/vbirdgroup/
# 上面特殊字體的部分就是你需要注意的部分囉!特別注意那個權限的 s 功能喔!

例題-Quota 實作:
假設這五個用戶均需要進行磁碟配額限制,每個用戶的配額為 2GB (hard) 以及 1.8GB (soft),該如何處理?
答:
這一題實作比較難,因為必須要包括檔案系統的支援、quota 資料檔案建置、quota 啟動、建立使用者 quota 資訊等過程。 整個過程在基礎篇有講過了,這裡很快速的帶領大家進行一次吧!
# 1. 啟動 filesystem 的 Quota 支援
[root@localhost ~]# vim /etc/fstab
UUID=01acf085-69e5-4474-bbc6-dc366646b5c8 /      ext4  defaults  1 1
UUID=eb5986d8-2179-4952-bffd-eba31fb063ed /boot  ext4  defaults  1 2
/dev/mapper/server-myhome /home       ext4  defaults,usrquota,grpquota  1 2
UUID=605e815f-2740-4c0e-9ad9-14e069417226 /tmp   ext4  defaults  1 2
....(底下省略)....
# 因為是要處理使用者的磁碟,所以找到的是 /home 這個目錄來處理的啊!
# 另外,CentOS 6.x 以後,預設使用 UUID 的磁碟代號而非使用檔名。
# 不過,你還是能使用類似 /dev/sda1 之類的檔名啦!
[root@localhost ~]# umount /home; mount -a
[root@localhost ~]# mount | grep home
/dev/mapper/server-myhome on /home type ext4 (rw,usrquota,grpquota)
# 做完使用 mount 去檢查一下 /home 所在的 filesystem 有沒有上述的字眼!

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

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

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

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

例題-檔案系統的放大 (LVM)
純粹假設的,我們的 /home 不夠用了,你想要將 /home 放大到 7GB 可不可行啊?
答:
因為當初就擔心這個問題,所以 /home 已經是 LVM 的方式來管理了。此時我們要來瞧瞧 VG 夠不夠用,如果夠用的話, 那就可以繼續進行。如果不夠用呢?我們就得要從 PV 著手囉!整個流程可以是這樣來觀察的。
# 1. 先看看 VG 的量夠不夠用:
[root@localhost ~]# vgdisplay
  --- Volume group ---
  VG Name               server
  System ID
  Format                lvm2
....(中間省略)....
  VG Size               4.88 GiB  <==只有區區 5G左右
  PE Size               4.00 MiB
  Total PE              1249
  Alloc PE / Size       1249 / 4.88 GiB
  Free  PE / Size       0 / 0     <==完全沒有剩餘的容量了!
  VG UUID               SvAEou-2quf-Z1Tr-Wsdz-2UY8-Cmfm-Ni0Oaf
# 真慘!已經沒有多餘的 VG 容量可以使用了!因此,我們得要增加 PV 才行。

# 2. 開始製作出所需要的 partition 吧!作為 PV 用的!
[root@localhost ~]# fdisk /dev/sda  <==詳細流程我不寫了!自己瞧

Command (m for help): p
   Device Boot      Start    End      Blocks   Id  System
....(中間省略)....
/dev/sda8            1812   1939     1024000   83  Linux <==最後一個磁柱

Command (m for help): n
First cylinder (1173-3264, default 1173): 1940  <==上面查到的號碼加 1
Last cylinder, +cylinders or +size{K,M,G} (1940-3264, default 3264): +2G

Command (m for help): t
Partition number (1-9): 9
Hex code (type L to list codes): 8e

Command (m for help): p
   Device Boot  Start    End   Blocks  Id  System
/dev/sda9        1940   2201  2104515  8e  Linux LVM <==得到 /dev/sda9

Command (m for help): w

[root@localhost ~]# partprobe <==在虛擬機上面得要 reboot 才行!

# 3. 將 /dev/sda9 加入 PV,並將該 PV 加入 server 這個 VG 吧
[root@localhost ~]# pvcreate /dev/sda9
[root@localhost ~]# vgextend server /dev/sda9
[root@localhost ~]# vgdisplay
....(前面省略)....
  VG Size               6.88 GiB       <==這個 VG 最大就是 6.88G 啦
....(中間省略)....
  Free  PE / Size       513 / 2.00 GiB <==有多出 2GB 的容量可用了!

# 4. 準備加大 /home,開始前,還是先觀察一下才增加 LV 容量較好!
[root@localhost ~]# lvdisplay
  --- Logical volume ---
  LV Name                /dev/server/myhome <==這是 LV 的名字!
  VG Name                server
....(中間省略)....
  LV Size                4.88 GiB  <==只有 5GB 左右,需要增加 2GB 囉
....(底下省略)....
# 看起來,是需要增加容量囉!我們使用 lvresize 來擴大容量吧!

[root@localhost ~]# lvresize -L 6.88G /dev/server/myhome
  Rounding up size to full physical extent 6.88 GiB
  Extending logical volume myhome to 6.88 GiB  <==處理完畢囉!
  Logical volume myhome successfully resized
# 看來確實是擴大到 6.88GB 囉!開始處理檔案系統吧!

# 5. 擴大檔案系統
[root@localhost ~]# resize2fs /dev/server/myhome
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/server/myhome is mounted on /home; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/server/myhome to 1804288 (4k) blocks.
The filesystem on /dev/server/myhome is now 1804288 blocks long.

[root@localhost ~]# df -h
檔案系統              Size  Used Avail Use% 掛載點
/dev/mapper/server-myhome
                      6.8G  140M  6.4G   3% /home
....(其他省略)....
# 可以看到檔案系統確實有放大到 6.8G 喔!這樣瞭解了嗎?

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

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

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

例題-不同 runlevel 的服務控管
在目前的 runlevel 之下,取得預設啟動的服務有哪些呢?此外,我的系統目前不想啟動自動網路掛載 (autofs) 機制,我不想要啟動該服務的話,該如何處理?
答:
預設的 runlevel 可以使用 runlevel 這個指令來處理,那我們預設使用 3 號的 runlevel,因此你可以這樣做:
[root@localhost ~]# LANG=C chkconfig --list | grep '3:on'
上面指令的輸出訊息中,會有 autofs 服務是在啟動的狀態,如果想要關閉他,可以這樣做:
[root@localhost ~]# chkconfig autofs off
[root@localhost ~]# /etc/init.d/autofs stop

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

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

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

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

[root@localhost ~]# vim /etc/crontab
15 2 * * * root /usr/bin/yum -y update
不過這裡還是要額外提醒各位喔,如果你的系統有更新過核心 (kernel) 這個軟體,務必要重新開機啊!因為核心是在開機時載入的, 一經載入就無法在這次的操作中更改版本的。

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

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

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

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

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

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

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

  1. 軟體安裝與查詢

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

    例題:
    查出你的系統底下有沒有 samba 這套軟體,若無,請自行查詢與安裝該軟體
    答:
    已安裝的軟體可以使用 rpm 去察看看,尚未安裝的則使用 yum 功能。所以可以這樣進行看看:
    [root@localhost ~]# rpm -qa | grep -i samba
    samba-common-3.5.4-68.el6_0.2.x86_64
    samba-client-3.5.4-68.el6_0.2.x86_64
    samba-winbind-clients-3.5.4-68.el6_0.2.x86_64
    # 看起來 samba 主程式尚未被安裝啊!此時就要這樣做:
    
    [root@localhost ~]# yum search samba  <==先查一下有沒有相關的軟體
    [root@localhost ~]# yum install samba <==找到之後,那就安裝吧!
    
    # 那麼如何找出設定檔呢?因為我們總是需要修改設定檔啊!這樣做吧:
    [root@localhost ~]# rpm -qc samba samba-common
    /etc/logrotate.d/samba
    /etc/pam.d/samba
    /etc/samba/smbusers
    /etc/samba/lmhosts
    /etc/samba/smb.conf
    /etc/sysconfig/samba
    

  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@localhost ~]# rpm -ql samba | grep '/etc'
    /etc/logrotate.d/samba
    /etc/openldap/schema
    /etc/openldap/schema/samba.schema
    /etc/pam.d/samba
    /etc/rc.d/init.d/nmb
    /etc/rc.d/init.d/smb  <==所以說是 stand alone 且檔名為 smb, nmb 兩個!
    /etc/samba/smbusers
    
    # 開始啟動他!且設定開機就啟動喔!:
    [root@localhost ~]# /etc/init.d/smb start
    [root@localhost ~]# /etc/init.d/nmb start
    [root@localhost ~]# chkconfig smb on
    [root@localhost ~]# chkconfig nmb on
    
    # 接下來,讓我們觀察一下有沒有啟動相關的埠口吧!
    [root@localhost ~]# netstat -tlunp | grep '[sn]mbd'
    tcp   0   0 :::139               :::*        LISTEN   1484/smbd
    tcp   0   0 :::445               :::*        LISTEN   1484/smbd
    udp   0   0 0.0.0.0:137          0.0.0.0:*            1492/nmbd
    udp   0   0 0.0.0.0:138          0.0.0.0:*            1492/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 加入 vbirdgroup 群組即可:但如此一來, student 具有 vbirdgroup 的 rwx 權限,也就可以寫入與修改囉, 因此這個方案行不通。

  • 將 /home/vbirdgroup 的權限改為 2775 即可:如此一來 student 擁有其他人的權限 (rx),但如此一來其他所有任何人均擁有 rx 權限,這個方案也行不通。

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

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

[root@localhost ~]# ll -d /home/vbirdgroup
drwxrws---+ 2 root vbirdgroup 4096 2011-07-14 14:49 /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@localhost ~]# 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@localhost ~]# 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 本章習題

  • 本章所安裝的 samba 軟體未來還會使用到,因此請先移除 samba 軟體,並將本章例題中改寫的 /etc/crontab 內容取消 (共兩行)。
    透過 yum remove samba 或 rpm -e samba 均可,然後用 vim /etc/crontab 將那兩行取消吧!
  • 如果我有一顆硬碟在 A 主機上面安裝了 Linux 之後,拿到另一台配備相同的 B 主機上面去進行開機,結果竟然無法順利開機,你認為可能的原因是什麼?
    不能開機常常是因為找不到根目錄的位置,而根目錄找不到通常就是磁碟的裝置檔名錯誤所致。目前由於 /etc/fstab 配合 filesystem 都使用 LABEL name ,所以不容易發生這樣的情況。但如果你曾經自行手動處理過 /etc/fstab 的話,那就必須要注意磁碟的裝置檔名了! 透過修改 /etc/fstab 以及 /boot/grub/menu.lst 或許能夠得到方法解決。
  • 一般來說,在 Linux 系統上,使用者預設的家目錄在那個目錄下?另外,新增一個使用者時, 該使用者預設的家目錄內容來自那個目錄下?
    在 /etc/default/useradd 這個檔案裡面會規範使用者的預設家目錄以及預設家目錄的內容,一般來說,使用者預設家目錄在 /home ,至於家目錄內的檔案則複製來源在 /etc/skel 裡面。
  • 我以原始碼的方式進行一個軟體的安裝,但是在分析系統的時候,分析程式一直告訴我找不到 cc 這個指令,請問這是什麼問題?為何需要 cc ?又,我該如何解決這個問題,好讓軟體可以順利的被安裝在我的 Linux 上面?
    因為是原始碼,所以還需要編譯程式來將該原始碼編譯成為可以在你的 Linux 系統上面跑的 binary 檔案,在 Linux 上頭預設的編譯程式就是 gcc 這個編譯器(compiler)。如果你在安裝 Linux 的時候,使用 Linux Installer 預設的軟體選擇,那通常會沒有安裝 gcc 以及 make 等軟體,此時,請使用 yum 去處理軟體的安裝吧!
  • 我發現我的 Linux 系統怪怪的,似乎有什麼不知名的程序在記憶體當中跑,我該如何將這個不知名的程序捉出來,並且將他移除?
    如果要捉出程序(process)的話,可以使用 ps -aux 或者是直接輸入 top 來查詢 process 的 ID (PID),找到 PID 號碼後,再以 kill -9 PID 來刪除該程序即可。
  • 我總是無法編輯某個檔案,你認為應該是什麼問題造成的?那又要怎麼解決?
    無法編輯某個檔案,可以先使用 file 這個指令來查詢一下該檔案的格式,例如想察看 /etc/shadow 的格式,可以下達: 『file /etc/shadow』,如果是文字檔,卻還是無法編輯,那麼最可能發生的原因就是『權限』的問題了。可以使用 ls -l filename 察看檔案權限,再以 chmod 或 chown 來修訂該檔案的權限。此外,該檔案也可能含有隱藏屬性,可以使用 lsattr filename 查閱,再以 chattr 來修訂隱藏屬性。
  • 你認為一個稱職的網管人員應該具備什麼能力?
    能力需求相當高,如了(1)作業系統的基礎知識(不論是 Linux/Unix/MAC/MS);(2)網路基礎的知識;(3)個別 Internet Services 的運作知識之外,還需要(4)身心保持在備戰狀態,以及(5)具有相當高程度的道德感、責任感與使命感。
  • 我要關掉 cron 這個服務,應該怎麼關掉他?如果正常的方法無法關閉這個服務,可以使用什麼方法來關閉?
    因為 cron 是一個 stand alone 的服務,所以可以使用 /etc/rc.d/init.d/cron stop 來關閉;如果還是無法正常關閉,可以使用 ps -aux | grep cron 捉出該程序的 PID ,然後以 kill -9 PID 來關閉。
  • 如果一開機就要執行某個程式,應該要將該程式寫入那個檔案裡面?
    可以直接在 /etc/rc.d/rc[run-level].d 裡面加入 S 開頭的檔案,不過,更簡單的作法是直接將該程式寫入 /etc/rc.d/rc.local ,不過,請注意該程式必須要具有可執行的權限,且 rc.local 也必須要是可執行喔!
修改歷史:
  • 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 以供使用!
  • 2011/07/14:將原本基於 CentOS 5.x 為底的舊文章移動到此處
  • 2011/07/14:將安裝與設定的資料通通改為 CentOS 6.x 的版本囉!更新真困擾~@_@
2003/07/30以來統計人數
計數器
伺服器篇文件
各版本彙整說明
CentOS 6.x