# 1.2 基本架設服務器流程
## 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](http://linux.vbird.org/linux_basic/0420quota.php#lvm) 之類)? 系統如何管理各項服務之啟動?系統的開機流程為何?系統出錯時,該如何進行快速復原等等,這都需要了解的呢!
4. 內部防火墻設定:管理系統的可分享資源
一部主機可以擁有多種服務器軟件的運作,而很多 Linux distributions 出廠的默認值就已經開放很多服務給 Internet 使用了,不過這些服務可能并不是你想要開放的呢。我們在了解網絡基礎與所需服務的目的之后, 接下來就是透過防火墻來規范可以使用本服務器服務的用戶,以讓系統在使用上擁有較佳的控管情況。 此外,不管你的防火墻系統設定的再怎么嚴格,只要是你要開放的服務, 那防火墻對于該服務就沒有保護的效果。因此,那個重要的在線更新軟件機制就一定要定期進行!否則你的系統將會非常非常的不安全!
5. 服務器軟件設定:學習設定技巧與開機是否自動執行
剛剛第一點就提到我們得要知道每種服務所能達成的功能,如此一來才能夠架設你所需要的服務的網站。 那你所需要的服務是由哪個軟件達成的?同一個服務可否有不同的軟件?每種軟件可以達成的目的是否相同? 依據所需要的功能如何設定你的服務器軟件?架設過程中如果出現錯誤,你該如何觀察與除錯? 可否定期的分析服務器相關的登錄信息,以方便了解該服務器的使用情況與錯誤發生的原因? 能否通知多個用戶進行聯機測試,以取得較佳的服務器設定值?所以這里你可能就得要知道:
- 軟件如何安裝、如何查詢相關配置文件所在位置;
- 服務器軟件如何設定?
- 服務器軟件如何啟動?如何設定自動開機啟動?如何觀察啟動的埠口?
- 服務器軟件激活失敗如何除錯?如何觀察登錄檔?如何透過登錄檔進行除錯?
- 透過客戶端進行聯機測試,如果失敗該如何處理?聯機失敗的原因是服務器還是防火墻?
- 服務器的設定修改是否有建立日志?登錄檔是否有定期分析?
- 服務器所提供或分享的數據有無定期備份?如何定期自動備份或異地備份?
6. 細部權限設定:包括 SELinux 與檔案權限
等到你的服務器全部設定妥當,最后你所提供的檔案數據權限卻是給了『 000 』的權限分數, 那鳥哥很肯定的說,大家都無法讀到你所提供的數據啊...!此外,新的 distributions 都建議你要啟動 [SELinux](http://linux.vbird.org/linux_basic/0440processcontrol.php#selinux) ,那是什么咚咚? 如果你的數據放置于非正規的目錄,那該如何處理 SELinux 的問題?又如何讓檔案具有保密性或共享性 ([檔案權限概念](http://linux.vbird.org/linux_basic/0210filepermission.php)與 [ACL](http://linux.vbird.org/linux_basic/0410accountmanager.php#acl_talk) 等) 等等,這也都是需要厘清的觀念喔!
上述的服務器架設流程中,其實除了第 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 七層協定](http://linux.vbird.org/linux_server/0110network_basic.php#whatisnetwork_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 出問題了,不曉得的朋友就是想破頭也得不到答案。既然知道出問題的地方,就能夠針對該問題去處理嘛!
網絡基礎會影響到你的網絡設定是否正確,這真的很重要吶,因為,如果你的網絡不通,那么即使服務器架設成功了, 別人可以看的到嗎?所以說,要架站,真的得對網絡基礎的部分下一些功夫才行的。關于網絡基礎這部份我們在基礎篇并沒有談過, 所以我們會在[下一章網絡基礎](http://linux.vbird.org/linux_server/0110network_basic.php)時再詳加說明喔!
- - - - - -
### 1.2.2-2 服務器本身的安裝規劃與架站目的的搭配
如同[圖 1.2-2](#fig1.2-2) 所示,Server 端是在那五部計算機之中,而且 Server 必須要提供針對不同賬號給予網絡驅動器機,我們這邊會提供網芳 (SAMBA) 這個服務,因為他可以在 Linux/Windows 之間通用之故。 且由于需要提供賬號給使用者,以及想到未來的磁盤擴充情況,因此我們想要將 /home 獨立出來,且使用 [LVM](http://linux.vbird.org/linux_basic/0420quota.php#lvm) 這個管理模式, 并搭配 [Quota](http://linux.vbird.org/linux_basic/0420quota.php#the_quota) 機制來控制每個賬號的磁盤使用量。
所以說,你得知道 Linux 目錄下的 [FHS (Filesystem Hierarchy Standard)](http://linux.vbird.org/linux_basic/0210filepermission.php#dir) 的規范,否則分割槽給到錯誤的目錄,會造成無法開機!那為什么要將 /home 獨立放入一個分割槽? 那是因為 quota 僅支持 filesystem 而不支持單一目錄啊!好了,如果給你一部全新的主機,那你該如何安裝你的系統呢?
實作題-[全新安裝](http://linux.vbird.org/linux_basic/0157installcentos5.php):請到昆山科大 (<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 的安裝我們已經在[基礎篇](http://linux.vbird.org/linux_basic)內的[第四章](http://linux.vbird.org/linux_basic/0157installcentos5.php)介紹過了,這里我們不再使用圖形接口來說明, 僅使用文字說明來介紹你在每個項目應該處理的動作而已。此外,由讀者們的響應發現,學習者經常只有一部主機, 因此,這里我們建議你使用 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、分割的參數下達示意圖
```
1. 依據前面的分割規劃,持續進行上述的動作,將所有的分割都處理完畢,除了 /home 之外。
2. 由于 /home 想要使用 LVM 的方式來建立文件系統,因此點選『建立』后,選擇『LVM 實體卷冊』項目,按下建立,在出現的分割窗口中容量填寫 5GB,示意圖有點像這樣:
```

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

圖 1.2-5、建立最終的 LVM 的 LV 與 /home
回到原本的分割畫面,最終的顯示有點像底下這樣,然后請按下『下一步』繼續。 但由于新建分割需要格式化,所以又會出現一個警告窗口!沒問題的,選擇『格式化』以及『將變更寫至磁盤』吧!

圖 1.2-6、分割的最終結果
```
1. 出現啟動加載程序作業,都使用默認值即可,請按『下一步』;
2. 出現安裝類型,因為我們主機的角色為服務器,因此選擇『Basic Server』項目! 其他項目保留默認,然后按下『下一步』就開始進行安裝程序啰!
3. 經過一段時間的等待,出現重新啟動后,你就重新啟動吧!喔!要記得將 DVD 拿出來喔!(怪異的是,鳥哥第一次安裝后, 竟然發現電源管理有問題,得在 kernel 處增加 noapic 才能順利開機呢!)
4. 裝好并重新啟動后,就會進入 runlevel 3 的純文本界面!因為是服務器嘛!
- - - - - -
### 1.2.2-3 服務器本身的基本操作系統操作
既然我們這部主機得要提供不同賬號來使用他們自己的網絡驅動器,因此還需要建立賬號啊,使用磁盤配額 (quota) 等等的。 那么你會不會建立賬號呢?你會不會建置共享目錄呢?你能不能處理每個賬號的 Quota 配額呢?如果 /home 的容量不足了, 你會不會放大 /home 的容量呢?有沒有辦法將系統的磁盤使用情況定期的發送郵件給管理員呢?這些都是基本的維護行為喔! 我們底下就以幾個實際例子來練習看看你的基礎能力吧!
例題-[大量建置賬號](http://linux.vbird.org/linux_basic/0410accountmanager.php):假設我的五個朋友賬號分別是 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 這個指令來查詢看看,是否群組的支持是對的啊!
例題-[共享目錄的權限](http://linux.vbird.org/linux_basic/0220filemanager.php#suid_sgid_sbit):這五個朋友的共享目錄建置于 /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](http://linux.vbird.org/linux_basic/0420quota.php#the_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)](http://linux.vbird.org/linux_basic/0420quota.php#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 的服務控管](http://linux.vbird.org/linux_basic/0560daemons.php):在目前的 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 進行系統更新](http://linux.vbird.org/linux_basic/0520rpm_and_srpm.php#yumclient_config)假設你的網絡已經通了,目前你想要處理全系統更新,同時需要每天凌晨 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](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](http://linux.vbird.org/linux_basic/0410accountmanager.php#acl_talk)想要讓 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](#fig1.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 新手不要一頭栽入想要單純架設服務器的迷思當中吶! 如果你對于上面談到的幾個基礎概念不是很清楚的話,那么建議你由底下的兩個網站學起:
- [http://www.study-area.org](http://www.study-area.org/)
- [http://linux.vbird.org](http://linux.vbird.org/)
- - \*
- 鳥哥的Linux私房菜:服務器架設篇 第三版
- 第一部份:架站前的進修專區
- 作者序
- 第一章、架設服務器前的準備工作
- 1.1 前言: Linux 有啥功能
- 1.2 基本架設服務器流程
- 1.3 自我評估是否已經具有架站的能力
- 1.4 本章習題
- 第二章、基礎網絡概念
- 2.1 網絡是個什么玩意兒
- 2.2 TCP/IP 的鏈結層相關協議
- 2.3 TCP/IP 的網絡層相關封包與數據
- 2.4 TCP/IP 的傳輸層相關封包與數據
- 2.5 連上 Internet 前的準備事項
- 2.6 重點回顧:
- 2.7 本章習題
- 2.8 參考數據與延伸閱讀
- 第三章、局域網絡架構簡介
- 3.1 局域網絡的聯機
- 3.2 本書使用的內部聯機網絡參數與通訊協議
- 第四章、連上 Internet
- 4.1 Linux 連上 Internet 前的注意事項
- 4.2 連上 Internet 的設定方法
- 4.3 無線網絡--以筆記本電腦為例
- 4.4 常見問題說明
- 4.5 重點回顧
- 4.6 本章習題
- 4.7 參考數據與延伸閱讀
- 第五章、 Linux 常用網絡指令
- 5.1 網絡參數設定使用的指令
- 5.2 網絡偵錯與觀察指令
- 5.3 遠程聯機指令與實時通訊軟件
- 5.4 文字接口網頁瀏覽
- 5.5 封包擷取功能
- 5.6 重點回顧
- 5.7 本章習題
- 5.8 參考數據與延伸閱讀
- 第六章、 Linux 網絡偵錯
- 6.1 無法聯機原因分析
- 6.2 處理流程
- 6.3 本章習題
- 6.4 參考數據與延伸閱讀
- 第二部分:主機的簡易資安防護措施
- 第七章、網絡安全與主機基本防護:限制端口, 網絡升級與 SELinux
- 7.1 網絡封包聯機進入主機的流程
- 7.2 網絡自動升級軟件
- 7.3 限制聯機埠口 (port)
- 7.4 SELinux 管理原則
- 7.5 被攻擊后的主機修復工作
- 7.6 重點回顧
- 7.7 課后練習
- 7.8 參考數據與延伸閱讀
- 第八章、路由觀念與路由器設定
- 8.1 路由
- 8.2 路由器架設
- 8.3 動態路由器架設:quagga (zebra + ripd)
- 8.4 特殊狀況:路由器兩邊界面是同一個 IP 網段: ARP Proxy
- 8.5 重點回顧
- 8.6 本章習題
- 8.7 參考數據與延伸閱讀
- 第九章、防火墻與 NAT 服務器
- 9.1 認識防火墻
- 9.2 TCP Wrappers
- 9.3 Linux 的封包過濾軟件:iptables
- 9.4 單機防火墻的一個實例
- 9.5 NAT 服務器的設定
- 9.6 重點回顧
- 9.7 本章習題
- 9.8 參考數據與延伸閱讀
- 第十章、申請合法的主機名
- 10.1 為何需要主機名
- 10.2 注冊一個合法的主機名
- 10.3 重點回顧
- 10.4 本章習題
- 10.5 參考數據與延伸閱讀
- 第三部分:局域網絡內常見的服務器架設
- 第十一章、遠程聯機服務器SSH / XDMCP / VNC / RDP
- 11.1 遠程聯機服務器
- 11.2 文字接口聯機服務器: SSH 服務器
- 11.3 最原始圖形接口: Xdmcp 服務的啟用
- 11.4 華麗的圖形接口: VNC 服務器
- 11.5 仿真的遠程桌面系統: XRDP 服務器
- 11.6 SSH 服務器的進階應用
- 11.7 重點回顧
- 11.8 本章習題
- 11.9 參考數據與延伸閱讀
- 第十二章、網絡參數控管者: DHCP 服務器
- 12.1 DHCP 運作的原理
- 12.2 DHCP 服務器端的設定
- 12.3 DHCP 客戶端的設定
- 12.4 DHCP 服務器端進階觀察與使用
- 12.5 重點回顧
- 12.6 本章習題
- 12.7 參考數據與延伸閱讀
- 第十三章、文件服務器之一:NFS 服務器
- 13.1 NFS 的由來與其功能
- 13.2 NFS Server 端的設定
- 13.3 NFS 客戶端的設定
- 13.4 案例演練
- 13.5 重點回顧
- 13.6 本章習題
- 13.7 參考數據與延伸閱讀
- 第十四章、賬號控管: NIS 服務器
- 14.1 NIS 的由來與功能
- 14.2 NIS Server 端的設定
- 14.3 NIS Client 端的設定
- 14.4 NIS 搭配 NFS 的設定在叢集計算機上的應用
- 14.5 重點回顧
- 14.6 本章習題
- 14.7 參考數據與延伸閱讀
- 第十五章、時間服務器: NTP 服務器
- 15.1 關于時區與網絡校時的通訊協議
- 15.2 NTP 服務器的安裝與設定
- 15.3 客戶端的時間更新方式
- 15.4 重點回顧
- 15.5 本章習題
- 15.6 參考數據與延伸閱讀
- 第十六章、文件服務器之二: SAMBA 服務器
- 16.1 什么是 SAMBA
- 16.2 SAMBA 服務器的基礎設定
- 16.3 Samba 客戶端軟件功能
- 16.4 以 PDC 服務器提供賬號管理
- 16.5 服務器簡單維護與管理
- 16.6 重點回顧
- 16.7 本章習題
- 16.8 參考數據與延伸閱讀
- 第十七章、區網控制者: Proxy 服務器
- 17.1 什么是代理服務器 (Proxy)
- 17.2 Proxy 服務器的基礎設定
- 17.3 客戶端的使用與測試
- 17.4 服務器的其他應用設定
- 17.5 重點回顧
- 17.6 本章習題
- 17.7 參考數據與延伸閱讀
- 第十八章、網絡驅動器裝置: iSCSI 服務器
- 18.1 網絡文件系統還是網絡驅動器
- 18.2 iSCSI target 的設定
- 18.3 iSCSI initiator 的設定
- 18.4 重點回顧
- 18.5 本章習題
- 18.6 參考數據與延伸閱讀
- 第四部分:常見因特網服務器架設
- 第十九章、主機名控制者: DNS 服務器
- 19.1 什么是 DNS
- 19.2 Client 端的設定
- 19.3 DNS 服務器的軟件、種類與 cache only DNS 服務器設定
- 19.4 DNS 服務器的詳細設定
- 19.5 協同工作的 DNS: Slave DNS 及子域授權設定
- 19.6 DNS 服務器的進階設定
- 19.7 重點回顧
- 19.8 本章習題
- 19.9 參考數據與延伸閱讀
- 第二十章、WWW 伺服器
- 20.1 WWW 的簡史、資源以及伺服器軟體
- 20.2 WWW (LAMP) 伺服器基本設定
- 20.3 Apache 伺服器的進階設定
- 20.4 登錄檔分析以及 PHP 強化模組
- 20.5 建立連線加密網站 (https) 及防砍站腳本
- 20.6 重點回顧
- 20.7 本章習題
- 20.8 參考資料與延伸閱讀
- 第二十一章、文件服務器之三: FTP 服務器
- 21.1 FTP 的數據鏈路原理
- 21.2 vsftpd 服務器基礎設定
- 21.3 客戶端的圖形接口 FTP 聯機軟件
- 21.4 讓 vsftpd 增加 SSL 的加密功能
- 21.5 重點回顧
- 21.6 本章習題
- 21.7 參考數據與延伸閱讀
- 第二十二章、郵件服務器: Postfix
- 22.1 郵件服務器的功能與運作原理
- 22.2 MTA 服務器: Postfix 基礎設定
- 22.3 MRA 服務器: dovecot 設定
- 22.4 MUA 軟件:客戶端的收發信軟件
- 22.5 郵件服務器的進階設定
- 22.6 重點回顧
- 22.7 本章習題
- 22.8 參考數據與延伸閱讀