2012-09-08

用 Webmin 來安裝 BIND 8 DNS 伺服器

用 Webmin 來安裝 BIND 8 DNS 伺服器


建立 Centos Webmin 之前已提過,本文不在贅述

1,登入 Webmin 選擇 Un-used Modules 內的 BIND 8 DNS 伺服器


2,點選 Click here 開始安裝至完成


3,點選 Refresh Modules 重置選單,這樣 BIND 8 DNS 伺服器 就會出現在 伺服器 的選單內


4,先進入 網路網路組態 中的 DNS 客戶端


5,DNS 伺服器 的第一個欄位,設定自己的 IP ,第二個欄位和第三個欄位我就設定 ISP 的,後按 儲存


 6,點選 伺服器 進入 BIND 8 DNS 伺服器 模組


7,先設定 轉送與傳輸 設定 轉送查詢的伺服器 設定 ISP 的 DNS


8,設定 位址與拓樸要監聽的位址與通訊埠 通訊埠 用預設 , 位址 清空(原來是 127.0.0.1)


9,設定 區域預設值 中的 允許從 ... 的查詢 修改成 any


10,最後 Setup RNDC 中按 Yes, Setup RNDC 自動修正設定


11,先停止 DNS 的服務 (Stop BIND)


12,再啟動 DNS 的服務 (Start BIND)


13,用 nslookup 來測試


14,現在來設定開機時,自動啟動 , 系統 ==> 開機與關機 ==> named


15,修改 是否在開機時啟動? 後按 儲存


結束了嗎......嘿嘿,當然結束了.
那你一定會問....A 記錄 怎麼設定 , MX 記錄 怎麼設定

不用擔心,所有的 Server 都設定好了 , 我會安裝 Virtualmin 這個套件 , 統一控管 

How to install APF (Advanced Policy Firewall)

How to install APF (Advanced Policy Firewall)



什麼是APF


APF(Advanced Policy Firewall) Rf-x Networks 出品的Linux環境下的軟體防火牆,被大部分Linux伺服器管理員所採用,使用iptables的規則,易於理解及使用.可算是Linux使用較多的防火牆.APF的配置參數眾多,有效利用這些配置參數可加強你的伺服器安全,APF應該在每一台Linux伺服器中得到應用.

安裝APF

1.下載最新的安裝包並解壓縮,APF專案詳細資訊.

#cd /usr/local/src
#tar -zxf apf-current.tar.gz
 #cd apf-9.7-1/

2.執行安裝

#sh ./install.sh

結束安裝好你會得到一些資訊:

 Installation Details:
 Install path: /etc/apf/
 Config path: /etc/apf/conf.apf
 Executable path: /usr/local/sbin/apf

3.進行詳細配置

#vi /etc/apf/conf.apf

預設的參數適合大多數場合,按照需要進行修改即可

DEVEL_MODE="1" >> DEVEL_MODE="0"
 RAB="0" >> RAB="1"
 RAB_PSCAN_LEVEL="2" >> RAB_PSCAN_LEVEL="3"
 TCR_PASS="1" >> TCR_PASS="0"
 DLIST_PHP="0" >> DLIST_PHP="1"
 DLIST_SPAMHAUS="0" >> DLIST_SPAMHAUS="1"
 DLIST_DSHIELD="0" >> DLIST_DSHIELD="1"
 DLIST_RESERVED="0" >> DLIST_RESERVED="1"

流入埠過濾

# Common ingress (inbound) TCP ports
 IG_TCP_CPORTS="20,21,22,25,26,53,80,110,143,443,465,993,995,3306"
 # Common ingress (inbound) UDP ports
 IG_UDP_CPORTS="21,53,465"

流出埠過濾,虛擬主機推薦開啟

# Outbound (egress) filtering
 EGF="1"
 # Common outbound (egress) TCP ports
 EG_TCP_CPORTS="21,22,25,26,37,43,53,80,110,113,443,465,3306"
 # Common outbound (egress) UDP ports
 EG_UDP_CPORTS="20,21,53,465"

ICMP過濾

# Common ICMP outbound (egress) types
 # 'internals/icmp.types' for type definition; 'all' is wildcard for any
 EG_ICMP_TYPES="all"

另外還有兩個值得注意的設置檔: /etc/apf/allow_hosts.rules /etc/apf/deny_hosts.rules 可設置目標主機的過濾規則.如添加信任主機操作等.

啟動APF

#/usr/local/sbin/apf -s

重啟APF

#/usr/local/sbin/apf -r

查看運行日誌

#tail -f /var/log/apf_log

添加為系統啟動

#vi /etc/rc.local

在其中添加 "/usr/local/sbin/apf -s" 即可(不含雙引號).
 詳細參數說明

 usage /usr/local/sbin/apf [OPTION]
 -s|--start ......................... load all firewall rules
 -r|--restart ....................... stop (flush) & reload firewall rules
 -f|--stop........ .................. stop (flush) all firewall rules
 -l|--list .......................... list all firewall rules
 -t|--status ........................ output firewall status log
 -e|--refresh ....................... refresh & resolve dns names in trust rules
 -a HOST CMT|--allow HOST COMMENT ... add host (IP/FQDN) to allow_hosts.rules and immediately load new rule into firewall
 -d HOST CMT|--deny HOST COMMENT .... add host (IP/FQDN) to deny_hosts.rules and immediately load new rule into firewall
 -u|--remove HOST ................... remove host from [glob]*_hosts.rules and immediately remove rule from firewall -o|--ovars ......................... output all configuration options

此外,APF9.6 (rev:2)版本之後增加了RAB模組.該模組取代了舊版本的antidos模組.可有效減輕拒絕服務攻擊帶來的影響,但需要iptables的內核模組ipt_recent的支援.如下圖我在VPS上啟動APF後的屏顯,提示RAB模組無法啟用.內核模組ipt_recent沒有找到.因此建議在內核支援以及iptables模組支援的情況下使用.



Faq

Problem: If you get this error apf(xxxxx): {glob} unable to load iptables module (ip_tables), aborting.

Solution: Try changing SET_MONOKERN=”0 to SET_MONOKERN=”1 , then apf -r

Problem: If you get this message: apf(xxxxx): {glob} !!DEVELOPMENT MODE ENABLED!! – firewall will flush every 5 minutes.

Solution: you need to change DEVEL_MODE=1 to DEVEL_MODE=0, make sure your config is working first.

Via:http://www.securecentos.com/basic-security/install-firewall/

Centos 基本操作 (上)

Centos 基本操作 (上)

 

前言

Red Hat Enterprise Linux 為 Red Hat 公司推薦使用於企業伺服器網路服務上的 Linux 發行版本,通常大多數的人會將此 Linux 發行版本簡稱為 RHEL(雖然 Red Hat 公司官方並不建議這樣簡稱)。在正常的情況下 RHEL 大約以每 18 ~ 24 個月的頻率,發佈下一版的作業系統。但是實際運作上 RHEL 作業系統版本的發行頻率,取決於 Fedora Linux 的更新。Fedora Linux 為 Red Hat 公司贊助的知名開放原始碼計畫,Red Hat 公司會將許多新技術先行導入至 Fedora Linux 發行版本中,待經過一段時間測試至穩定階段而且符合企業需求後,便會將該技術加入至下一個發行的 RHEL 版本中。每當 Fedora Linux 發行 3 個版本後大約就會發佈 1 個 RHEL 新版本
而本文所要介紹的 CentOS (Community ENTerprise Operating System) 為眾多 Linux 發行版本之一。CentOS 其源碼來自 RHEL 作業系統的開放原始碼,將其源碼重新編譯而成的,移除了無法自由使用的商標及 Red Hat 所擁有的封閉原始碼軟體。由於 CentOS Linux 與 Red Hat Enterprise Linux 具有大量相同的原始碼內容,因此也適合在需要高度穩定性的企業營運環境。
目前有些中小企業的 IT 人員為了建置預算上面的考量使用 CentOS Linux 發行版本來替代 RedHat Linux 企業版本。但是相對來說使用 CentOS Linux 發行版本除了得不到商業支援以外,當然也不包含 Red Hat 公司所擁有的封閉原始碼軟體。因此建議 IT 人員在使用 CentOS Linux 發行版本來建置企業網路服務以前,除了要先了解所使用的硬體伺服器是否支援 CentOS Linux 之外,更要了解所架設的商業服務是否會使用到 Red Hat 公司封閉原始碼軟體。
CentOS Linux 作業系統版本命名規則分為二個部份,分別是主要版本及次要版本來進行版本表示。其中主要及次要版本號碼,則是相對應於紅帽公司所發行的 RHEL 作業系統主要版本與更新版本號碼,例如 CentOS 5.5 版本便是相對應於 RHEL 5 update 5 版本。

實作環境

* CentOS 5.5 32bit (Kernel 2.6.18-194.el5)

建立一般使用者帳號

為了減少不必要的篇幅內容,本文並不會說明如何從頭開始安裝 CentOS Linux 作業系統,建議有興趣的讀者可以參考官方使用者手冊 CentOS-5 Documentation,相信具備基本知識的使用者一定能夠順利無誤將 CentOS 作業系統安裝起來。筆者只有一點安裝建議,那就是在安裝過程中,/var 此掛載點的使用空間不要給太少,以免後續維護時發生問題。原因在於 /var 掛載點除了為預設所有記錄檔存放處以外,更重要的是當後續系統執行更新相關套件時,其暫存的資料便是存放於 /var/cache/yum 內。因此 /var 掛載點空間太小將可能導致套件更新失敗的情況發生。
在安裝 CentOS 作業系統過程中會要求您順便設定 root 管理者帳號,作業系統安裝完成後請使用 root 管理者帳號登入系統。Linux 系統管理者應該具備如同管理 Microsoft Windows 主機時同樣的作業系統安全性觀念,也就是要先建立一般使用者帳號來登入系統進行操作,待需要執行的動作需要提升至管理者權限時,才著手轉換將權限提升。因此持同樣的安全觀念當您首次登入 CentOS 作業系統後,建議您先為管理者建立一般使用者帳號後,再將該使用者帳號加入管理者群組當中。下列操作動作為先建立使用者家目錄資料夾,因為筆者習慣將使用者家目錄都集中於一個目錄內以便後續方便管理(預設使用者家目錄為存放至 /home 下)之後透過指令 adduser 建立一般使用者帳號 weithenn(-d 參數為指定該使用者家目錄位置),接著使用指令 passwd 設定使用者密碼,最後則是設定將該使用者加入管理者群組 wheel 當中。

▲ 圖1 新增使用者帳號、設定使用者密碼並加入 wheel 群組

設定網路功能

建立好使用者帳號後接下來便是設定 CentOS 的網路功能,在本文設定中網路功能是以設定固定 IP 位址來進行說明。可以透過二種方式設定固定 IP 位址,一為使用指令 system-config-network 來進行互動設定,另外一種方式則為手動將固定 IP 位址、網路遮罩等相關資訊寫入 “ifcfg-eth0” 網卡設定檔中,而預設閘道及主機名稱則是寫入 “network” 設定檔中,最後則是將 DNS 名稱解析資訊寫入 “resolve.conf” 設定檔中。下列操作步驟先以 system-config-network 指令進行互動設定,之後再解釋如何手動將網路資訊寫入設定檔的方式:
1. 執行 system-config-network指令使系統進入互動設定視窗中,如圖2
2. 選擇【Edit Devices】 後此時會顯示安裝於此主機的網路卡清單,本例為選擇唯一的一張網路卡【eth0 (eth0) – VMware VMXNET3 Ethernet Controller】,如圖3
3. 將「Use DHCP」勾選項目取消並且將固定 IP 位址、網路遮罩、預設閘道等資訊填入後按下【OK】(如圖4)
4. 此時畫面回到剛才選擇網卡的視窗(以便您要設定多片網路卡設定),接著按下【Save】回到原始互動設定視窗中
5. 接著選擇【Edit DNS configuration】來進入設定 DNS 視窗,請填入主機名稱、DNS 伺服器 IP 位址等資訊後按下【OK】,如圖5
6. 最後則是按下【Save&Quit】確定儲存剛才的設定後離開互動設定視窗
CentOS_Basic_Configuration_02
▲ 圖2 使用指令 system-config-network 進入互動設定視窗
CentOS_Basic_Configuration_03
▲ 圖3 選擇要設定網路資訊的實體網路卡,此例為 eth0
CentOS_Basic_Configuration_04
▲ 圖4 設定固定 IP 位址、網路遮罩、預設閘道等資訊
CentOS_Basic_Configuration_05
▲ 圖5 設定主機名稱及 DNS 名稱解析資訊
透過上述互動設定將網路資訊設定完成後, 作業系統會將相關網路設定值寫入相對應的設定檔中,例如固定 IP 位址、網路遮罩、預設閘道資訊寫入至 “/etc/sysconfig/network-scripts/ifcfg-eth0” 網卡設定檔中,而主機名稱則寫入 “/etc/sysconfig/network” 設定檔內,而 DNS 名稱解析的網路資訊則是寫入 “/etc/resolv.conf” 設定檔內。筆者建議若您的主機安裝多片網路卡時,請將預設閘道資訊寫入至 “/etc/sysconfig/network” 設定檔內為比較洽當的設定。
所以我們可以在互動設定完畢後,查看相關網路設定檔內容時可以看到相關網路資訊均已寫入。因此您可以依個人喜好來決定要如何設定網路資訊至 CentOS 作業系統中,看您是要使用指令 system-config-network 以互動方式來設定網路資訊,或者將相關網路設定值寫入相關設定檔內也是可行的方法。就筆者個人習慣來說,會使用互動設定來設定相關資訊,並且於設定完成後查看相關設定檔內容,確定無誤即可(可以省去記憶相關設定檔內容中參數名稱)。
CentOS_Basic_Configuration_06
▲ 圖6 查看網路設定檔及 DNS 名稱解析設定檔內容
當上述設定完成後可能會發現 CentOS 主機仍然無法連上網際網路。雖然透過互動設定已經設定好相關網路資訊,但作業系統目前仍未套用變更相關設定(例如套用預設閘道設定值)。建議您可以執行指令 reboot,重新啟動主機來自動套用剛才設定的相關網路資訊。
當您將 CentOS 主機重新啟動完成之後,您可以使用 ping 指令來判斷主機是否能順利連上網際網路及進行名稱解析的動作,或者藉此判斷此台主機的網路通訊是卡在哪個環節上以便除錯。
CentOS_Basic_Configuration_07
▲ 圖7 測試主機能否順利與網際網路主機進行通訊

修改 SELinux 安全增強機制

Linux 作業系統從核心 2.6 版本開始預設會自動載入安全增強機制 SELinux ( Security-Enhanced Linux) 核心模組。SELinux 是由美國國家安全局 NSA (National Security Agency) 所開發,並且在 2000 年 12 月時將此核心模組發行給開放原始碼的開發社群,以便有效加強 Linux 整體安全性。
SELinux 為基於保護原則、作業系統中檔案結構及檔案權限的完整性原則所設計,此完整性原則可以有效針對入侵行為,以及企圖跨越系統安全架構等設計不良的應用程式對作業系統所造成的破壞,因此可以提供更安全的強制存取控制架構,來與作業系統的核心和主要子系統協同運作。在這樣的架構下相關的服務 (Daemon) 只能存取屬於該服務帳號所能存取的資料夾及檔案權限,若是超過所能存取的權限範圍則 SELinux 便會阻擋該服務的存取行為。所以若主機所架設的服務出現安全性漏洞導致被攻擊時 SELinux 能夠有效將攻擊所造成的損失降到最低。
簡單來說啟用了 SELinux 安全增強機制後的 Linux 作業系統,其檔案權限便不僅僅是傳統上的三種權限-讀取 r、寫入 w、執行 x-,及身份-擁有者 Owner、群組 Group、其它人 Others,而是整個主機內的檔案系統,將會套用更細微的權限及身份設定並且具有完整性架構。然而也因為 SELinux 安全增強機制及完整性原則,常常會造成 Linux 初學者因為不了解檔案系統及相關概念,進而導致設定相關網路服務時,因為違反了 SELinux 安全機制或者完整性原則,而導致網路服務無法啟動,或者無法存取系統資料(因為被 SELinux 安全機制給阻擋住了)。因此筆者通常會建議初學者可以先將此增強安全機制設定為警告通知,或者暫時關閉。等以後對於 CentOS 作業系統有更深的認識後再將此功能啟用。當然這樣的情況是自行測試或學習時,使用者若是用於企業營運時則強烈建議一定要開啟 SELinux 安全增強機制來提升及保護主機安全性。
要修改 SELinux 安全增強機制的設定,您可以透過修改 “/etc/sysconfig/selinux” 設定檔,或者使用指令 system-config-securitylevel 進入互動設定視窗進行設定之後再將主機重新啟動即可套用變更,SELinux 安全增強機制共有三種運作模式說明如下:
1. enforcing:啟動模式,SELinux 安全增強機制啟動將會阻擋不當的存取行為。
2. permissive:寬容模式,當系統發生違反 SELinux 安全增強機制時僅僅顯示警告訊息而不會實際進行阻擋的動作,此模式很適合有心學習 SELinux 機制的學習者。
3. disabled:禁用模式,完全將 SELinux 安全增強機制禁用。
筆者建議您可以將設定值修改為寬容模式 (permissive),因為當您的操作行為違反 SELinux 安全增強機制時會顯示警告通知您,因此您可以有效學習到哪些操作或者哪些動作是會被 SELinux 阻擋哪些不會,這樣可以讓您日後真正開啟 SELinux 安全增強機制時,不致被卡住並且早日提升您所管理的主機系統整體安全性。您可以透過 sestatus 指令來判斷目前主機中 SELinux 的運作模式及狀態,此設定值變更後必須要將主機重新啟動才能套用變更,當重新啟動後請記得再次使用 sestatus 指令以便確認您的修改正確有效。
CentOS_Basic_Configuration_08
▲ 圖8 修改 SELinux 設定檔以變更運作模式
CentOS_Basic_Configuration_09
▲ 圖9 互動設定修改 SELinux 運作模式

禁止 root 管理帳號遠端登入

在預設的情況下您可以直接使用 root 管理帳號來遠端登入 Linux 作業系統進行管理,然而在管理作業系統上通常安全性與便利性是相對的二個拉扯點。當您所管理的作業系統其操作便利性愈高則安全性通常會相對的降低。筆者在此建議您關閉 Linux 預設允許 root 管理者帳號可以遠端登入管理系統,原因有三:
1. 首先是您的主機將增加了被入侵的機會。在管理者帳號已知情形下,剩下就是嘗試登入密碼了,如此一來很容易遭受暴力猜測密碼攻擊。
2. 當一台主機有眾多管理者時大家皆使用 root 管理者帳號登入系統進行管理動作,則誰修改了某個檔案內容或執行了哪些動作均無法稽核,因為記錄的資料都是 root。
3. 最後則是直接使用 root 管理者帳號登入系統進行管理,若是在操作過程中不慎下錯指令時有極大的可能會把系統給毀掉。例如原本是想刪除根目錄下的 test 資料夾 rm –rf /test 若不慎在操作時不小心多個空格 rm –rf / test,則對於作業系統來說是要刪除根目錄 (/) 及目前所在的 test 資料夾。
要將 CentOS 主機預設允許 root 管理者帳號遠端登入的功能關閉,可以透過修改 “sshd_config” 設定檔後再重新載入 SSH 服務即可套用變更,套用完成後您可以測試是否無法使用 root 管理帳號遠端登入主機以便確定修改是否生效。
CentOS_Basic_Configuration_10
▲ 圖10 修改 SSH 設定檔及重新載入 SSH 服務
讀者可能覺得很奇怪,遠端登入主機時輸入帳號後怎麼要等很久才能輸入密碼?會有這樣的狀況發生是因為 CentOS 在啟動 SSH 服務時預設會配合使用名稱解析所導致,若您主機運作的網路環境中名稱解析服務已經運作正常則不會有此問題發生。若發生這樣的問題請檢查 DNS 名稱解析中反向解析對於此主機的解析情況,若此台主機所在的網路環境中並沒有反向名稱解析的機制,您可取消 SSH 服務中預設會使用到名稱解析的動作即可解決此一問題。
CentOS_Basic_Configuration_11
▲ 圖11 取消 SSH 服務使用名稱解析服務

結語

本文進行至此已經建立好一般使用者帳號並將其加入管理者群組,並且設定好 CentOS 主機的網路連通資訊(固定 IP 位址、網路遮罩、預設閘道、DNS 名稱解析、主機名稱),並且確認主機可連結至網際網路上的機器,其網路功能運作無誤。再來則是將 SELinux 安全增加機制設定為寬容或禁用模式,以免在您剛開始學習 CentOS 作業系統時遭遇困難,最後則是關閉 root 管理者帳號,關閉遠端登入系統的權限以及關閉 SSH 服務反向解析的機制。此時的 CentOS 主機已經具備網路連通能力而主機的管理者也可以遠端管理主機了。

在下一篇基礎設定文章中,首先會探討如何透過 RunLevel 建立良好的使用者操作 Shell 環境。接下來則是建立良好的編輯檔案環境及設定 sudo 來限制及記錄管理者帳號 root 的使用記錄。最後則是談到設定套件管理工具 YUM ,將下載套件的來源指向至台灣本地鏡像網站,以加快軟體套件下載時間。

未完待續

Centos 基本操作 (中)

Centos 基本操作 (中)

 

前言

在上一篇文章 Centos 基本操作 (上) ,我們已經建立及設定好管理者用來遠端登入主機的一般使用者帳號,以及設定 CentOS 主機網路資訊,並測試能否與網際網路上主機連通。透過修改 SELinux 安全增強機制至寬容模式來了解 SELinux 的保護阻擋機制,以便為日後完全開啟 SELinux 安全增強機制鋪路。最後則是關掉預設的權限,不允許 root 管理者帳號遠端登入,以避免被網路上隨處可得的密碼暴力測試工具攻擊的機會
本文中將會先簡單介紹 CentOS Linux 的 7 種啟動模式等級 (RunLevel),解說每個啟動模式等級所分別代表的意義。再來則是設定使用者登入系統後的操作介面 Shell 以及編輯器 VIM 的環境參數設定,以便幫助您在操作 CentOS 作業系統及編輯檔案時能更加得心應手。設定操作介面及編輯器後,則是探討當每台主機同時擁有多個管理者的情況時,該如何記錄每個管理者登入主機後的操作情況。我們將會透過設定 sudo 來限制及記錄管理者提升到管理權限 root 的使用狀況。最後則會設定 CentOS 作業系統的套件管理工具 YUM 將套件的下載來源指向到台灣本地鏡像網站,以便縮短相關軟體套件的下載時間。

實作環境


* CentOS 5.5 32bit (Kernel 2.6.18-194.el5)
* vim-7.0.237
* sudo-1.7.2p1-5.el5
* yum-3.2.22-26.el5.centos

RunLevel 啟動模式等級


談到 CentOS Linux 的 RunLevel 啟動模式等級,便要先了解一下整個 CentOS 開機過程。透過下列的開機流程說明,便會了解到在 RunLevel 啟動模式,為何能夠掌控系統後半段開機階段的相關服務啟動及關閉。下列開機流程是以安裝於 x86 硬體上的 CentOS 進行說明:
1. 硬體伺服器 BIOS (INT 13H / EFI) 開機時會檢查連接於系統上的主硬碟 MBR / GPT 來載入開機管理程式(例如 GRUB、LILO等)。
2. 初始階段開機管理程式會載入記憶體並從 /boot 掛載點內啟動下一階段開機管理程式,舉例來說,GRUB 開機管理程式便是載入 /boot/grub/grub.conf 設定檔內容中的 initrd-2.6.18-194.el5.img 映像檔。
3. 這個階段中會將系統核心,以及必需的系統模組載入至記憶體內並且掛載於 root 分割區,此時也同步釋放未使用到的記憶體。請注意此時 root 分割區為唯讀狀態。
4. 當核心載入完畢,執行完硬體偵測及相關驅動程式載入後,接著便會將開機過程的控制權轉交給系統第一隻執行程式 /sbin/init 來準備設定使用者環境。
5. /sbin/init 程式將透過 /etc/inittab 設定檔來為系統載入適當的 RunLevel 相關設定,例如網路設定、相關服務啟動等,並且將 /etc/fstab 設定檔內所條列的掛載點,一一掛載至檔案系統。相關服務啟動完成,檔案系統掛載完畢,至此系統開機完成。
RunLevel (SysV init) 啟動模式等級可以分為 7 種等級分別是 0 ~ 6,而這 7 個數字所分別代表的意義如下:

* 0 (halt):系統關機,若您將 RunLevel 設為此模式,則會發現當開機程式完成後系統就直接關機。
* 1 (Single user mode):單人模式,通常在系統發生問題需要維護時才會進入此一模式。
* 2 (Multiuser without NFS):多人模式但沒有 NFS 網路功能,通常用於多人多工但不需要網路功能時,才會進入此模式。
* 3 (Full multiuser mode):多人文字模式,此模式為不需要進入視窗模式,並且具備完整網路功能的管理者所使用的模式。
* 4 (unused):尚未使用,使用者可以自行定義。
* 5 (X11):多人圖形模式,此模式為習慣使用視窗模式,並且具備完整網路功能的管理者所使用的模式。
* 6 (reboot):重新啟動,若您將 RunLevel 設為此模式則會發現當開機程式完成後,系統就直接重新啟動。
當您在安裝 CentOS 時若是由文字模式進行安裝過程,則系統預設使用的 RunLevel 便為 3。也就是文字模式 (Text mode)。若安裝過程選擇圖形模式進行安裝,則系統預設使用的 RunLevel 便為 5 也就是圖形模式 (GUI mode)。若您希望變更系統預設使用的 RunLevel 啟動模式等級,可以透過修改 “/etc/inittab” 設定檔內容來達成。下列操作步驟為將 RunLevel 3 修改為 RunLevel 5:
BasicII_01
▲圖1 修改 RunLevel 設定檔
那要如何得知目前所在的 RunLevel 啟動模式等級中,哪些服務是啟用的,哪些是關閉的呢?並且又該如何啟用某個服務或關閉某個服務呢?要達成上述目的有三個指令可以達成分別是 chkconfig、ntsysv、system-config-services 詳細差異及說明如下:
* chkconfig:此指令可以條列出指定的服務在每個 RunLevel 中的啟用或關閉狀態,您可以使用指令來將服務在某個 RunLevel 進行啟用及關閉的狀態,或者搭配參數 on / off 來一次將該服務在 RunLevel 2 ~ 5 進行啟用及關閉的狀態。
* ntsysv:此指令會開啟互動視窗,您只要將該服務勾選或取消勾選便是將該服務進行啟用及關閉,而該服務的啟用及關閉只會影響您目前所處的 RunLevel 啟動模式等級,例如您在文字模式 (RunLevel 3) 將 smartd 服務關閉則表示該服務只在 RunLevel 3 時不啟動,但在圖形模式 (RunLevel 5) 時該服務仍然會啟動。
* system-config-services:請注意此指令僅能在圖形模式下執行,透過圖形管理介面您可以輕鬆對該服務進行啟動 (Start)、停止 (Stop)、重新啟動 (Restart),若是勾選該服務則表示該服務在 RunLevel 5 為啟用狀態。
下列操作為透過 chkconfig 指令,當系統啟動於 RunLevel 3 啟動模式,查詢系統將會自動啟動哪些服務。還有如何透過 chkconfig 指令查詢及針對單一服務進行 RunLevel 啟動模式等級的啟用及關閉。最後則是啟動 ntsysv 的互動設定視窗及 system-config-services 圖形管理介面。
BasicII_02
▲圖2 查詢 RunLevel 3 所啟用的服務
BasicII_03
▲圖3 設定 smartd 服務於 RunLevel 3、5 啟用並查看狀態
BasicII_04
▲圖4 ntsysv 互動設定視窗
BasicII_05
▲圖5 system-config-services 圖形管理介面
常常會有 Linux 初學者詢問,若希望有程式或動作想要在系統開機時,如何自動啟動某些服務或執行某個動作,那該如何達成呢?您可以將相關執行動作寫入至 /etc/rc.local 設定檔內即可。或許您會有疑問為何寫入此檔案的內容會在開機時自動執行,您可以查看 RunLevel 3、5 的執行資料夾裡面有 S99local 的連結檔案,其內容便是連結指向至 /etc/rc.local 檔案,而在 RunLevel 資料夾中 S 開頭表示啟動 (Satrted) 而 K 表示關閉 (Killed),而數字 99 為啟動順序(數字愈小愈先啟動),這也就是為何寫入 /etc/rc.local 檔案中的內容會在開機時被執行的原因。
BasicII_06
▲圖6 查看 RunLevel 3、5 資料夾 S99local 檔案內容

設定 tcsh Shell 操作環境


對於許多 Linux 的使用者來說習慣的 Shell 應該是系統預設使用的 bash (Bourne-Again Shell),CentOS 預設支援的 Shell 除了有 bash 之外還支援 sh (Bourne Shell)、csh (C Shell)、tcsh (TENEX C Shell)、ksh (Korn Shell) 等 Shell。筆者個人習慣於 tcsh Shell 操作環境來管理機器,基本上使用哪種 Shell 全憑個人使用習慣也就是順手即可。下列的相關設定值及環境參數將以筆者習慣的 tcsh Shell 來進行舉例說明。

使用 tcsh Shell 在不設定任何參數的情況下,便可以擁有按下【Tab】鍵,即自動補齊檔名及搜尋上一次輸入指令的功能。所謂【Tab】鍵補齊檔名功能是什麼意思呢?舉個例子來說,假如我們想要查看主機的日期及時間資訊時,會鍵入 date 指令,當輸入 da 之後便按下【Tab】鍵,此時作業系統會尋找系統中 da 開頭的相關指令,由於系統中 da 開頭的指令只有二個分別是 date 及 dateconfig。因此當按下【Tab】鍵進行補齊檔名功能時便會先自動補齊為 date 指令。

tcsh Shell 的補齊檔名功能不僅僅能使用於指令方面,對於檔案及目錄也具有相同的功能。以搜尋上一次輸入指令的功能為例,分別輸入了 ls 某個目錄內容及 cd 到某個目錄內,當您想要再次執行時只要打 ls 再按【上方向鍵】則 tcsh Shell 會自動找出最近執行過開頭為 ls 的指令,這樣的功能對於操作作業系統來說非常方便。

除了預設的功能之外我們可以設定 tcsh Shell 的環境變數來加強操作的便利性,以剛才測試補齊檔名功能執行的 date 指令來說,其實該指令的完整路徑為 /bin/date,但是為何當我們輸入 date 指令按下 Enter 鍵後便可順利執行該指令?這是因為預設的 tcsh Shell 環境設定檔中已經將作業系統經常會使用到的指令路徑載入環境變數中(參數 PATH),因此我們才可以在不用鍵入絕對路徑的情況下直接執行相關指令。

以使用 tcsh Shell 為例當使用者登入 CentOS 主機後,該使用者帳號會依序載入 /etc 資料夾下的二個通用環境設定檔,分別是 csh.cshrc 及 csh.login,接著則是載入個人家目錄下的 .cshrc 及 .login 個人環境設定檔。而當管理者設定的通用環境設定檔與個人環境設定檔內容發生衝突時系統會以套用個人環境設定檔為最後結果(最後套用的設定值為準)。再設定以前先確定該使用者帳號所使用的 Shell 您的 Shell 環境設定檔才能正確進行套用,以下為筆者個人習慣設定於個人家目錄下 .cshrc 的個人環境設定檔內容:
BasicII_07
▲圖7 查詢使用者帳號所使用的 Shell 及 tcsh Shell 個人環境設定檔內容

設定 VIM 編輯器操作環境


VI (Visual Interface) 為 Unix-Like 預設內建的檔案編輯器,然而此編輯器對於 Linux 初學者來說比較容易感覺到使用不易。CentOS 作業系統預設會安裝較容易使用而且功能更為強大的檔案編輯器 VIM (Vi Imitation) ,建議 Linux 初學者可以使用此編輯器進行檔案編修,相信可以較為順手。與 tcsh Shell 相同的觀念,VIM 檔案編輯器預設功能雖然已經很強大,但是您仍可以依需求加上相關參數設定使得 VIM 編輯器更為強大更為貼近您的使用需求。以下為筆者個人習慣設定的 VIM 參數設定值:
BasicII_08
▲圖8 VIM 環境設定檔內容

設定 sudo 帳號管理機制


在 CentOS 作業系統當中 root 使用者帳號被稱為超級使用者帳號,此帳號為整個作業系統中權限最大的管理帳號,權限大到可以直接將作業系統自我毀滅。由於 root 超級使用者帳號權限如此之大,因此筆者在此強烈建議您應該使用一般使用者帳號登入主機進行操作,待需要執行的動作需要提升權限時才切換為管理帳號進行操作,以免因為一時疏忽或者不慎手誤,造成系統或服務損壞。

當您所管理的 CentOS 主機同時擁有多個管理者進行管理時,您該如何確定是其中哪個管理者使用了 root 管理帳號對系統做了什麼事情?例如當您想要得知是哪個管理者在哪個時間切換為 root 管理帳號並且對系統執行了哪些指令,傳統的切換方式 su – 就不符合這樣的需求了,有鑑於此我們可以透過設定 sudo 來達成這樣的查核需求。

Sudo 套件就是為了彌補作業系統中內建的身份切換指令 su 不足所發展出來的軟體套件,透過設定此套件後我們可以建立相關的使用者權限群組,並且給予不同權限的指令來達到控管使用者權限的目的,同時配合相關參數設定我們可以隨時查閱哪位使用者執行過 sudo 指令來提升權限,並且能查出該使用者對於系統在權限提升之後執行了哪些動作,以便進行事後的追查。

首先請先使用 rpm 及 which 指令來查詢系統中是否已經安裝 sudo 套件(預設情況下會安裝此套件)以及相關指令是否存在,確認目前系統中有安裝此套件時請接著使用 visudo 指令來修改 sudo 設定檔內容。建議您不要使用 VI 或 VIM 編輯器來修改 sudo 設定檔,原因除了 visudo 指令會自行尋找 sudo 設定檔 (/etc/sudoers) 並且進入編輯模式之外,當我們修改完成後若設定檔內容中有發生語法或斷行等錯誤時,系統會在顯示警告訊息提醒我們哪裡發生語法錯誤。
BasicII_09
▲圖9 查詢系統是否安裝 sudo 套件及相關指令
在此次實作中我們會修改 sudo 設定檔內容為將 wheel 群組那行的註解符號拿掉,並且加上 Log 記錄檔的內容 (/var/log/sudo.log),當此 sudo 設定檔設定完畢後,後續只要有人執行 sudo 指令提升權限至管理者身份時便會觸發到剛才設定檔中的 Log 設定,此時系統會自動產生 Log 檔案並將相關資訊寫入其中。相關操作如下所示:
BasicII_10
▲圖10 修改 sudo 設定檔內容及加上查核記錄設定


上述 sudo 設定檔內容中表示只要屬於 wheel 群組內的使用者帳號,便可以使用 sudo 指令來暫時提升權限為管理者帳號進行操作。當使用者第一次執行 sudo 指令時系統會再次詢問該使用者密碼,當成功通過密碼驗證 (Authentication) 之後便會暫時切換授權 (Authorization) 身份為管理者帳號 root 來執行其指令,並且在 5 分鐘之內若該使用者再次執行 sudo 指令時,系統便不會再次詢問使用者密碼。

接下來我們著手來測試剛才設定的 sudo 記錄檔機制是否正常運作,請您另外開啟一個 SSH Client 視窗並使用一般使用者帳號遠端登入 CentOS 主機。例如使用 weithenn 這個一般使用者帳號(請確定該使用者帳號已加入 wheel 群組)登入系統並嘗試執行 vipw 指令試圖修改使用者帳號設定檔內容,相信會得到權限被拒絕 (Permission denied) 的錯誤訊息回應。此時您可以使用 sudo 指令搭配剛才的 vipw 指令再次執行即可修改使用者帳號設定檔內容。
BasicII_11
▲圖11 配合 sudo 指令修改使用者帳號設定檔

當上述指令執行完畢後您可以接著查看 sudo 記錄檔便會看到相關的記錄內容,從 sudo 記錄檔內容中我們可以確定 sudo 記錄檔機制目前正確運作中。從 sudo 記錄檔中可以清楚得知是在什麼時間點 (Jun 7 17:30:22)、哪個系統使用者帳號 (weithenn)、在哪一台主機上 (centos5)、從遠端登入此台主機 (pts/3)、在系統中哪個路徑 (/home/user/weithenn)、切換成什麼身份 (root)、執行什麼指令 (/usr/sbin/vipw)。
BasicII_12
▲圖12 查看 sudo 記錄檔內容

確定 sudo 指令及記錄檔均正確運作後筆者習慣將 root 管理者帳號的密碼給封鎖起來,因此屆時這台主機的管理者們進行主機管理時,便會習慣使用自己的一般使用者帳號登入並配合 sudo 指令,在需要的時候才提升為管理者權限進行管理,不致一登入主機後便習慣使用 su – 來切換成為 root 管理者帳號逃避查核機制。要封鎖 root 管理者密碼請先將權限提升為 root 後,執行 vipw 指令修改 /etc/shadow 檔案,將第二個欄位(密碼欄位)內容修改為 * 即可。
BasicII_13
▲圖13 封鎖 root 管理者帳號的密碼

YUM 套件管理工具


絕大部份的開放原始碼軟體皆採用 Tarball 的形式進行發布,而在 Linux 上為了解決使用 Tarball 必須要解壓縮、檢測 (./configure)、編譯 (make)、安裝 (make install) 等繁鎖步驟,因此發展出 RPM(The RPM Package Manager) 來簡化整個安裝流程。雖然 RPM 安裝機制簡化了整個安裝流程但卻無法解決套件相依性及套件相衝突的問題,舉例來說您可能安裝 A RPM 時系統顯示您必須要先安裝 B RPM(套件相依性),而當您下載及安裝 B RPM 時又說需要安裝 C RPM(套件相依性),當您好不容易又下載及安裝 C RPM 時卻出現此 RPM 跟 A RPM 互相衝突,碰到這種情況時在以往您只能手動排除這種套件衝突的狀況了。

YUM (Yellow dog Updater Modified) 套件管理工具便是解決上述 RPM 套件相依性及相衝突的問題而發展出來的套件管理解決方案。此套件管理工具能從指定的套件伺服器上自動下載相對應的 RPM 套件包至系統進行安裝,並且當出現套件相依性時能自動下載及安裝相關聯的 RPM 套件,同時會盡量避免發生套件衝突的情況。YUM 能夠有效簡化軟體套件安裝流程並解決惱人的套件相依性及相衝突的問題,使得軟體套件在安裝、移除、升級程序上變得非常容易。

預設 YUM 下載套件的來源伺服器為國外網站,我們可以透過修改 YUM 設定檔 (/etc/yum.repos.d/CentOS-Base.repo) 將下載套件的鏡像網站指定至台灣境內各所大學或機構。目前台灣可以使用的鏡像網站約有 8 個(如下所示),請您依個人網路狀況選擇較適合您的網路環境進行設定以便加快套件下載速度,或者參考 CentOS 鏡像網站清單選擇位於您國家內的鏡像網站:

* 元智大學:http://ftp.cse.yzu.edu.tw/pub/CentOS/
* 靜宜大學:http://ftp.cs.pu.edu.tw/Linux/CentOS/
* 中山大學:http://ftp.nsysu.edu.tw/CentOS/
* 義守大學:http://ftp.isu.edu.tw/pub/Linux/CentOS/
* 樹德科技大學:http://ftp.stu.edu.tw/Linux/CentOS/
* 台中縣教網中心:http://ftp.tcc.edu.tw/Linux/CentOS/
* Hinet IDC:http://mirror01.idc.hinet.net/CentOS/
* 國家高速網路與計算中心:http://ftp.twaren.net/Linux/CentOS/

下列操作步驟為將 YUM 設定檔中鏡像網站由預設的國外修改為國內的元智大學:
BasicII_14
▲圖14 修改 YUM 設定檔指向至國內的元智大學

上述設定完成後您便可以開始使用 YUM 配合相關指令管理套件,但是在開始以前筆者建議您先手動更新 CentOS 的主機時間,以免後續管理相關套件時因為本機系統時間與 YUM 鏡像網站時間差異過大造成不可預期的錯誤。在後續文章中會說明如何設定 CentOS 主機自動與網際網路上的主機定時校對系統時間。

BasicII_15
▲圖15 與網際網路 NTP 時間伺服器進行時間同步並同步至 BIOS 內


下列條列出使用 YUM 套件管理工具時常常會使用到的指令及相關參數意義:

* yum check-update:套件更新檢查,將目前系統上安裝的套件與 YUM 鏡像網站進行檢查比對後列出需要更新套件的清單。
* yum update:套件更新,檢查及比對系統需要套件更新的清單後詢問您是否要更新套件,您可以配合參數 –y 對所有詢問一律回答 yes 來允許所有套件更新。
* yum install <套件名稱>:安裝套件,執行從 YUM 鏡像網站下載指定套件並進行安裝,收集相關資訊後會詢問您是否確定要安裝,您可以配合參數 –y 對所有詢問一律回答 yes 來安裝指定套件及其相依性套件。
* yum remove <套件名稱>:移除套件,移除您指定的套件名稱,收集相關資訊後會詢問您是否確定要移除該套件,您可以配合參數 –y 對所有詢問一律回答 yes 來移除指定的套件及相依性套件。
* yum clean all:清除暫存資料,清除使用 YUM 套件管理工具下載 RPM 進行安裝時的暫存檔案。
* yum search <套件名稱或關鍵字>:搜尋套件,您可使用已經知道的套件名稱或者有關於套件的關鍵字來進行搜尋的動作。
* yum list:顯示可安裝套件清單,顯示您指定的 YUM 鏡像網站中所支援安裝的所有套件名稱。
* yum info <套件名稱>:套件資訊,顯示您指定的套件其詳細資訊,例如適用平台、套件版本、套件大小、套件功能描述、套件授權資訊、套件官方網址等資訊。
* yum grouplist:顯示可安裝的套件群組清單,顯示您指定的 YUM 鏡像網站中所支援安裝的所有套件群組名稱。
* yum groupinstall <套件群組名稱>:安裝套件群組,執行從 YUM 鏡像網站下載指定套件群組中相關套件並進行安裝,收集套件群組相關資訊後會詢問您是否確定要安裝,您可以配合參數 –y對所有詢問一律回答 yes 來安裝指定套件及其相依性套件。
* yum groupremove <套件群組名稱>:移除套件群組,移除您指定的套件群組,並且在系統收集相關資訊後,會詢問是否確定要移除該套件群組中所有套件,您可以配合參數 –y 對所有詢問一律回答 yes 來移除指定的套件群組。
* yum groupinfo <套件群組名稱>:查詢套件群組資訊,查詢指定的套件群組資訊及功能描述,並且將顯示此套件群組中預設會安裝的套件清單 (Default Packages)、強制安裝的套件清單 (Mandatory Packages)、選擇安裝的套件清單 (Optional Packages)。

由於 YUM 套件管理工具實際上也是幫助我們對 RPM 套件包進行管理的工作,其實底層的安裝、移除、升級等動作仍是使用 RPM 套件,因此我們仍可以使用 rpm 指令來幫助我們了解及管理套件,例如我們使用 YUM 套件管理工具為 CentOS 主機安裝 VNC Server 套件後我們可以使用 rpm 指令來了解剛才安裝的 VNC Server 套件、設定檔及服務啟動檔在哪裡。

BasicII_16
▲圖16 利用 rpm 指令查詢套件版本、設定檔、服務啟動檔

結語


本文首先討論 RunLevel 啟動模式等級使讀者可以概略了解一下整個 CentOS 開機過程,相信對於後續的主機管理是有幫助的,接著說明及設定使用者登入 CentOS 主機後第一件事 Shell,筆者以設定 tcsh Shell 為例進行實作,將 Shell 環境設定好相信對於管理主機上會更加得心應手。再來則是設定 VIM 檔案編輯器設定讓您日後編輯相關設定檔更加順手。

接著我們討論到利用 sudo 套件來限制及記錄管理者所做的操作,像是誰透過 sudo 指令把權限提升為 root 管理者帳號,並且對 CentOS 主機在什麼時間點執行了什麼指令或動作,以便後續的稽核動作得以執行。並且將 root 管理者密碼封鎖以避免有管理者貪一時之便直接使用 su – 指令轉換為 root 管理者帳號權限,最後則是說明如何將 YUM 套件管理工具的套件下載鏡像網站由預設值的國外修改為國內鏡像網站以便節省套件下載時間,同時也說明常用的 yum 及 rpm 指令及其說明。

在下一篇文章中也就是 CentOS 基礎設定的最後一篇我們將會討論,當主機上線運作如何定期將系統的相關記錄例如安全性記錄、磁碟空間使用狀況、登入資訊等定期寄送給管理人員,以及探討如何對遠端登入服務 SSH 做基本的安全性設定,還有主機該如何定時自動與網際網路上的時間伺服器進行時間校對。最後則是了解系統啟動哪些服務、開啟哪些相對應的 Port 以及關閉系統上不必要的服務,最後則是安裝 RPMforge 來增加可安裝的套件數量。

未完待續

Centos 基本操作 (下)

Centos 基本操作 (下)

 

前言

在前二篇文章 Centos 基本操作 (上) 以及 Centos 基本操作 (中),我們學習了 CentOS 主機的基礎設定。這些設定分別是:建立一般使用者帳號以便管理時使用;網路連線設定及連通測試;了解 SELinux 安全增強機制;將遠端允許 root 管理帳號登入的權限移除,以降低 CentOS 主機被密碼暴力測試工具攻擊的機會;了解 CentOS 主機的啟動流程,以及知悉何謂啟動模式等級 RunLevel;建立順手的操作環境 Shell 及檔案編輯器 VIM 環境設定;透過 sudo 建立管理者帳號的使用機制;將套件管理工具 YUM 下載來源由國外重新指向至台灣本地鏡像網站,以便縮短軟體套件及相依套件的下載時間。

本篇文章是 CentOS 基礎設定系列文章的最後一篇。首先要學習的是,當 CentOS 主機安裝設定完成後設定上線運作的方法,使系統定期自動寄送系統的相關記錄,並發至 CentOS 主機管理人員的郵件信箱內。這些相關紀錄包含:主機硬碟空間的使用率、郵件發送情況、網路服務運作狀況等資訊。因此企業中忙碌的 IT 管理人員,每天僅需檢查所收到的系統資訊郵件內容、檢查磁碟空間是否足夠、注意主機有無被攻擊的狀況等,並進行適當的調整即可,而不需要每天手動遠端登入至 CentOS 主機查看相關訊息,以節省寶貴的時間。

接下來學習的是,CentOS 遠端連線 SSH 的基本安全性保護設定,並在主機上線後,將系統時間定時自動與網際網路上的時間伺服器,或者與企業內部自行架設的時間伺服器校對時間。了解系統在進入啟動模式等級 RunLevel 後,會將哪些服務啟動,以及開啟哪些相對應的 Port。同時視系統需求關閉不必要的服務,以減少系統的負載並降低系統被攻擊的機會。最後,則是透過安裝 RPMforge,來增加 YUM 套件管理工具中可安裝的套件數量。
實作環境
* CentOS 5.5 32bit (Kernel 2.6.18-194.el5)
* sendmail-8.13.8-8.el5
* logwatch-7.3-8.el5
* xinetd-2.3.14-10.el5
* tcp_wrappers-7.6-40.7.el5
* pstree (PSmisc) 22.2
* yum-3.2.22-26.el5.centos
* rpmforge-release-0.5.2-2.el5
收集系統資訊後定期寄送給管理人員
當 CentOS 主機安裝、設定完畢並上線運作之後,我們希望主機能夠在固定時間(如每小時、每天、每週、每月)發送相關資訊至主機管理人員清單位址,讓主機管理人員能獲取系統上的服務運作狀態和硬體使用狀況相關資訊。主機的管理人員只要定期查看每台管理主機的資訊郵件內容,即可進行適當的處理,或轉交給相對應的人員接手處理。

CentOS 主機的預設排程為每小時的 01 分、每天凌晨 4 點 02 分、每週日凌晨 4 點 22 分,以及每月 1 號凌晨 4 點 22 分。此時,系統會執行預先撰寫好的自動維護 Shell Script 執行檔,進行系統相關的清理及備份工作,並使用預設的郵件轉送代理 (Mail Transfer Agnet, MTA) Sendmail 寄送資訊郵件。欲使用別的郵件轉送代理像是 Postfix、Qmail 等 ,屆時只要在設定檔內進行指定即可。若讀者有興趣了解系統定期執行的詳細內容,可切換至 /etc 目錄下的四個資料夾,分別是:每小時 (cron.hourly)、每天 (cron.daily)、每週 (cron.weekly)、每月 (cron.monthly),每個資料夾內都有相關的自動維護 Shell Script ,查看後即可了解系統維護主機的相關內容。

basic3_01
▲ 圖1 查看主機系統排程資訊
在 CentOS 系統中,LogWatch 套件負責收集系統狀態及相關網路服務運作資訊(預設情況下會安裝至系統)。我們可以在每天定期發送的 cron.daily 資料夾中,發現 0logwatch 這隻 Script。也就是說,系統會在每天凌晨 4 點 02 分時,透過此 Script 將系統中系統、硬體、服務的資訊收集後,寄送給各個管理者。接下來便說明相關資訊的設定方法,如:由哪台主機寄出收集後的資訊、寄件對象、系統資訊收集分析的等級、收集主機服務運作的狀態設定等。

我們可以將相關設定值寫入至 LogWatch 設定檔 "/etc/logwatch/conf/logwatch.conf" 內,操作中相關設定值參數及說明如下:

* MailFrom:通常填入此台主機的主機名稱 (Hostname),或是該主機所擔任的企業服務名稱(如 Web1)。
* MailTo:填入管理者們的郵件信箱 (Email)。若有多筆郵件位址,則使用逗點 (, ) 加上空格進行隔開即可。
* Detail:指定收集主機資訊後分析的等級,共有三種等級可供選擇。分別為低級(Low 或數字 0)、中級(Med 或數字 5)、高級(High 或數字 10)。
* Service:指定收集主機服務運作的項目,LogWatch 支援收集服務的項目為 /usr/share/logwatch/scripts/services 目錄下的服務名稱,您可以使用參數 All 來表示要收集該主機所有運作的服務。若不想分析某個服務,則可於服務名稱前加上減號 ( - ),則系統便會排除收集該項服務的運作狀態。

下列為筆者的 LogWatch 設定檔設定內容,若您需要更詳細的參數設定內容可參考 "/usr/share/logwatch/default.conf/logwatch.conf" 設定檔內容

basic3_02
▲ 圖2 LogWatch 設定檔內容

設定完畢之後,CentOS 主機便會自動於每天凌晨 4 點 02 分時,收集主機資訊後寄送至管理者郵件信箱內。如果您想要立即收到資訊郵件,可以手動執行 logwatch 指令,命令主機立刻收集資訊並寄送郵件,或配合參數 --print 直接顯示收集到的資訊,查看收集到的資訊而不寄送郵件(此資訊和資訊郵件的內容完全相同)。您還可以配合參數 --service ,僅顯示收集的服務名稱運作狀態。

basic3_03
▲ 圖3 logwatch 查看指令以及立即寄送資訊郵件操作

如果您已經設定完成,但並沒有定期收到資訊郵件的話,可以先用 mailq 指令,查看郵件是否被佇列 (Queue) 住。接著,檢查郵件記錄檔 /var/log/maillog 內容以及主機的 DNS 設定,分析並查找管理者沒有定期收到主機所收集資訊郵件的原因。此外,由於系統會在隔一段時間後才送出郵件,若您執行 logwatch 指令寄送郵件時,發現郵件在郵件佇列中而未立即寄出,可執行 sendmail 指令,配合參數 –q,使主機立刻寄出郵件佇列中所有郵件。

basic3_04
▲ 圖4 檢查郵件佇列及查看郵件記錄檔以及立刻寄送郵件出去

basic3_05
▲ 圖5 管理人員收到的每日系統資訊郵件內容
SSH 基礎安全防護設定
在 CentOS 主機中,我們可以利用許多機制來保護主機服務。IPTables 防火牆功能強大,是安全防護選項之一,但本文中並不打算講解有關 IPTables 防火牆設定(若要講解的話得再開一系列文章),而是要介紹另一個設定簡單,有一定保護程度的安全機制 TCP Wrappers 達到保護 SSH 遠端連線服務的效果。此服務與系統內的 xinetd 服務有很深的關聯,下圖便清楚表達了當網路封包進入 CentOS 主機時,Firewall、TCP Wrappers 及 xinetd 服務的封包走向關係圖。

basic3_06
▲ 圖6 圖片來源 CentOS 官方網站 Deployment_Guide - 42.5. TCP Wrappers and xinetd,採用 Open Publication License

預設情況下,TCP Wrappers 在安裝 CentOS 主機過程中便已安裝完成。而顧名思義,此安全防護機制僅能保護 TCP daemon,而無法保護 UDP daemon(仍有例外狀況)。相信您會接著問,那 TCP Wrappers 能夠保護主機上哪些服務項目呢? 答案是,只要該服務中含有 libwrap 函式庫 (Library),即可受到 TCP Wrappers 保護。經由下列操作,我們便可了解如何檢查該服務內是否含有 libwrap 函式庫。在圖 7 中,我們可以看到 SSH 服務 (sshd) 含有 libwrap 函式庫,而 Apache 服務 (httpd) 則沒有包含 libwrap 函式庫。所以雖然都是 TCP daemon ,但 TCP Wrappers 可以保護 SSH 服務,而無法保護 Apache 服務。

basic3_07
▲ 圖7 查詢 TCP Wrappers 是否可以保護該服務

接著要說明的是 TCP Wrappers 的保護規則。在安全防護設定上,TCP Wrappers 非常簡單易懂,不像防火牆設定那麼複雜。其安全防護規則採用 First Match 方式,意即先讀取到的規則直接套用執行後,便不需要理會後面的規則。

TCP Wrappers 的防護規則分為 "/etc/hosts.allow" 及 "/etc/hosts.deny" 二個設定檔。這二個設定檔中,首先讀取的設定檔為 hosts.allow,若此設定檔中有設定服務名稱,則允許封包通過,接著讀取 hosts.deny 則為禁止封包通過。筆者建議僅設定 "/etc/hosts.allow" 設定檔便可達到防護效果。

在修改 TCP Wrappers 保護規則設定檔 (/etc/hosts.allow) 以前,我們先了解設定檔的內容及相關參數的意義。設定檔內容可以分成三個小區段來看,分別是「服務名稱 (deamon)、來源 IP 位址或網域名稱 FQDN、連線回應為允許 (allow) 或拒絕 (deny)」。每個小區段之間使用冒號 (:) 作為分隔符號,在前面二個小區段中並支援相關進階參數,使保護規則運作更靈活。但是,若使用 KNOWN、UNKNOWN、PARANOID 參數時,請注意此三個參數是依靠 DNS 名稱解析服務,因此必須要注意主機上的 DNS 名稱解析是否運作正常,相關進階參數說明如下:

* ALL:表示 「全部 」,用於第一個小區段(服務名稱欄位)表示全部服務,用於第二個小區段(連線來源)表示全部的 IP 位址或網域名稱 FQDN。
* LOCAL:表示「本機」,也就是不含點 (.) 的主機名稱例如 localhost。
* KNOWN:表示「可解析主機」,也就是可以解析其 IP 位址及網域名稱 FQDN。
* UNKNOWN:表示「無法解析主機」,也就是無法解析其 IP 位址及網域名稱 FQDN。
* PARANOID:表示「正反解析必須一致」,也就是 DNS 正解(FQDN 解析 IP 位址)及 DNS 反解(IP 位址解析 FQDN)二者的解析記錄必須一致。
* EXCEPT:表示「排除」的意思,例如允許 192.168.1.0 這個網段的所有主機,但排除 192.168.1.99 這個 IP 位址。

在設定之前,還有三個小地方要提醒讀者注意。首先是來源 IP 網段的遮罩設定值,TCP Wrappers 支援的網路遮罩為 255.255.255.0 這種型式,而不是 /24 這種 CIDR 表示方法。若您設定 /24 這種網路遮罩,則該行防護設定規則將無法運作(但若是來源位址使用 IPv6 位址則支援此種表示方法)。第二點要注意的是,修改 TCP Wrappers 設定檔內容後,當您存檔離開的那一剎那,所設定的防護內容便立刻生效(不需要重新啟動或載入 xinetd 服務)。最後要注意的是,防護規則僅套用於「新進 Session」,也就是說,設定阻擋規則時主機上若已經存在有舊的連線 Session,並不會自動斷線離開,而是新進來的 Session 才會阻擋。

CentOS 在預設情況下並不會安裝 xinetd 套件,我們可以透過前一篇介紹的 yum 指令來安裝 xinetd 套件。此次我們以防護主機上的 SSH 服務為例,設定只有允許的 IP 網段可以使用 SSH 遠端登入此台 CentOS 主機(允許連線後接著才進行使用者帳號及密碼驗證),並且拒絕允許的 IP 網段中,其中一台主機的連線要求。最後,其餘的 IP 位址欲嘗試使用 SSH 遠端登入主機時,則拒絕其連線要求。由於已經拒絕連線要求封包,因此主機自然就不需要回應使用者帳號及密碼的驗證動作,此舉能夠有效減低 CentOS 主機被進行密碼暴力測試工具攻擊的機會,提升主機整體安全性。

下列操作步驟包含利用 yum 套件管理工具安裝 xinetd 套件,查看 xinetd 服務是否在 CentOS 主機啟動時自動啟動 xinetd 服務,確認無誤後啟動 xinetd 服務。接著設定 TCP Wrappers 設定檔 (/etc/hosts.allow),其內容為允許 192.168.1.0 整個 C Class 網段主機 SSH 遠端連線至此台 CentOS 主機,除了 192.168.1.99 禁止連接。最後,其餘 IP 網段若發出 SSH 遠端連線要求時,則直接拒絕該連線封包。

basic3_08
▲ 圖8 安裝 xinetd 套件及設定 TCP Wrappers 安全防護規則

上述 TCP Wrappers 防護規則設定完成後,我們可以進行驗證,檢查剛才設定是否生效。我們由 192.168.1.99 主機對目前 CentOS 主機 (192.168.1.50) 發出 SSH 遠端連線要求,並得到 Connection closed 的連線拒絕回應。在 CentOS 主機上,我們查看 secure 記錄檔也可看到 192.168.1.99 主機嘗試 SSH 遠端連線此台主機,並遭到拒絕連線 (refused connect) 的回應。而 192.168.1.0 網段中的其它主機發出 SSH 連線要求時,則會出現驗證帳號密碼的動作。

basic3_09
▲ 圖9 驗證 TCP Wrappers 防護規則是否生效

經過上述實作驗證後,相信讀者已經了解如何用簡單的 TCP Wrappers 安全防護規則,來保護 CentOS 主機。若您認為 TCP Wrappers 只有這些功能的話,那您就大錯特錯了。TCP Wrappers 支援更進階的安全防護規則內容,例如嘗試連線記錄、結合 Shell 指令等功能。但是在這些進階的防護功能中, 嘗試連線記錄必須要搭配系統的日誌服務 (syslogd) 才得以運作,而結合 Shell 指令功能,除了必須對系統指令有一定程度了解之外,還必須了解如何搭配相關的參數,才得以發揮強大效果。建議有興趣更深入的讀者,可以參考 CentOS 官方文件 Deployment_Guide - 42.5. TCP Wrappers and xinetd 內有進階設定的詳細說明。

系統時間自動校對

網路時間協定 NTP (Network Time Protocol) 最初由德拉瓦州大學 (Delaware University) 的大衛米爾斯 (David L. Mills) 所設計,主要目的為透過網路封包交換 (UDP Protocol, Port 123),將二端電腦的時鐘進行同步校對。若讀者想更詳細了解整個 NTP 協定的規範、實作、分析等詳細內容,請參考 RFC 1305 (NTP version 3)、RFC 5905 (NTP version 4)。

企業營運環境的伺服器為數眾多,倘若伺服器之間的時間不同步,可能會造成許多影響。例如伺服器之間的時間誤差超過 5 分鐘時,則將導致 Kerberos 的驗證失敗;或者,當企業購物平台的前端 AP 伺服器與後端資料庫伺服器時間不同步時,則使用者下單記錄可能在資料庫伺服器上顯示為未來時間,或是優惠活動時間明明已經結束,但使用者仍然可以下單購買,造成客服人員的困擾;再者,公司財務報表產生時,若伺服器之間的時間不同步,則會造成財務報表合併時在核對上出現困擾。以上舉例的種種問題,追究其原因,便是由於眾多伺服器之間時間不同步所造成。

在此次設定中,我們為 CentOS 主機安裝 OpenNTPD 客戶端,來進行系統運作時間校對。OpenNTPD 客戶端與一般的 NTP 客戶端時間校對方式有著明顯的不同,一般 NTP 客戶端的時間校對方式為「強迫性一次調整到位」,也就是不管現在系統時間,一律直接跟 NTP 伺服器校對後調整。偏向暴力性的一次到位調整時間的方式,在某些狀況下可能會對主機運作穩定性上產生問題。而此次安裝的 OpenNTPD 客戶端的時間校對方式為:當 OpenNTPD 客戶端與 NTP 時間伺服器有時間誤差時,OpenNTPD 客戶端會將主機每隔幾分鐘進行系統時間「微調」,慢慢調整,直到最後與時間伺服器上的標準時間達成一致。這樣溫和的時間調整方式,對於要求高穩定性的企業營運環境伺服器來說,相對而言是比較適合的。

在安裝 OpenNTPD 客戶端以前,請您先使用 rpm –qa 指令來確認 CentOS 主機是否已經安裝 gcc 及 make 套件(若系統沒有安裝,請使用 YUM 套件管理工具進行 yum –y install gcc make 安裝指令),以便在安裝 OpenNTPD 套件時能順利進行編譯 (Compile) 與安裝 (make)。在設定前,您可以故意先將 CentOS 主機系統時間調慢 5分鐘,待之後啟動 OpenNTPD 服務後,即可發現系統開始跟 NTP 時間伺服器慢慢進行時間校對。

在 CentOS 預設的 YUM 套件管理工具中,並未收錄 OpenNTPD 軟體套件,因此請自行從 OpenBSD 的鏡像站台下載、解壓縮、編譯,並安裝 OpenNTPD 套件。下列操作步驟為先利用 wget 指令下載 OpenNTPD 套件至 /tmp 資料夾下,並將 OpenNTPD 套件檔案解壓縮後執行 ./configure、make、make install 等指令,將 OpenNTPD 套件編譯並進行安裝。

basic3_10
▲ 圖10 OpenNTPD 套件下載、解壓縮、編譯、安裝

在上述最後執行套件安裝的動作 make install 時,我們可以看到,系統提示我們必須要為系統建立 _ntp 的使用者帳號及群組,以便屆時使用 _ntp 使用者帳號來啟動 OpenNTP 服務,而非使用 root 管理者帳號,以避免安全性問題。因此安裝完畢後,請使用 useradd 及 groupadd 指令,配合相關參數來新增 _ntp 使用者帳號及群組,接著設定 OpenNTPD 設定檔,指向至企業內部所架設的 NTP 伺服器或網際網路上的 NTP 伺服器 IP 位址。接下來如圖11 將 NTP 伺服器指向至國家時間與頻率標準實驗室,進行時間校對。最後,設定 OpenNTPD 記錄檔來記錄主機時間校時的狀況,並在完成後重新載入系統日誌服務 syslogd,讓其變更生效即可。

basic3_11
▲ 圖11 完成 OpenNTPD 客戶端相關設定,並建立記錄檔了解校時狀況

接著將 OpenNTPD 新增至 CentOS 內建的服務清單內,設定當 CentOS 重新開機時能夠自動啟動 OpenNTPD 服務,自動與國家時間與頻率標準實驗室 NTP 伺服器進行時間校對作業。完成設定後即可啟動 OpenNTPD 服務,並透過剛才建立的記錄檔來觀察目前主機與 NTP 伺服器進行時間校對的情況。

basic3_12
▲ 圖12 新增 OpenNTPD 為系統服務並查看主機校時情況

查看系統啟動服務及監聽 Port 號


了解系統啟動的服務以及該服務開啟的相應 Port ,也是主機安全防護的基本功。我們可以使用內建的 netstat 指令,配合 –tunpl 參數,顯示系統目前啟動服務及協定等相關資訊。使用到的 5 個參數意義為 t (TCP)、u (UDP)、n(IP 位址及 Port 號)、p(PID 名稱)、l (Listen) 服務,這些指令執行後顯示出來的相關欄位解釋如下:

* Proto:服務運作的協定,通常為 TCP 或 UDP Protocol
* Recv-Q:收到的封包 Bytes 數量
* Send-Q:傳送的封包 Bytes 數量
* Local Address:本地端的 IP 位址及 Port 號
* Foreign Address:遠端主機的 IP 位址及 Port 號
* State:連接狀態,此例中僅顯示 Listen 狀態,實際上還有已建立連線 (ESTABLISHED)、連線結束等待 Socket 關閉 (TIME_WAIT)、主動連線 SYN 封包 (SYN_SENT)、連線要求 SYN 封包 (SYN_RECV)等狀態。
* PID/Program name:該程序 (Process) 的名稱

basic3_13
▲ 圖13 查看主機目前啟動的服務及相對應的 Port 號

透過運用 netstat 指令了解 CentOS 主機執行哪些服務 (daemon),與開啟哪些 Port 號之後,我們可以進一步透過了解執行序,在系統或服務出現問題後利於除錯。若只是要查詢系統有哪些執行序時,我們可以使用內建的 ps 指令,配合相關參數進行查詢。但若是想要了解執行序的樹狀結構(意即母程序及子程序的樹狀關系)時,內建的 ps 指令可能就略顯不足。此時可以配合 pstree 套件來輔助我們即時了解執行序樹狀結構,例如我們查詢剛才執行的校時程序 ntpd 的執行序樹狀結構,可以看到整個 ntpd 的母程序 PID 為 21815,並且使用 _ntp 使用者帳號負責帶起子程序 PID 21816。

basic3_14
▲ 圖14 查詢 OpenNTPD 服務的執行序樹狀關系

接著我們可以使用 chkconfig 指令,以了解 CentOS 主機在開機時進入不同的 RunLevel 時會啟動的服務。我們以主機所擔任的服務,來判斷是否有些不會用到的服務,例如 acpid (Advanced Configuration and Power Interface) 電源進階設定,這個服務是將 CentOS 安裝於筆記型電腦上才會發揮效用,所以我們就可以將該服務關閉。此舉除了可以增加系統效能(啟動每個服務都會佔用記憶體),還可以避免該服務被攻擊,增加系統安全性。

下列操作為 CentOS 主機預設啟動程序在 RunLevel 3 的狀況下,我們使用指令 chkconfig 指令配合相關參數,來了解系統在 RunLevel 3 時,開機會自動啟動哪些服務:

basic3_15
▲ 圖15 檢查主機於 RunLevel 3 啟動時會啟動哪些服務

當您決定哪些服務要開啟,而哪些服務要關閉後,就可以執行「關閉啟動主機時不啟動服務」或是「停止該服務」。下列操作中,我們以 acpid 服務為例進行設定,當主機由 RunLevel 3 啟動模式啟動時,不會自動啟動該服務,並在目前運作模式下馬上停止該服務的運作:

basic3_16
▲ 圖16 關閉 acpid 於 RunLevel 3 時自動啟動,並立即停止該服務

擴充 YUM 套件管理工具 RPM 數量


雖然在上一篇文章中,我們已經將 YUM 套件管理工具的鏡像站台,設定為台灣鏡像站台來加快套件下載速度。不過雖然目前官方的 YUM 套件管理工具中套件數量已經不少,但目前官方套件數量中僅包含必要套件,例如常常用來管理 MySQL 資料庫的 PhpMyAdmin 套件,就未包含在內建的 YUM 套件庫 (RPM Repository) 當中。

雖然我們可以自行下載 PhpMyAdmin 套件並手動安裝到系統上,但筆者個人的主機管理習慣,是盡量使用 YUM 套件管理工具來處理 RPM 套件的安裝、移除、升級。因此在這裡要介紹讀者一套名為 RPM forge 的套件,我們可以安裝它來擴充 YUM 套件管理工具中的套件數量。

RPMforge 支援許多 Linux 發行版本,例如 RHEL、Fedora Core、CentOS、Scientific、Aurora 等。將 RPMforge 安裝於系統之後,可擴充系統 YUM 套件管理工具中的套件數量,例如剛才提到的 PhpMyAdmin 套件。我們可以在安裝 RPMforge 之後,透過 yum 指令來進行安裝,而不需要自行上網尋找該套件。

下列操作中,我們可以看到當系統尚未安裝 RPMforge 以前,其 YUM 管理工具套件庫 (RPM Repository) 中搜尋不到 PhpMyAdmin 套件。當安裝 RPMforge 之後,便可順利透過 yum 指令來進行安裝。每次安裝時,請安裝最新發行穩定版本的 RPMforge-Release,並注意您使用的 CentOS 主機是 32 位元或 64 位元的作業系統版本(本次實作為使用 CentOS 5.5 32 位元版本):

basic3_17
▲ 圖17 未安裝 RPMforge 以前搜尋不到 PhpMyAdmin 套件

basic3_18
▲ 圖18 安裝 RPMforge 後可順利搜尋到 PhpMyAdmin 套件

結語

雖然網路上 Linux 相關參考資源及教學非常多,但筆者發現許多 Linux 初學者可能對於 CentOS 主機的系統基礎設定不熟悉,或者未設置相關設定,導致在學習上發生瓶頸。例如沒有把 YUM 套件管理工具的預設鏡像站台由國外設回國內,因此認為 CentOS 主機套件安裝速度相當緩慢。追究其原因,只是因為未更改鏡像站台至國內,加上所處的網路環境頻寬不是很理想,導致下載套件及相依套件時速度緩慢,而造成使用者的誤會。又或者因為沒有把 SELinux 安全機制暫時關閉,所架設的網路服務因而違反了 SELinux 的安全機制,導致服務啟動時被阻擋住而無法啟動成功。

若因為不熟悉這些設定而放棄學習 CentOS,是非常可惜的一件事。筆者期望能夠透過這三篇 CentOS 基礎設定文章,讓讀者對於 CentOS 作業系統有初步的認識,並在配合相關基礎設定的實作之後,能夠協助讀者建立一個屬於自己,順手好用又安全的 CentOS 作業系統。