做一個小型的 Linux 系統來玩玩,自己安裝、自己整理、自己管理等等,測試一下自己真的瞭解 Linux 了嘛?
從學期開始學到這邊之後,如果每堂課後面的習題都有完成的話,那麼你大概已經可以掌握 Linux 作業系統了。 接下來,我們將介紹如何使用最少軟體的功能,來達成你所需要的伺服器環境,注意喔,是『伺服器』環境,而非桌面電腦。 其實重點在安裝時的分割功能、軟體最小安裝、安裝完畢的初始設定、系統的整理與簡易調整,最終就是處理伺服器的各項用途了。 我們還沒有實際操作過伺服器的各項設定,不過這章內容搞定之後,你大概也能夠架設系統預設的 Server 了!
你需要 Linux 做什麼呢?以鳥哥來說,我的 Linux 大部分都用來做網路伺服器、辦公室防火牆系統、科學計算的基本作業系統、虛擬化的基本系統等等任務。 不同的任務所需要的硬體資源並不相同,同時,所需要提供的服務當然也差異相當大。所以,安裝 Linux 之前,先確認你的用途為宜!
雖然說目前 PC 效能強大且便宜,所以 PC 作為 Linux server 的硬體資源應該是毋庸置疑的。不過,某些特別的狀況下, PC 的資源要不是不夠力,就是太過頭了!
舉例來說,現在的物連網 (Internet Of Things) 需要很多的偵測器 (sensors), 但這些偵測器可能需要一部小型 server 來彙整資料與傳輸資料,這個 server 恐怕是需要放在戶外的、比較惡劣的工作環境下! 此時,買一部配備完整的 PC 看起來是效能太好,但是維護不易啊~光是電源怎麼牽到戶外來,就夠傷腦筋的了。 這時,如果一台小小的樹莓派可以處理的話,那應該使用樹莓派會比較好,又省電、又便宜、又方便抽換的維護。
所以,設計你的伺服器主機硬體時,應該要考量實際的需求,這樣才會有較佳的搭配應用。底下鳥哥就自己的常見使用環境給予建議, 請讀者們自行設計出適合自己的主機資源。
某些計算或者是服務需要較高等級的主機系統,此時可能需要購買到多核心 Xeon 等級以上的 CPU,搭配高效能網卡 (最好內建 10G 網卡), 會比較適合。以鳥哥為例,我用來計算空氣品質模式的系統,就用了 3 部雙 CPU 的主機,最高階的那部系統為 10 核心 20 緒 的 CPU 兩顆, 因此一台就會有 20 核 40 緒,搭配 128GB 的記憶體,以及實體磁碟陣列卡,跑模式也還差不多可靠。
如果要做為資料庫環境使用,那也應該要使用比較好的主機資源,因為資料庫的運算通常會消耗很大量的 CPU 資源。 同時,記憶體最好也要大一些,可能的話,將某些資料庫資料寫入記憶體中,會更加速運算。 因此,繁重的資料庫運算也需要較高性能的主機系統。
一般來說,底下的系統需要較高運算效能與較大記憶體容量:
某些高容量需要的服務,包括檔案伺服器 (如 Samba, FTP, HTTP 等等) 以及科學計算的結果輸出 (例如空品模式、大氣模式等等), 還有雲端虛擬機器的虛擬磁碟等,都會用到很多磁碟容量。這時,考量到高速還是高容量,都需要有磁碟容錯的機制存在, 否則機器損壞不打緊,資料不見才煩惱。
實際上線的系統,最好還是使用較高規格的實體磁碟陣列卡來協助比較妥當,除了支援熱拔插的功能,磁碟陣列卡上面的高速快取, 也對讀寫效能有幫助。另外,如果只是資料存放 (如 Samba, FTP, 科學計算的結果輸出) ,建議使用 RAID6 等級來處理即可, 以前鳥哥都用 RAID5,由於同時死掉兩顆磁碟的機率還是存在的,因此現在都傾向於使用 RAID6 較佳。
如果是雲端虛擬機所需要的磁碟,由於這些磁碟系統可能需要用在虛擬機的作業上,而不是單純的資料存放, 因此如果能有 SSD 作為進一步快取是最好,若沒有的話,個人建議使用鋸齒狀的 RAID10 效果最好。 例如有八顆磁碟時,兩兩成對做成四個 RAID1 的系統,再將 4 個 RAID1 整合成一組 RAID0,實際使用的經驗, 這樣的讀寫效率會比 RAID5 好些,尤其是在隨機存取的環境上。
一般的服務,包括 WWW 服務,以及非頻繁讀寫的資料庫環境 (包含在 WWW 系統內),或者是一般小型辦公室的檔案伺服器, 大多使用 CPU 為 4 核 8 緒的 PC 等級產品即可。也就是說,絕大部分的中小企業,需要的就是一部 PC server 啦!
以物連網為例,一部樹莓派就可以做很多事情,根本無須使用到 x86 架構的 PC。此外,若單純作為用戶端的接收設備, 樹莓派或其他 Xapple pi 都可以符合這樣的需求。最近學校單位若經費不足,在電腦教室內似乎也能夠透過這種環境, 搭配共用的雲端虛擬系統來組建一整間電腦教室,不但維護較為容易,經費支出應該也會比較節省。
不要懷疑,無論你是使用什麼系統,有辦法處理磁碟分割格式為 GPT,就以 GPT 為主!不要再用 MSDOS 的 MBR 模式。 再者,需要做什麼樣的分割,要分割成哪些目錄的掛載,這就與你伺服器的使用有關了。
如果是作為眾多帳號使用的檔案伺服器 (一般中小型企業比較容易使用到的環境),建議 /home 一定要獨自切出來, 此外,若可能的話,將這個 /home 做成 LVM 也是可行的方案 (但是備份方面請自行考量!),這樣檔案系統的縮放才有彈性。 而如果考量到未來可能會放大或縮小,那最好選用 EXT4 檔案系統,因此目前 XFS 並不支援縮小檔案系統的。
若有特殊需求需要用在非正規的目錄底下,例如鳥哥經常介紹的 /data 目錄,那麼也請自行製作分割與檔案系統的處置。
針對比較大容量的磁碟或分割,確實建議使用 XFS 檔案系統,格式化會比較快,另外,XFS 在錯誤救援方面也頗為成熟, 對大檔案來說,效能也不錯,是可以考慮使用的檔案系統。
若考慮都使用 CentOS 7 原本提供的服務與預設的目錄配置,則 /var 最好獨自分割出來, 因為很多服務的資料產出都放置於 /var/lib 裡面 (包括資料庫系統),而郵件資料也是放置於 /var/spool/mail 裡面的。
雖然磁碟分割還是依據伺服器的用途而定,不過通常必須要有的分割大致有這些:
以學校的教學環境而言,若在無還原卡的環境下,要達到最大化資源應用,通常會在一個磁碟內進行多個磁碟分割,然後安裝不同的作業系統, 最終以開機選單來進入各個不同的作業系統,此即為多重開機環境的設計依據。
以前 CentOS 6 以前的 Linux 系統,預設使用 EXT3/EXT4 這種 EXT 家族的檔案系統,因此在進行 chainloader 的時候是不會出事的, 因為 CentOS 6 以前的系統,使用的 EXT 檔案系統家族,都會預留出可以安裝開機管理軟體的區塊 (boot sector)。不過新的 XFS 檔案系統並沒有預留! 所以 XFS 檔案系統的 superblock 預留區塊並沒有包含 boot sector 的,因此無法安裝開機管理程式。
因此,針對學校的一機多用途環境而言,若需要安裝 Linux 作業系統與 Windows 作業系統共存的環境,建議 CentOS 的預設檔案系統最好修訂為 EXT4 較佳。 而且較為有趣的是, CentOS 7 以後的系統,因為使用了 XFS 檔案系統,因此開機過程中已經取消自動安裝 boot loader 到 boot sector 的區塊, 只會將 boot loader 安裝到 MBR 區塊而已。所以在安裝完 CentOS 7 之後,可能需要手動安裝 grub2 到 EXT4 的 boot sector 才行。
另外,讀者應該知道安裝作業系統的『順序』是有關系的,因為最後安裝的作業系統之開機管理程式會更新 MBR,因此最終的 MBR 是最後安裝的那個作業系統所管理的。而在教學環境中,Linux 作業系統的開機管理程式可能會被胡亂修改, 因此可能造成無法順利進入其他作業系統的窘境。根據經驗,最好的方式是這樣的:
其中,/dev/sda1 那個小 Linux 系統的目的是要維護整個單機系統的開機選單,因此該系統一經安裝就不要在更動他。 而根據上述流程的安排,最終開機選單會被第三個 (也就是最後一個, /dev/sda3) 作業系統所管理。請依據正常流程開機, 然後在純文字界面 (例如 tty2) 用 root 登入系統,之後使用底下的方法將 boot loader 安裝到 boot setor 上面去。
若出現錯誤,可加入『--force --recheck --skip-fs-probe』等參數來處理看看。務必記得不要使用 XFS 檔案系統才好。 處理完這部份之後,請拿出 CentOS 的原版光碟,進入本課程之前章節談到的救援模式,然後 chroot 到第一個 /dev/sda1 的作業系統環境,接下來進行救援:
這樣就可以完成整個多重作業系統的環境設定了。
讀者會發現這個小章節中,無論是硬體還是初始環境的設定 (包括分割、檔案系統選擇、掛載資源的設計等等), 全部都與 Server 的用途有關。而無論硬體資源與初始環境設定,幾乎都是一經確認就無法修改 (當然!), 因此,讀者們在學習 Linux 之後,若有架設 Linux server 的需求,應該就您伺服器的用途來考量, 將經費花在刀口上,會比較妥當。
此外,就如同 CentOS 每個版本的支援度都長達 5~7 年之久,你 Server 硬體的使用年限,最好也能夠是 5~7 年以上。 所以,讀者在設計這些硬體資源與初始環境配置時,需要預設考量 5 年內的使用情況,預留升級空間 (包括 LVM 檔案系統、 硬體的記憶體插槽是否有剩餘、磁碟是否能夠後續加掛、額外的插槽是否足夠未來的設備使用等等), 這樣才是較為完整的規劃。
一般建議強迫系統用 GPT 分割格式,然後使用最小安裝模式,安裝完畢之後,再以文字模式的方式建立好網路, 持續使用純文字模式進行各項設定工作,初始環境設定完成後,就能夠開始處理你的伺服器架設了。
假設這是一部透過網路芳鄰提供的檔案伺服器,同時提供個人化網頁設置的網頁伺服器,兩者分別使用 Samba 與 httpd 服務。 另外,該伺服器預計提供這些功能:
分析上面的資料,我們大概可以知道磁碟分割時,最好能夠分割的目錄應該有哪些?
目前可以使用的虛擬機器硬體資源中,CPU 有兩顆、記憶體僅有 2GB,磁碟也只有 40G 的容量而已,根據這樣的系統,我們大致擬定了這樣的分割:
之所以使用 LVM 是考量到未來的容量擴充之故。至於檔案系統則通通使用 XFS (因為不是多重作業系統之故)。
根據本章節的規劃需求,在整體安裝流程中,讀者比較需要注意的安裝流程項目有底下幾個點:
將原版光碟放入光碟或 USB 之後,系統重新開機,並選擇光碟開機,如此則會進入安裝模式。在此安裝模式下,選擇『Install CentOS Linux 7』的選單, 按下 [tab] 按鈕後,在出現的更改核心參數畫面中,最後方加入 inst.gpt 的參數即可按下 [enter] 繼續。
經過語系挑選 (選擇了中文、繁體中文台灣)、日期時間挑選了亞洲台北、鍵盤配置選擇了漢語,並請先進入『鍵盤配置』的項目, 點選『選項』,請勾選了『 Ctrl+Shift 』項目,未來切換中文輸入法時,會較為簡易。如底下的示意圖:
由於我們不是核心開發者,因此個人建議可以將核心出錯時的錯誤偵測資訊功能關閉,請關閉掉 KDUMP 服務,關閉方式如下:
按下『安裝目的地』選項,你會發現有一個 30~40G 左右的磁碟在虛擬機器上,請勾選該磁碟,之後左下方會出現自動配置與自行配置, 請選擇自行配置的項目,最終再按下左上角的完成,即可進入磁碟分割的畫面了。
依序選擇『標準分割』與『LVM』來建立起 15.2.1 小節所討論的磁碟分割格式。最終磁碟分割完畢應該如下所示:
若一切都順利處理完畢,這才開始按下安裝。最終挑選的項目會有點像這樣:
當然要記得安裝過程中,設定好 root 的密碼,並且為自己建立一個日常操作的一般帳號,這個帳號務必勾選『成為管理員』的項目, 結果畫面有點像這樣:
因為系統為最小安裝,因此安裝過程應該非常快速。安裝完畢後,請移除光碟系統,然後重新開機吧。
讀者會發現,本章特意不在安裝過程中設定好網路,原因是網路的設定還是需要一定的經驗,因此建議還是安裝完畢後再來設定, 印象會比較深刻。
假設這部伺服器所在的環境之網路設定要求如下:
在你使用一般帳號登入此新安裝的系統,並且 sudo su - 切換成為 root 之後,依舊可以使用 nmcli 指令來完成各項設定。 只是最小安裝預設並沒有安裝 bash-completion,因此無法使用 [tab] 來補齊各項參數,因此你得要自行手動輸入參數才行。
在設定好了網路參數,並且驗證過沒有問題之後,建議使用者可以關閉 NetworkManager 這個服務。 此服務大部分用在桌上型電腦,對於 IP 不會隨意變動的伺服器來說,可以說是非必要的服務。因此建議將此服務關閉。 此服務關閉後,虛擬機器的網路環境還是正常無誤的,並不會被干擾。
[root@station ~]# systemctl stop NetworkManager [root@station ~]# systemctl disable NetworkManager
安裝好系統的第一個動作,就是升級你的系統!要升級系統最好依據第 12 堂課的建議,選擇最近的 yum server 設定, 這樣軟體安裝速度才會快速。因此請自行處理:(因為最小安裝並沒有安裝 vim ,因此你只能使用 vi 來修改喔!)
本課程大多使用 vim 以及選項會自動補齊的功能,該功能主要透過 vim-enhanced 以及 bash-completion 軟體所提供, 因此讀者可以自行安裝這兩個軟體來恢復自己常用的工作環境。
[root@station ~]# yum install vim-enhanced bash-completion
此時 vim 立即可以使用了,但如果要在不登出的情況下立即讓 bash-completion 生效,那就得要 source /etc/profile.d/bash_completion.sh 來載入環境才行。不過還是建議可以登出再登入來刷新操作環境較佳。另外,探索網路的工具如 netstat 等,是由 net-tools 所提供的, 所以也得要安裝才好。
[root@station ~]# yum install net-tools
網路服務或者是非必要的服務,對於伺服器來說,當然是越少越好。本章使用最小安裝並且安裝了 net-tools 之後, 使用 netstat -tlunp 檢查網路服務,可發現網路服務僅剩下 port 22, 25, 323 亦即 sshd, postfix, chronyd 這三個服務會啟動網路埠口。 由於 chronyd 是即時更新系統時間,我們可以透過 ntpdate 去定期校正時間,而不必一直啟動 chronyd 這個服務,因此在時間校正的設定上面, 可以修訂成為如下的模樣即可:
[root@station ~]# systemctl stop chronyd [root@station ~]# systemctl disable chronyd [root@station ~]# yum -y install ntpdate [root@station ~]# vim /etc/crontab 5 2 * * * root ntpdate ntp.ksu.edu.tw &> /dev/null [root@station ~]# netstat -tlunp 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:22 0.0.0.0:* LISTEN 694/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 822/master tcp6 0 0 :::22 :::* LISTEN 694/sshd tcp6 0 0 ::1:25 :::* LISTEN 822/master
sshd 與 postfix (上表中 master 的項目) 是不可或缺的服務,其中 port 25 預設只對內部網路放行 (127.0.0.1),所以可以不理他。 但是 sshd 預設對整個 Internet 放行,最好能夠加以限制。因此,參考本課程第 11 堂課的介紹,讓 ssh 的服務不在放行服務中, 但是將 sshd 放行於內部區網,亦即針對 172.16.0.0/16 這個網段放行 ssh 服務。
同時不要忘記,未來這部伺服器的服務中,http 為針對全世界放行,samba 為針對內部網路放行,ssh 也針對內網放行, 所以最終你預設的防火牆內容應該會像底下這樣才是對的:
[root@station ~]# firewall-cmd --list-all --permanent public target: default icmp-block-inversion: no interfaces: sources: services: http https ports: protocols: masquerade: no forward-ports: sourceports: icmp-blocks: rich rules: rule family="ipv4" source address="172.16.0.0/16" service name="ssh" accept rule family="ipv4" source address="172.16.0.0/16" service name="samba" accept
請讀者不要忘記了,firewall-cmd 的使用上,主要分為立即性與永久的設定值 (--permanent),讀者們必須要將所有的設定寫入設定值才行。
最後再來確認一下分割的狀態是否吻合當初設計的情況:
[root@station ~]# df -Th | grep -v tmpfs
檔案系統 類型 容量 已用 可用 已用% 掛載點
/dev/mapper/centos-root xfs 5.0G 1.1G 4.0G 22% /
/dev/vda2 xfs 1014M 148M 867M 15% /boot
/dev/mapper/centos-home xfs 12G 33M 12G 1% /home
/dev/mapper/centos-srv xfs 5.0G 33M 5.0G 1% /srv
/dev/mapper/centos-var xfs 5.0G 270M 4.8G 6% /var
這應該是沒問題的情況。不過,由於未來用戶的檔案容量是有限制的,因此在 /home 的檔案系統掛載參數中,應該要加入 usrquota 才對。 因此最終使用 mount 去查閱 /home 的資料時,應該要出現如下的情況才對。
[root@station ~]# mount | grep home /dev/mapper/centos-home on /home type xfs (rw,relatime,seclabel,attr2,inode64,usrquota,grpquota) [root@station ~]#
如前所述,這裡假設你的伺服器為一般企業內部的檔案伺服器及個人化首頁之網頁伺服器,且為多人共用的伺服器系統。 同時因應檔案系統的適當分配,因此會加上磁碟配額的限制。因此這裡就得要有一些帳號建置的相關注意事項才行。
本伺服器假設要提供 http 的網路服務,同時提供區網內網芳服務。不過由於網芳 (Samba) 的設定較為複雜, 因此本章主要以 http 網頁伺服器作為簡易的說明。
Web 服務使用的是 httpd 這隻程式,請安裝,然後啟動即可順利提供服務。
[root@station ~]# yum -y install httpd [root@station ~]# systemctl start httpd [root@station ~]# systemctl enable httpd
由於本伺服器並沒有安裝任何的圖形界面,因此無法使用圖形界面的瀏覽器。不過 CentOS 上面有提供多種文字界面瀏覽器, 例如 elinks 就是其中一個頗為知名的文字界面瀏覽器之一。
[root@station ~]# yum -y install elinks [root@station ~]# links http://localhost
你可以在 links 的畫面中,按下 [q] 來離開,方向鍵上下為在超連結項目中移動,左右鍵為前一個、後一個頁面, [esc] 可以呼叫 links 選單。
關於 httpd 你應該還需要知道的是:
假設 student 這個帳號需要管理 http://localhost/student/ 時,最簡單的方法為使用如下的方式建置妥當:
[root@station ~]# cd /var/www/html [root@station html]# mkdir student [root@station html]# echo "I am student" > student/index.html [root@station html]# chown -Rv student student changed ownership of ‘student/index.html’ from root to student changed ownership of ‘student’ from root to student [root@station html]# ll -d student student/* drwxr-xr-x. 2 student root 24 6月 29 16:25 student -rw-r--r--. 1 student root 13 6月 29 16:25 student/index.html [root@station html]# links http://localhost/studnet
最終你應該會在 links 的畫面中看到 I am student 的字樣,那就代表成功了。
帳號的建置相當的簡單,本訓練教材第 10 堂課已有相當多的範例可以參考。現在本伺服器除了要建置帳號之外,該帳號必須要能擁有 http://localhost/username/ 的網頁子目錄才行。同時,每個帳號在家目錄最多僅能有 200MB 的容量,且超過 180MB 就需要提供警告。 此時,你可以使用底下的腳本來建立好每個用戶,且提供用戶預設的帳密資料,同時強迫用戶第一次使用系統時,需要變更密碼才行。
[root@station ~]# vim account.sh #!/bin/bash for i in $(seq 1 20) do username="user${i}" password="${username}" useradd ${username} echo ${password} | passwd --stdin ${username} chage -d 0 ${username} xfs_quota -x -c "limit -u bsoft=180M bhard=200M ${username}" /home mkdir /var/www/html/${username} echo "I am ${username}" > /var/www/html/${username}/index.html chown ${username}:${username} -R /var/www/html/${username} done [root@station ~]# sh account.sh
同時,在不考慮資安的情境下,將整個使用者的 quota 資訊貼出於 /var/www/html/quota.html 底下, 同時列出目前每個用戶在網頁目錄的磁碟使用量,最簡易的方法可以這樣做:
[root@station ~]# (echo "<pre>"; date; xfs_quota -x -c "report -ubh" /home; \ > du -sm /var/www/html/user*; echo "</pre>" ) > /var/www/html/quota.html [root@station ~]# links http://localhost/quota.html
順利的話,你就能夠看到系統上面每個用戶的資訊使用量。如果需要逐時分析該資訊,請將上面的腳本寫入 /etc/crontab 即可讓系統自行更新。 最後,再考慮備份機制,這部簡易的伺服器就大致在可運作的情境下了。