『架設伺服器』是學習 Linux 的新手最想要進行的工作!但是,不瞭解 linux 的基礎就進行伺服器架設,可能會死的很 慘~在這篇文章中,我們會以簡單的說明告訴大家為何需要學好 Linux 基礎後,才能架設伺服器啊!
很多朋友因為自身或服務單位的需求,總是有架設各種網路伺服器的時刻,這個時候大多數的前輩都會推薦他們使用 Linux 做為伺服器架設的作業系統。但因為這些朋友很多都沒有受過 Linux 作業系統操作方面的訓練,因此總覺得反正都是作業系統,所以 Linux 應該也跟 Windows 差不多吧!那麼就硬著頭皮使用圖形介面去設定好眾多的伺服器,也有可能參考網路上一些文章, 即使是透過文字介面去設定,也能夠很輕鬆的作好伺服器的架設。問題是,這樣的一部伺服器是很容易被綁架的, 而且,如果網路不通,你如何自行將問題克服 (trouble shooting)?難道出問題只能無語問蒼天?
所以囉,除非你只是暫時需要架設網路伺服器,可以請朋友或其他資訊公司幫你忙,如果你本身就是資訊方面的服務提供者, 那鳥哥建議你在進行伺服器實務設定之前,看一看這篇,試試看你到底有沒有具備網路伺服器的設定技能了呢?
很多剛接觸 Linux 的朋友常常會問的一句話就是:『我學 Linux 就是為了架設伺服器,既然只是為了架設伺服器,為什麼我還要學習 Linux 的其他功能?例如:例行性工作排程、Bash Shell ,又幹嘛去認識所有的登錄檔等等,我又用不到!此外,既然有好用的 Web 介面的 Server 設定軟體,可以簡單的將網站架設起來,為什麼我還要去學習 vim 手動的編輯一些設定檔?幹嘛還需要去理解伺服器的工作的原理?』上面這些話對於剛剛學會架設網站的人來說,真是替他們道出了一個新手的心聲啊!不過,對於任何一個曾經有過架設公開網站的朋友來說,上面這些話,真的是會害死人!為什麼呢?底下我們就來分析一下。
如果有人問你:『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, NAT 與 Router 等等,Linux 系統都可以達到,而且,只要一部 Linux 就能夠達到上面所有的功能了!當然,那是在不考慮網路安全與效能的情況下,你可以使用一部 Linux 主機來達成所有的網路功能。
但是你得要知道,『架站容易維護難』啊!更深一層來說,『維護還好、除錯更難啊!』架設一個網站有什麼難的?即使你完全沒有摸過 Linux ,只要參考鳥哥的書籍或者是網站,而且一步一步照著做,包準你一個下午就可以架設完成五個以上的網路服務了!所以說, 架設伺服器有什麼難的?但要曉得的是,這樣的一個網站,多則三天,少則數小時,立刻就會被入侵了! 此外,被入侵之後,或許可以藉由一些工具來幫你將 root 的密碼救回來,可惜的是, 這樣的一個網站還是有被做為中繼站的危險存在的!
另外,如果你使用工具 (例如 Webmin) 卻怎麼也架設不起來某個網站時,要怎麼解決?如果你不懂該 Server 的運作原理與 Linux 系統的除錯訊息,那麼難道只能無語問蒼天?不要懷疑這種情況的可能性, 參考一下各大論壇上面的留言就可以很清楚的知道這種情況的存在有越來越明顯的趨勢呢!
所以說,架設伺服器之前還是有一些基本的技能需要學會的!而且這些技能是『一旦學會之後,真正是終身受用啊!』只要花一個學期 (三~六個月) 就能學會一輩子可以使用的技能,這個學習的投資報酬率真是太高了! 所以,一開始的學習不要覺得苦,那真的是值得的喔!^_^
Linux 不是很好學,根據鳥哥過去教學的經驗,很多同學在學 Linux 時真是非常的痛苦,不過學完之後, 以前在 Windows 上面遇到的困難卻也自然而然的迎刃而解!因為 Linux 訓練我們時,是要我們去解決一個發現的問題, 這過程需要很多基礎知識的培養,所以學完他之後,你會覺得很多事情都變的很簡單而單純。但如果使用 Windows 的懶人方案,很多問題就不可能瞭解為啥會發生與為啥可以這樣處理了!我們會在下一節分析一下架設伺服器的流程, 也會提供相對應的你應該要會的 Linux 技能喔!
不管是 Windows 還是 Linux ,要架設好一部堪稱完美的伺服器,『基本功課』還是得做的,這包括了:
而且,每一個項目裡面所需要學習的技巧可多著呢!『什麼?要學的東西那麼多啊!』是啊! 所以,不要以為資訊管理人員整天閒閒沒事幹的吶,大家可是天天在出賣知識的,同時, 還得天天應付隨時可能會發生的各種漏洞與網路攻擊手法呢!真不是人幹的工作~~
這麼說的話,架設伺服器真的是挺難的喔!事實上,架設伺服器其實蠻簡單的哩!咦!~怎麼又說架設伺服器簡單了? 不是說架設伺服器難嗎?呵呵!其實『架設伺服器很難』是由於朋友們學習的角度有點偏差的原因啦! 還記得當初進入理工學院的時候,天天在唸的東西是基礎物理、基礎化學、工程數學與流體力學等基礎科目, 這些科目花了我們一至兩學期的時間,而且內容還很難吶~都是一大堆的理論背不完。 怪了?我們進理工學院是為了求取更高深的知識,那麼這些基礎知識學了有什麼用吶? 呵呵!更高深的知識都是建構在這些基本科目的理論上面的,所以 萬一你基礎的科目沒有讀好,那麼專業科目裡面提到的基本理論怎麼可能聽的懂?
這樣說應該就不難瞭解了吧!沒錯!認識作業系統與該作業系統的基本操作,還有那個重要的網路基礎, 就是我們在架設伺服器前的『基礎科目』啦!所以說,在進入 Linux 的伺服器世界之前,真的不能夠略過網路基礎的相關知識,同時, Linux 系統的基本技能也必需要能夠理解吶!
好了,或許你還是對於 Linux 系統裡面『什麼是很重要的知識』不甚瞭解, 果真如此的話,那麼我們就舉個簡單的例子來說明一下囉!底下列出一般的架設伺服器流程, 我們由架設伺服器的流程當中,來看一看什麼是重要的 Linux 相關技能吧! ^_^。
雖然不同的伺服器提供的服務並不相同,而且每種服務的原理也不見得都一樣,不過,每種伺服器由規劃、架設到後續的安全維護, 其實整個流程是大同小異的。什麼?你不相信啊?為了讓你相信,那我們就來一項一項的分析看看吧!
底下我們就整個伺服器的簡易架設流程當中來分析一下,以瞭解為什麼瞭解作業系統的基礎對於網站維護是相當重要的呢?首先,到底我們是如何連線到伺服器的? 連線到伺服器又取得啥咚咚?我們先以底下這張圖示來作個簡單的說明好了:
先來理解一下,到底我們連線到伺服器想要得到什麼?舉例來說,你連線到 Youtube 想要看影片,所以對方就提供影片串流資料給你; 你連到 Yahoo 想要看新聞,所以對方就提供新聞的文字檔案給你;你連線到無名小站想要看美女,對方就傳圖檔給你;你連線 Facebook 想要去種田,對方就參考你之前留下來的記錄,從資料庫裡面將你的記錄拿出來傳給你。看到沒有,你連線到伺服器,重點在取得對方的資料, 而一般資料的存在就是使用檔案囉!那你有沒有權限取得?最終與該檔案系統的設定有關啦!
上圖顯示的是:首先,用戶端到伺服器的網路要能夠通,等到用戶端到達伺服器後,會先由伺服器的防火牆判斷該連線能否放行, 等到放行之後才能使用到伺服器軟體的功能。而該功能又得要通過 SELinux 這個細部權限設定的項目後,才能夠讀取到檔案系統。 但能不能讀到檔案系統呢?這又跟檔案系統的權限 (rwx) 有關啦!上述的每個部分都要能夠成功,否則就無法順利讀取資料囉。
所以,根據上面的流程我們大概可以將整個連線分為幾個部分,包括:網路、伺服器本身、內部防火牆軟體設定、各項服務設定檔、細部權限的 SELinux 以及最終最重要的檔案權限。底下就分幾個細項來談談囉。
上述的伺服器架設流程中,其實除了第 5 點之外,其他步驟在各伺服器設定都需要瞭解啊!而且都是一樣的東西說! 因此,這些基礎如果學會了,最終,你只要知道第 5 點裡面那個軟體的基礎設定,你的伺服器一下子就可以設定完成啦! 這樣說,你是否開始覺得基礎學習很重要啊! ^_^
上面講完後或許你還是不很清楚到底這些技能如何串起來?鳥哥這裡提供一個簡單的案例來分析一下好了, 這樣你應該就比較容易清楚的知道為何需要學習這些咚咚。
在上述的環境中,你要考慮的東西有哪些呢?依據本小節一開始談到的六個步驟來分析的話,你可能需要底下這些咚咚喔!
我們想要將五部電腦串接在一塊,但是卻又只有一個可以對外的連線,此時就得要購買集線器 (hub) 或者是交換器 (switch) 來串接所有的電腦了。但是這兩者有何不同?為何 switch 比較貴?我們知道網路線被稱為 RJ-45 的網路線, 但網路線材竟然有等級之分,這個等級要怎麼分辨?不同等級的線材速度有沒有差異?等到這些硬體基礎瞭解之後, 你才能夠針對你的環境來進行連線的設計。這部份我們等到下一章再來介紹。
由於只有一條對外連線而已,因此通常我們就建議你可以用如下的方式來串接你的網路:
透過 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 所示,Server 端是在那五部電腦之中,而且 Server 必須要提供針對不同帳號給予網路磁碟機,我們這邊會提供網芳 (SAMBA) 這個服務,因為他可以在 Linux/Windows 之間通用之故。 且由於需要提供帳號給使用者,以及想到未來的磁碟擴充情況,因此我們想要將 /home 獨立出來,且使用 LVM 這個管理模式, 並搭配 Quota 機制來控制每個帳號的磁碟使用量。
所以說,你得知道 Linux 目錄下的 FHS (Filesystem Hierarchy Standard) 的規範,否則分割槽給到錯誤的目錄,會造成無法開機!那為什麼要將 /home 獨立放入一個分割槽? 那是因為 quota 僅支援 filesystem 而不支援單一目錄啊!好了,如果給你一部全新的主機,那你該如何安裝你的系統呢?
既然我們這部主機得要提供不同帳號來使用他們自己的網路磁碟,因此還需要建立帳號啊,使用磁碟配額 (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 喔!這樣瞭解了嗎? |
做完上面的實作之後,現在你曉得為什麼在基礎篇的時候,我們一直強調一些有的沒有的了吧?因為那些東西在這裡都用的上! 如果本章這些題目你都不會,甚至連為什麼要作這些東西都不懂的話,那得趕緊回去閱讀基礎篇,不要再念下去了! 會非常非常辛苦的呦!
你可知道本章第一個實作題安裝好了你的 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 來源,以及制訂防火牆規則流程等。 這部份則是本教學文件後續要著重介紹的部分,留待後面章節再來談吧!
這部份就是整個伺服器架設篇的重要內容了!前一小節也曾談過,在伺服器架設部分你得要熟悉相當多的資訊, 否則未來維護會顯的很麻煩。我們以本章提到的大前提為例,我們想要提供一個網路磁碟機,那麼網路磁碟機使用的機制有哪些呢? 常見的除了網頁形式的分享磁碟之外,還有常見的網芳以及 Linux 的 NFS 方式 (後面章節都會繼續談到)。
由於假設區域網路內的作業系統大部分是 Windows 好了,因此網芳應該是個比較合理的磁碟分享選擇。 那麼網芳到底啟動了多少個埠口?是如何持續提供網芳資料的?提供的帳號有沒有限制?提供的權限該如何設定? 是否可規定誰可登入某些特定目錄?針對網芳服務的埠口該如何設定防火牆?如果系統出錯該如何查詢錯誤資訊? 這個網芳在 Linux 底下要使用什麼服務來達成?這都是需要學習的呢!
直接告訴你,網芳的製作在 Linux 底下是由 Samba 這套軟體來達成的。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 |
例題:
如何啟動 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 喔! |
經過上面的流程,你就可以知道啦,架設好一部主機需要知道:(1)各個 process 與 signal 的觀念;(2)帳號與群組的觀念與相關性;(3)檔案與目錄的權限,這當然包含與帳號相關的特性; (4)軟體管理員的學習;(5)BASH 的語法與 shell scripts 的語法,還有那個很重要的 vim 囉!:(6)開機的流程分析,以及記錄登錄檔的設定與分析;(7)還得知道類似 quota 以及連結檔等等的概念。要知道的真的很多,而且還是不能省略的步驟喔!
如果有些特殊的使用情況時,權限設定就是個很重要的因素。舉例來說,我們系統上面,現在有 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@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 出現問題的機會非常大,但是解決技巧卻很簡單!就是透過登錄檔內的說明去作即可。 詳細的作法我們在後續章節再持續說明吧!
老實說,在鳥哥管理伺服器的經驗來說,硬體問題要比作業系統與軟體問題還來的嚴重,而人的問題又比硬體問題嚴重! 舉例來說,如果你的老闆跟你說:『我要的帳號是 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 新手不要一頭栽入想要單純架設伺服器的迷思當中吶! 如果你對於上面談到的幾個基礎概念不是很清楚的話,那麼建議你由底下的兩個網站學起:
網管人員需要什麼能力呢?我想,架幾個站跟作一個稱職的網管人員, 相差是甚遠的!架站,說真的,是一件很簡單的事情,看著書本一步一步的作上去,一定可以成功的!但是,很多人都只曉得 『如何架站』卻不知到『如何維護一個網站的安全』!基本上, 維護一個已經架設好的網站的正常運作,真的要比架設一個網站難的多了!你得要隨時知道你的系統狀況, 隨時注意是否有新的軟體漏洞而去修補他,隨時要注意各種服務的登錄檔案(logfile)以瞭解系統的運作情況! 得知道發生問題的時候,到底問題點是在哪一個!
比如說當機了,那麼你知道當機的原因嗎? 即使不知道,也可得需要約略猜得出來才行。而,如果安全出了問題,被入侵了,除了 format + 重灌之外,可有辦法在不移除系統的情況下修補漏洞? 這些都是網管人員需要學習的,而且,通常都是需要經驗的累積才會知道問題的所在! 此外,保持身心的活力以隨時注意線上公布的安全防備資訊等等!都需要具備的!
此外,最嚴重的問題是,網管人員其實最需要的是 『道德感與責任感』!你可要曉得你的機器上所有人的隱私都在你的監控之下, 如果你本身就已經有偷窺慾了,可知道這有多可怕嗎?另外,如果沒有責任感的人作為一個網管, 可能會瘋掉,因為不論何時何地,只要是你監控的主機出了問題,嘿嘿嘿嘿,你一定是第一個被想到的人物, 所以,你得隨時隨地做好可能隨時會被召喚回主機跟前的心理準備!
更可笑的是,如果你服務的人群中, 有幾個連開機的時候軟碟機塞了一塊不可開機的軟碟,導致無法正常開機, 也都會跟你抱怨說『唉呦!你經手的電腦怎麼這麼爛,動不動就不能開機』的時候, 你得要有容人的雅量,說說冷笑話解解悶吧!總之,網管人員並不是只要會架站就可以了, 『道德感』『責任感』還有『耐心』呵呵!套一句現在人喜歡說的口頭禪『這是一定要的啦!』
網管人員是什麼? 好久以前看到了報紙的一篇報導, 內容大概是說:臺灣的網路管理人員對於『網路安全性防護』的認知不夠,或許是防火牆機制建立不完整, 或者是認為駭客不會入侵小型網站,所以在不甚瞭解的情況下,被所謂的『中東駭客組織』所入侵, 然後以臺灣被入侵的電腦為跳板,去攻擊賓拉登的仇敵美國,然後引起美國高度的不滿。由於臺灣的立場有點得罪不得美國 ( 這邊不提及政治因素,反正目前的情況是這樣。 ) ,所以一接到美國來的抗議信函就很棘手。 這只是一個事件問題,不過這個事件問題也點出了一個重點,就是我們的網路資訊可能真的是蠻發達的, 不過,管理網路的人員可能在認知的程度上就有點參差不齊了!網路安全是蠻重要的,只是, 大家常常會忘記他!個人認為,網管是蠻重要的角色,應該不能等閒視之才對。
好了,如果你瞭解了上面鳥哥所想要表達的意念之後,來評估看看你是否適合當一個稱職的網管人員吧!當然,一再強調的,架設一個 Linux 伺服器是很簡單的,但是維護的工作除了身心已經活化, 並且還要擁有高標準的道德感,否則.....倒站恐怕是可以預見的一個後果.....