450 likes | 630 Views
Linux 基礎學習. Chapter 17 程序管理與 SELinux 初探. 內容. 什麼是程序 (process) 工作管理 (job control) 程序管理 特殊檔案與程序 SELinux 初探. 17.1 什麼是程序 (process). 17.1.1 程序與程式 (process & program). 程式與程序之間的差異. 程式被載入成為程序以及相關資料的示意圖. 17.1 什麼是程序 (process).
E N D
Linux 基礎學習 Chapter 17 程序管理與 SELinux 初探 Linux基礎--程序管理與 SELinux 初探
內容 • 什麼是程序 (process) • 工作管理 (job control) • 程序管理 • 特殊檔案與程序 • SELinux 初探 Linux基礎--程序管理與 SELinux 初探
17.1 什麼是程序 (process) • 17.1.1 程序與程式 (process & program) 程式與程序之間的差異 程式被載入成為程序以及相關資料的示意圖
17.1 什麼是程序 (process) • 程式(program):通常為 binary program ,放置在儲存媒體中 (如硬碟、光碟、軟碟、磁帶等),為實體檔案的型態存在; • 程序 (process):程式被觸發後,執行者的權限與屬性、程式的程式碼與所需資料等都會被載入記憶體中,作業系統並給予這個記憶體內的單元一個識別碼 (PID),可以說,程序就是一個正在運作中的程式。
17.1 什麼是程序 (process) • 子程序與父程序 程序相關係之示意圖 • fork and exec:程序呼叫的流程 程序使用 fork and exec 呼叫的情況示意圖
17.1 什麼是程序 (process) • 系統或網路服務:常駐在記憶體的程序 舉個簡單的例子來說好了,我們知道系統每分鐘都會去掃瞄 /etc/crontab 以及相關的設定檔,來進行工作排程吧?那麼那個工作排程是誰負責的?當然不是鳥哥啊!呵呵!是 crond 這個程式所管理的,我們將它啟動在背景當中一直持續不斷的運作,套句以前 DOS 年代常常說的一句話,那就是『常駐在記憶體當中的程序』啦! 常駐在記憶體當中的程序通常都是負責一些系統所提供的功能以服務使用者各項任務,因此這些常駐程式就會被我們稱為:服務 (daemon)。系統的服務非常的多,不過主要大致分成系統本身所需要的服務,例如剛剛提到的 crond 及 atd ,還有 syslog 等等的。還有一些則是負責網路連線的服務,例如 Apache, named, postfix, vsftpd... 等等的。這些網路服務比較有趣的地方,在於這些程式被執行後,它會啟動一個可以負責網路監聽的埠口 (port) ,以提供外部用戶端 (client) 的連線要求。
17.1 什麼是程序 (process) • 17.1.2Linux 的多人多工環境 • 多人環境 • 多工行為 • 多重登入環境的七個基本終端視窗 • 特殊的程序管理行為 • bash 環境下的工作管理 (job control) • 多人多工的系統資源分配問題考慮
17.2 工作管理 (job control) • 17.2.1 什麼是工作管理? • 總之,要進行bash 的 job control 必須要注意到的限制是: • 這些工作所觸發的程序必須來是於你 shell 的子程序(只管理自己的 bash); • 前景:你可以控制與下達指令的這個環境稱為前景的工作 (foreground); • 背景:可以自行運作的工作,你無法使用 [ctrl]+c 終止它,可使用 bg/fg 呼叫該工作; • 背景中『執行』的程序不能等待 terminal/shell 的輸入(input)
17.2 工作管理 (job control) • 17.2.2job control 的管理 • 直接將指令丟到背景中『執行』的 &
17.2 工作管理 (job control) • 將『目前』的工作丟到背景中『暫停』:[ctrl]-z • 觀察目前的背景工作狀態:jobs
17.2 工作管理 (job control) • 將背景工作拿到前景來處理:fg
17.2 工作管理 (job control) • 讓工作在背景下的狀態變成運作中:bg
17.2 工作管理 (job control) • 管理背景當中的工作:kill
17.2 工作管理 (job control) • 17.2.3 離線管理問題
17.3 程序管理 • 17.3.1 程序的觀察 • ps :將某個時間點的程序運作情況擷取下來
17.3 程序管理 • 僅觀察自己的 bash 相關程序:ps -l • F:代表這個程序旗標 (process flags),說明這個程序的總結權限,常見號碼有: • 若為 4 表示此程序的權限為 root ; • 若為 1 則表示此子程序僅進行複製(fork)而沒有實際執行(exec)。 • S:代表這個程序的狀態 (STAT),主要的狀態有: • R (Running):該程式正在運作中; • S (Sleep):開程式目前正在睡眠狀態(idle),但可以被喚醒(signal)。 • D :不可被喚醒的睡眠狀態,通常這支程式可能在等待 I/O 的情況(ex>列印) • T :停止狀態(stop),可能是在工作控制(背景暫停)或除錯 (traced) 狀態;
17.3 程序管理 • Z (Zombie):僵屍狀態,程序已經終止但卻無法被移除至記憶體外。 • UID/PID/PPID:代表『此程序被該 UID 所擁有/程序的 PID 號碼/此程序的父程序 PID 號碼』 • C:代表 CPU 使用率,單位為百分比; • PRI/NI:Priority/Nice 的縮寫,代表此程序被 CPU 所執行的優先順序,數值越小代表該程序越快被 CPU 執行。詳細的 PRI 與 NI 將在下一小節說明。 • ADDR/SZ/WCHAN:都與記憶體有關,ADDR 是 kernel function,指出該程序在記憶體的哪個部分,如果是個 running 的程序,一般就會顯示『 - 』 / SZ 代表此程序用掉多少記憶體 / WCHAN 表示目前程序是否運作中,同樣的,若為 - 表示正在運作中。 • TTY:登入者的終端機位置,若為遠端登入則使用動態終端介面 (pts/n); • TIME:使用掉的 CPU 時間,注意,是此程序實際花費 CPU 運作的時間,而不是系統時間; • CMD:就是 command 的縮寫,造成此程序的觸發程式之指令為何。
17.3 程序管理 • 觀察系統所有程序:ps aux • USER:該 process 屬於那個使用者帳號的? • PID :該 process 的程序識別碼。 • %CPU:該 process 使用掉的 CPU 資源百分比; • %MEM:該 process 所佔用的實體記憶體百分比; • VSZ :該 process 使用掉的虛擬記憶體量 (Kbytes)
17.3 程序管理 • top:動態觀察程序的變化
17.3 程序管理 • PID :每個 process 的 ID 啦! • USER:該 process 所屬的使用者; • PR :Priority 的簡寫,程序的優先執行順序,越小越早被執行; • NI :Nice 的簡寫,與 Priority 有關,也是越小越早被執行; • %CPU:CPU 的使用率; • %MEM:記憶體的使用率; • TIME+:CPU 使用時間的累加;
17.3 程序管理 • pstree [root@www ~]# pstree [-A|U] [-up] 選項與參數: -A :各程序樹之間的連接以 ASCII 字元來連接; -U :各程序樹之間的連接以萬國碼的字元來連接。在某些終端介面下可能會有錯誤; -p :並同時列出每個 process 的 PID; -u :並同時列出每個 process 的所屬帳號名稱。 範例一:列出目前系統上面所有的程序樹的相關性: [root@www ~]# pstree -A init-+-acpid |-atd |-auditd-+-audispd---{audispd} <==這行與底下一行為 auditd 分出來的子程序 | `-{auditd} |-automount---4*[{automount}] <==預設情況下,相似的程序會以數字顯示 ....(中間省略).... |-sshd---sshd---bash---pstree <==就是我們指令執行的那個相依性! ....(底下省略).... # 注意一下,為了節省版面,所以鳥哥已經刪去很多程序了!
17.3 程序管理 • 17.3.2 程序的管理
17.3 程序管理 • 17.3.3 關於程序的執行順序 具有優先順序的程序佇列示意圖 並沒有優先順序的程序佇列示意圖
17.3 程序管理 • free :觀察記憶體使用情況
17.3 程序管理 • uname:查閱系統與核心相關資訊 • uptime:觀察系統啟動時間與工作負載
17.3 程序管理 • netstat :追蹤網路或插槽檔 Linux基礎--程序管理與 SELinux 初探
17.3 程序管理 • dmesg :分析核心產生的訊息
17.3 程序管理 • vmstat :偵測系統資源變化
17.4 特殊檔案與程序 • 17.4.1 具有 SUID/SGID 權限的指令執行狀態 • SUID 權限僅對二進位程式(binary program)有效; • 執行者對於該程式需要具有 x 的可執行權限; • 本權限僅在執行該程式的過程中有效 (run-time); • 執行者將具有該程式擁有者 (owner) 的權限。
17.4 特殊檔案與程序 • 17.4.2/proc/* 代表的意義
17.4 特殊檔案與程序 • fuser:藉由檔案(或檔案系統)找出正在使用該檔案的程序 • c :此程序在當前的目錄下(非次目錄); • e :可被觸發為執行狀態; • f :是一個被開啟的檔案; • r :代表頂層目錄 (root directory); • F :該檔案被開啟了,不過在等待回應中; • m:可能為分享的動態函式庫;
17.4 特殊檔案與程序 • lsof :列出被程序所開啟的檔案檔名 [root@www ~]# lsof [-aUu] [+d] 選項與參數: -a :多項資料需要『同時成立』才顯示出結果時! -U :僅列出 Unix like 系統的 socket 檔案類型; -u :後面接 username,列出該使用者相關程序所開啟的檔案; +d :後面接目錄,亦即找出某個目錄底下已經被開啟的檔案! 範例一:列出目前系統上面所有已經被開啟的檔案與裝置: [root@www ~]# lsof COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME init 1 root cwd DIR 3,2 4096 2 / init 1 root rtd DIR 3,2 4096 2 / init 1 root txt REG 3,2 38620 1426405 /sbin/init ....(底下省略).... # 注意到了嗎?是的,在預設的情況下,lsof 會將目前系統上面已經開啟的 # 檔案全部列出來~所以,畫面多的嚇人啊!你可以注意到,第一個檔案 init 執行的 # 地方就在根目錄,而根目錄,嘿嘿!所在的 inode 也有顯示出來喔!
17.4 特殊檔案與程序 • pidof :找出某支正在執行的程式的 PID
17.5SELinux 初探 • 17.5.1 什麼是 SELinux • 當初設計的目標:避免資源的誤用 • 傳統的檔案權限與帳號關係:自主式存取控制, DAC • 以政策規則訂定特定程序讀取特定檔案:委任式存取控制, MAC
17.5SELinux 初探 • 17.5.2SELinux 的運作模式 • 主體 (Subject) • 目標 (Object) • 政策 (Policy) • 安全性本文 (security context) • 程序與檔案 SELinux type 欄位的相關性 • 身份識別 (Identify) • 角色 (Role) • 類型 (Type) :(最重要!)
17.5SELinux 初探 主體程序取得的 domain 與目標檔案資源的 type 相互關係 • 1.首先,我們觸發一個可執行的目標檔案,那就是具有 httpd_exec_t 這個類型的/usr/sbin/httpd 檔案; • 2.該檔案的類型會讓這個檔案所造成的主體程序 (Subject) 具有 httpd 這個領域(domain),我們的政策針對這個領域已經制定了許多規則,其中包括這個領域可以讀取的目標資源類型; • 3.由於 httpd domain 被設定為可以讀取 httpd_sys_content_t 這個類型的目標檔案(Object),因此你的網頁放置到 /var/www/html/ 目錄下,就能夠被 httpd 那支程序所讀取了; • 4.但最終能不能讀到正確的資料,還得要看 rwx 是否符合 Linux 權限的規範!
17.5SELinux 初探 • 17.5.3SELinux 的啟動、關閉與觀察 • enforcing:強制模式,代表 SELinux 運作中,且已經正確的開始限制 domain/type 了; • permissive:寬容模式:代表 SELinux 運作中,不過僅會有警告訊息並不會實際限制 domain/type 的存取。這種模式可以運來作為 SELinux 的 debug 之用; • disabled:關閉,SELinux 並沒有實際運作。
17.5SELinux 初探 • 17.5.4SELinux 網路服務運作範例 • 網路服務的啟動與觀察 httpd 順利運作時,能夠看到的首頁畫面
17.5SELinux 初探 • 錯誤的 SELinux 安全性本文 錯誤的安全性本文所造成的困擾
17.5SELinux 初探 • 重設 SELinux 安全性本文
17.5SELinux 初探 • 17.5.5SELinux 所需的服務 • setroubleshoot --> 錯誤訊息寫入 /var/log/messages
17.5SELinux 初探 • auditd --> 詳細資料寫入 /var/log/audit/audit.log
17.5SELinux 初探 • 17.5.6SELinux 的政策與規則管理 • 政策查閱
17.5SELinux 初探 • 布林值的查詢與修改
17.5SELinux 初探 • 預設目錄的安全性本文查詢與修改