發表文章

[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啟動系統時執行。 ...

[RHCE] Install And Manage Software

圖片
USE RPM 在過去沒有rpm的時後,使用者想在系統上安裝軟體是相當麻煩的。要先確定作業系統與環境是否符合、設定軟體的參數、然後還要編譯過才能使用。所以Red Hat開發出rpm這個機制,將開發完的軟體先經過編譯,打包成rpm的封裝檔案。 然後利用資料庫去紀錄檔案的相關資訊、相依檔案、系統需求等等。 當使用者得到rpm檔案之後,rpm會利用軟體的資料庫去檢查環境是否符合、相依檔案是否存在等等。如果條件都符合軟體需求,則可使用簡單的指令快速安裝這些軟體。甚至對於將來可能需要的升級、反安裝,也都可以輕鬆完成。 rpm可以用 -q 參數來查尋軟體的相關資訊。 #rpm -q [軟體名稱] 可以查詢該軟體是否安裝,這邊軟體名稱必須輸入完整。例如要查詢qemu-kvm-common-1.5.3-60.el7.x86_64,就必須輸入qemu-kvm-common。或者使用 #rpm -q[參數] [軟體名稱] ,可以查詢其他的資訊。 a:  查詢所有已安裝的軟體名稱,使用qa時後面不用接軟體名稱。 i:  查詢該軟體的詳細資訊。 l:  查詢該軟體安裝後所有的檔案及目錄的完整名稱。 c:  查詢該軟體安裝後所有的設定檔名稱。 d:  查詢該軟體安裝後所有的說明檔名稱。 R:  查詢該軟體安裝時所需要的相依檔案名稱及版本要求。 f:  此參數後面接的為目錄或檔名,可以查詢該目錄或檔案屬於哪個已安裝軟體。 p:  此參數是配合上述參數針對未安裝的rpm檔進行查詢。 --scripts:  查詢軟體安裝或移除時直行的shell scripts。 --changelog:  查詢軟體的更新紀錄檔。 rpm也可以用來安裝以及更新軟體。當我們要安裝一個軟體時,可以輸入 #rpm -ivh [軟體名稱] 。 i:  安裝(install)。 v:  安裝時顯示更多的資訊畫面。 h:  安裝時顯示安裝進度。 當我們要對現有的軟體做更新時,可輸入 #rpm -Uvh [軟體名稱] 或 #rpm -Fvh [軟體名稱] 。 U:  如果軟體並未安裝過,則會直接安裝,而已安裝的軟體則自動更新。 F: ...

[RHCE] Disk And File System

圖片
DISK 在Linux中,所有的裝置是用掛載的方式連結到系統。 系統必須為裝置建立一個目錄,經由將裝置掛載(Mount)到指定的目錄上,使用者才可以存取裝置。 而這個目錄在Linux中稱為掛載點(Mount Point)。就像貨輪上的貨物,必須停靠在港口後才可以搬運。貨輪就是硬碟,貨物就是資料,港口就是目錄,把貨輪停靠到指定的港口就是掛載。有別於Windows系統中硬體是以代號的方式辨識,Linux則是以目錄。 在IDE介面中,若主機板上有兩個IDE插槽,每個排線可連結到兩個IDE裝置。則Linux會分別為這些裝置建立目錄以便於掛載。 IDE裝置的目錄是固定的,例如只有Secordary的Master有連接裝置,目錄依舊是/dev/hdc。 而在SATA介面上,裝置目錄的命名則是以系統偵測到的順序依序而定。例如若在SATA1、SATA5以及USB上各有一顆硬碟,則系統給予的目錄會分別為。 DISK PARTITION 跟磁碟最有關係的就是磁碟分割,而管理磁碟分割的就是MBR中的分割表(Partition Table)。分割表紀錄分割區起始以及結束磁柱的號碼,檔案則利用分割表寫入指定的磁碟中。分割表有64bytes,每組分割需使用16bytes,所以一個硬碟總共可以有四組分割。分割後的磁區會以硬碟目錄檔名後面加上號碼作為區分。以上面IDE的硬碟為例,IDE1的Master硬碟切了兩個分割區,則分別為/dev/hda1和/dev/hda2。 雖然分割表只能紀錄四組分割區,但並不代表只能有四個分割區。分割區主要分為主要分割(Primary)、延伸分割(Extended)以及邏輯分割(Logical)。而一個分割表中, 主要分割以及延伸分割總合必小於四組。 如果使用者希望有大於四組的分割區,則必須在延伸分割區上建立邏輯分割區。 主要分割區: 主要分割區可以格式化,一個主要分割區可以存在一個作業系統,以及任意數目的檔案資料。 延伸分割區: 延伸分割區不可格式化,所以也無法建立任何資料,延伸分割區主要是用以建立邏輯分割區。一顆硬碟中最多只能有一個延伸分割區。 邏輯分割區: 邏輯分割區可格式化,可存在可以邏輯分割區開機的作業系統,以及任意數目的檔案資料。邏輯分割區必須建立在延伸分割區上。IDE硬碟可以建立59個(5~63號)邏輯分割,SATA...

[RHCE] Process Manage

圖片
PROCESS 當使用者執行一個程式或一個命令時,就會產生一個程序。PID是程序的ID,PPID就是該程序的父程序ID,UID是執行這個程序的使用者ID。Stat是呈續執行的狀態,分別為休眠、執行、刪除、以及殭屍程序。 所謂的殭屍(Zombie)程序是指父程序呼叫的子程序,在父程序結束時因bug而未結束。這個子程序就會獨自運作到程序結束,這種程序就稱為殭屍程序。程序之間使用signal溝通,代號從1~64號,其中比較重要的有1為重啟,9為強制終止,15為停止。 使用 #ps 以及 #top 指令可以查詢目前系統上的程序。 #ps 是靜態的查詢,常用的參數如下: a:  目前帳號權限可見程序。 u: 查看使用者以及更多的資訊。 x: 系統所有程序。 #top 為動態查詢,使用者可以設定更新秒數自動即時更新。 #top -d [秒數] 可以設定更新的間隔時間。 先前提到程序之間是使用signal溝通的,signal有1~64號動作。可以使用 #kill -l 查詢所有動作編號,以及 #kill [signal編號] [PID] 對程序下命令。 PRIORITY 在 #top 指令中可以看到每個程序的PR值,也就是優先權,預設都是20。另外還有NI值,NI值為-20~19之間,但一般的使用者只能使用0~19。 優先權的算法為PR值加上NI值,所得的值越低優先權越高。 使用者調整程序優先權時,是針對NI值進行設定,設定時會將PR值回復成20。 #nice -n [NI值] [指令] 可針對將要執行的程序設定優先權。 #renice -n [NI值] [PID] 可針對已執行的程序設定優先權。 SCHEDULING 排程的功能為在指定的時間執行指定的程序。主要有兩種排程工具,atd以及crond。 atd是針對一次性的程序進行排程,而crond是針對週期性的程序進行排程。 atd的指令為 #at ,輸入 #at [時間] 後,在輸入所要執行的工作,再按下Ctrl + D結束設定。atd在設定時間上可使用 now +1 min 或 now +3 days 或 4pm +1 week 等方式。 #atg 可查詢目前的排程, #atrm [編號] 可刪除排程。/etc/at.allow為使用者白名單,...

[RHCE] SELinux

圖片
SELINUX SELinux(Security Enhanced Linux)用以針對Linux系統的安全性進行強化。 簡單的說,SELinux是針對程序對於檔案系統的存取,進行以政策(Policy)為基準的控管。當程序通過政策之後,會與檔案系統進行安全性本文比對,比對相符就可以存取檔案系統。 SELinux必須在root權限下才可進行設定。使用 #getenforce 可以查詢目前SELinux的狀態。 enforcing: 強制模式,表示SELinux正常運作中。 permissive: 警告模式,SELinux也是正常運作,但是對於政策只會給予警告,用以debug用。 disabled: 關閉SELinux。 可以於/etc/sysconfig/selinux中變更SELinux狀態。或者使用 #setenforce 0 (or 1) 變更,0為警告模式,1為強制模式。 SELinux的政策中訂立了許多規則,規則設定了程序對於檔案系統各種動作的權限。可以使用 #getsebool -a 來查詢所有目前運行的規則。可以在後面加上規則名稱或者grep去查詢特定的規則。之後可以使用 #setsebool -P [規則] on (or off) 開啟或關閉規則。 TROUBLESHOOT SELinux的設定錯誤會導致程序無法正常的進行。例如你可能不小心關閉了httpd,使得你的網站無法正常的被瀏覽。這時候就必須進行除錯。 除錯可以使用setroubleshoot或auditd這兩個服務。安裝後記得使用 #chkconfig 設定為開機啟動才可完整紀錄所有錯誤。 安裝setroubleshoot可以用以紀錄SELinux的錯誤訊息。使用 #grep setroubleshoot /var/log/message 可以查詢目前SELinux的錯誤訊息。每筆錯誤紀錄會有一個編號,使用 #sealert -l [編號] 可以查詢該筆錯誤詳細資料。 或者安裝auditd這個服務,同樣也可以紀錄SELinux的錯誤訊息。使用 #sealert -a /var/bg/audit/audit.log 可以查詢所有錯誤訊息的詳細資料。