發表文章

目前顯示的是 2014的文章

[RHCE] System Monitor

圖片
DISK SPACE 在Linux系統中從磁碟到檔案之間的關係,用比較簡單的方法解釋是磁碟會被切割為分割區,分割區會被格式化為檔案系統,例如我們常看到的EXT4, FAT, NTFS等,作業系統只能使用固定的檔案系統去儲存檔案、檔案的屬性、以及其他的資訊,然後再將檔案系統掛載到某個目錄,如此使用者才可以利用這個目錄的路經去存取這個檔案系統。 管理檔案系統最基本的作業就是要先了解檔案系統的狀況,使用 #df [參數] [檔案或目錄] 可以查詢這個檔案或目錄所存放的檔案系統的使用狀況,例如輸入 #df /etc/cron.d 可以查詢到/etc/cron.d這個目錄所屬的檔案系統的資訊。 Filesystem: 這個檔案系統所屬的分割區的裝置名稱。 1K-blocks: 說明1K-blocks, Used, Available的單位是1KB。 Used: 已經使用的磁碟空間。Available: 還可以使用的磁碟空間。 Use%: 磁碟空間使用量百分比。 Mount on: 磁碟的掛載目錄。 可以使用的參數有: -a: 列出包含系統特有的所有檔案系統。 -k: 以KB為單位計算容量。 -m: 以MB為單位計算容量。 -h: 依照容量大小自動選擇以GB, MB, KB等單位顯示。 -T: 顯示該分割區的檔案系統名稱。 -i: 使用inode數量取代檔案容量顯示。 而當管理者想查詢某個檔案或目錄的容量時,可以使用 #du [參數] [檔案或目錄] ,例如 #du /dev 會將/dev底下所有的目錄的使用容量列出來,預設的單位是KB。 可使用的參數有: -a: 將目錄下的檔案也個別列出。 -h: 依照容量大小自動選擇以GB, MB, KB等單位顯示。 -s: 查詢目錄時僅列出該目錄總使用容量。 -S: 計算目錄容量時,不計算子目錄的容量。 -k: 以KB為單位計算容量。 -m: 以MB為單位計算容量。 當檔案系統出現問題時,在Windows作業系統中會出現scandisk協助使用者檢查並修復檔案系統,在Linux系統中,可以使用 #fsck [參數] [裝置名稱] 進行同樣的作業, 需要注意的是如果在系統狀況正常下使用這個指令,可能會損害系統運作; 指令可用的參數如下: ...

[RHCE] Network Security

圖片
IPTABLES iptables是Linux系統中的防火牆,防火牆最主要的工作就是過濾與限制網路的存取,iptables的架構可分為table與chain兩部分,系統預設有四個table,每個table有各自負責的用途, 依照優先順序由高到低分別為raw, mangle, nat, filter。 raw: 與處理一些不用特別去追蹤的連線。 mangle: 與特殊封包的標記有關。 nat: 負責進行轉址。 filter: 負責過濾進出的封包。 每個table中都有自己的chain, 主要有五種chain,分別為INPUT, OUTPUT, PREROUTING, POSRROUTING, 與FORWADR; table之間可能會擁有相同的chain,例如每個table都有一個OUPUT chain,所以當處理到關於OUTPUT的封包時,就會參考table優先順序決定哪個table的chain有決定權。 INPUT: 負責進入防火牆封包的規則。 OUTPUT: 負責送出防火牆封包的規則。 FORWARD: 負責轉送封包到防火牆內終端位址的規則。 PREROUTING: 負責在進行路由前要進行的規則。 POSRROUTING: 負責在進行路由後要進行的規則。 每個chain中有自己的rule,一個chain可能有許多rule,如果一個封包進到chain中都不符合任何rule,這個封包最後就會交由policy處理,policy與rule有四種動作,ACCEPT, DROP, REJECT, LOG。所以整個iptables的層級結構大致如下: 而一個封包從進入防火牆開始,就會經過許多table的chain進行判斷處理,直到被送到目的地;如果將chain的處理順序,配合table的優先層級結合起來,就可以得到這張流程圖: VIEW IPTABLES 使用者可以使用 #iptables –t [table名稱] –L 來查詢目前該table裡面的chain,如果不指定table,則會顯示filter table的chain,另外還有兩個選項: -n: 不進行IP與hostname的反查。 -v: 顯示詳細資訊。 上圖是 #iptables –L –v 的結果,也就是查詢filter table的c...

[RHCE] LDAP Client

圖片
LDAP OVERVIEW LDAP(Lightweight Directory Access Protocol)就像Micosoft的AD一樣,一種Linux系統上常見的目錄服務的協定。 目錄服務類似資料庫,但是又不是資料庫,會這麼說是因為它們都可以寫入跟讀取資料,但是目錄服務就像是電話簿,你會常常查通訊錄,但是你不會整天都在寫通訊錄,而資料庫就像是倉庫,每天進貨跟出貨的量幾乎是相等的; 可以說目錄服務與資料庫功能類似(當然資料庫對於資料儲存的功能性肯定比目錄服務要強的多),但是目的不同。 LDAP是一種協定,負責讓LDAP Server跟LDAP Client傳遞資料的協定, 就如同HTTP在HTTP Server與HTTP Client之間的關係一樣;LDAP Server可以是各種不同的儲存形式,簡單的文字檔或者複雜的資料庫,只要遵照著LDAP即可,當然Client端也是如此。 LDAP的用途在於管理目錄,最常見的就是帳號密碼,也就是所謂的認證;在一間公司中,Mail Server、NAS、NFS、人事系統、簽呈系統、甚至連印表機也要帳號密碼,假設這間公司有100個員工,每個員工就需要記好幾個帳號密碼、而管理者更需要管理幾百個甚至上千個帳號密碼,或許對於使用者來說這不是件大事情,但是對於管理者來說這會相當頭痛;而當導入了LDAP之後,所有的系統、伺服器、硬體都可以透過LDAP Server進行認證;除了帳號密碼的認證之外,LDAP也可以應用在其他不同的地方,例如印表機設定檔、通訊錄等,任何大量讀取少量寫入的資料都可以嘗試用LDAP整合。 在RHCE的認證中,並不會實作LDAP Server的架設,只會要求受測者利用LDAP Client連上Server進行認證,然後將創建Server指定的家目錄並掛載於本機。 LDAP CLIENT 要使用LDAP Client需先安裝directory-client,輸入 #yum groupinstall directory-client ,安裝完畢後在系統中找到Authentication這個應用程式(如果找不到,輸入 #yum install authconfig-gtk –y 安裝),然後輸入LDAP Server的資訊。 之後點Download CA Certification輸入憑證...

[RHCE] Advance Network Setting

圖片
IP ALIAS IP aliases可以讓使用者在一個網路卡上設定多組IP,如此便可以經由不同的IP訪問多個網段,例如在一張網路卡上設定了IP 192.168.0.100再利用IP alias設定一組192.168.1.100的IP,如此這台電腦就可以同時訪問192.168.0.0/24與192.168.1.0/24這兩個網段的網路設備。 IP alias依附的是實體的網路卡,也就是說假設有一張網路卡為eth0,使用者可以依附這張網路卡建立eth0:0, eth0:1…等許多IP alias, 然而一但當eth0停用之後,依附於其上的IP alias也會一併停用。 另外,DHCP無法於IP alias上使用。 建立IP alias的方法有兩種,一種是使用指令的方式,一種是修改網路介面的設定檔。 使用指令方式建立的IP alias會在網路重啟之後消失, 如network restart或者重開機。 以指令方式建立IP alias的指令有兩種: #ip addr add 10.10.1.1/24 dev eth0 label eth0:0 dev eth0表示此IP alias是依附於eth0這個介面,label eth0:0則為此IP alias的名稱。 #ifconfig eth0:0 10.10.1.1 netmask 255.255.255.0 up eth0:0為此IP alias的名稱,其後設定該介面的IP與子網路遮罩,up表示啟動該設置,down為停用。 或者可編輯/etc/sysconfig/network-script/ifcfg-eth0:0,eth0:0可修改為要建立的IP alias名稱。之後在檔案內輸入: 存檔後再重啟網路功能,此IP alias便可運作。 BONDING 使用bonding主要有幾個理由, 網路備援、增加頻寬、與負載平衡, bonding是利用多張網路卡進行綁定,讓系統視為一個網路介面卡而達到期望的目標。這項功能通常會使用在需要大量頻寬,或者需要穩定連線的伺服器上。 Bonding有七種不同的模式以對應不同的需求。 mode 0: 循環負載平衡,封包依序由加入bonding的網路卡傳送。 mode 1: 備援模式,bonding的網路卡中只有一張會啟動,啟動的網路卡失效後獲起用其...

[RHCE] Bash Script

BASH 在RHEL(Red Hat Enterprise Linux)使用的shell為Bash。 撰寫shell script的目的在於將多個shell,搭配正規化、管線命令、資料流導向等功能,達到使用者所希望的目的。類似Windows中的批次檔,讓使用者可以執行一個shell script,便可以完成許多指令。 輸入 #touch [檔名.sh] 可建立檔案,副檔名使用sh是為了方便使用者分辨檔案為bash script。接著輸入 #chmod a+x [檔名.sh] 給予檔案可執行的權限。完成後使用 #vim [檔名.sh] 編輯script。在shell檔中,第一行要先宣告#!/bin/bash,表示這是屬於bash的script。 Variable 變數可用$呼叫,例如number = 99,我們可用$number呼叫其值;也可以利用$(shell_command)將shell當成變數,而shell的執行結果就會成為這個變數的值。 For loop for var in condition #迴圈的執行條件,當var滿足condition,就執行迴圈。 do          script #每次迴圈中所要執行的script。 done If else if condition #判斷條件 then          script1 #若判斷條件為真所執行的script。 else          script2 #若判斷條件為假所執行的script。 fi Test test可用於取得比較式的ture/false值,用法為test 比較式 或者 test [ 比較式 ] (注意比較式前後各有一個空格) 。常用的比較式有以下: 字串 #test [參數] [string] ,可用參數有: -n: 字串常度不為0。 -z: 字串長度為0。 字串比較 #test [string1] [參數] [string2] ,可用參數有: ==: 等於。 !=: ...

[RHCE] Network Monitor

圖片
NETSTAT netstat主要的功能可以掃描本機上目前開啟的port。 當某些連線服務無法正常運作時,管理者可以利用該指令查詢服務使用的port是否正常。輸入 #netstat [參數] 可以對本機端口進行觀察。 r: 列出路由表,這個參數的功能如同 #route 。 n:  列出查詢結果時不使用主機與服務名稱,使用IP與port number。 a:  列出所有的連線狀態,包括TCP、UPD等等。 t:  列出所有TCP的連線。 u:  列出所有UDP的連線。 l:  列出監聽(Listen)中的連線。 p:  列出使用這個port的PID與程序名稱。 c:  可以設定 -c [秒數] 每幾秒更新一次資訊。 在觀察netstat的查詢結果時,我們必須了解查詢出的結果代表什麼意思。 Proto: 該連線所使用的協定。 Recv-Q & Send-Q: 這個表示該連線目前的接收或者發送佇列,Q是Queue的意思。 這兩個值通常必須為0,或者短暫的非0狀況也是可以接受的, 但長期為非0,可能連線出現問題。Recv-Q表示本機接收的數據有多少bytes還在緩衝區,尚未被程序取走。如果一直為非0,可能主機已經遭到DOS攻擊。Send-Q表示由遠端主機所傳送而來,但不具有 ACK 標誌的總 bytes 數,例如遠端主動連線。如果為非0,可能遠端主機接收速度不夠快。 Local Address:  本地端的IP跟port。 Foreign Address:  目地端的IP跟port。 State:  該連線目前的狀態。      ESTABLISED:  已建立連線的狀態。      SYN_SENT:  發出主動連線 (SYN 標誌) 的連線封包。      SYN_RECV:  接收到一個要求連線的主動連線封包。      FIN_WAIT1:  該插槽服務已中斷,該連線正在斷線當中。  ...

[RHCE] Kernel Manage

圖片
KERNEL 核心是整個作業系統中最重要的部分,無論在Windows或Linux系統中。 核心主要的工作就是驅動主機的各項硬體的偵測程式與驅動模組。 簡單來說就是幫助使用者控制系統的硬體設備。我們可以使用 #uname [參數] 查詢當前系統的核心資訊。 a: 顯示系統的詳細資料,所有參數的資料都會被列出來。以我機器的資訊為例,主機使用的核心名稱為 Linux,而主機名稱為 localhost.localdomain。核心的版本為 3.10.0-123.6.3.el7.x86_64,該核心版本建立的日期為 2014/8/6。最後三個x86_64分別為m、p、i三個參數的查詢結果。 r: 核心的版本。 s: 核心的名稱。 m: 本系統的硬體名稱。 p: CPU的類型。 i: 適用的硬體平台。 隨著我們更換新的硬體,核心有時後也需要做更新的動作。首先我們必須先取得新版的kernel的rpm檔,接著可以使用yum或者rpm兩種方法更新。可以使用 #yum update kernel 或者 #rpm -ivh [核心rpm檔名稱] 來更新。使用yum更新完,若新版核心不是預設值,待確定新版穩定之後,可以修改/boot/grub/grub.conf。 使用rpm更新時,記得不要用 -U 或 -F , 否則如果新版不穩定時,你就沒有舊版可以使用了。同樣更新完,確定新版穩定之後,可以修改/boot/grub/grub.conf改變預設核心。 MODULE 談完了核心接著就必須說到模組(module),沒有這些模組核心就無法控制硬體。可以輸入 #lsmod 查詢目前系統所載入的模組有哪些,或者到/lib/modules下去查詢。輸入 #modprobe [模組名稱] 可以載入模組。輸入 #modprobe -r [模組名稱] 可以移除模組。修改/etc/modprobe.d/local.conf設定開機時載入的模組。

[RHCE] Deamon Manage

圖片
DAEMON 系統的服務我們會稱為service,例如httpd、ftpd等等, 而啟動這些服務的程序就稱為daemon。 daemon會在系統開機時執行,一般來說會在關機時結束。 daemon可以分成兩大類, 一類是可以獨立啟動的stand_alone。 例如httpd、ftpd等,不必透過其他機制就可以啟動,直到關閉前都會一直存在。這種daemon的好處在於對於用戶發送的要求反應較快,但是缺點是會一直佔據記憶體空間。 另一類是透過一個叫做xinetd的super daemon來管理其他的服務。 xinetd會在用戶連線時去呼叫對應的服務,當用戶離線就會關閉這些服務,如Telent、Tftp等。spuer daemon的好處在於減少服務呆滯在記憶體的時間,缺點是反應會比較慢一點。 SERVICE SCRIPT 管理員可以透過 #service [Script] [服務名稱] [參數] 去管理各種daemon。參數 start 、 stop 、 reatart 、 reload 可以對服務進行基本的控制。或者編輯service script對service進行進階的設定跟控制,系統的srevice script存放在/ect/init.d/中。 在之前提到過,我們可以在/etc/inittab中設定開機時的run level。 >>[RHCE課堂筆記] 開機<< 當設定完run level之後,我們就可以在/etc/rc.d中設定各run level下要啟動的service script。以我虛擬機中的rc5.d為例,也就是run level 5的設定。 我們可以看到這些檔案是用連結的方式連到/etc/init.d中的service script檔。每個檔名前面會多一個英文字以及兩個數字, K表示kill service,S表示start service。而之後的數字表示kill或者start的順序。 上面的例子會先啟動network,接著依序iprinit、iprupdate、iprdump,最後kill netconsole。 BOOT 管理者也可以針對這些服務,設定是否需要在系統啟動時執接執行。 #chkconfig [服務名稱] [on/off] 可以設定是否在當前run level啟動系統時執行。 ...