proc文件系統中的內容非常多,注重積累,遇到就去搞清楚!
proc
- 存儲進程信息的僞文件系統
- proc文件系統是一個僞文件系統,這個文件系統提供了一個訪問內核數據結構的接口
- 通常掛載在目錄
/proc
- 通常是由系統自動掛在的
- 也可以使用命令手動掛載
mount -t proc proc /proc
- proc文件系統中的大部分文件都是隻讀的,但是部分文件是可寫的,允許改變內核變量
掛載選項
- hidepid=n (從linux3.3開始支持)
- 這個選項控制誰可以訪問/proc/[pid]目錄下的信息。參數n可以是如下的值:
- 0 每個人都可以訪問所有的/proc/[pid]目錄。
- 1 用戶只能訪問屬於自己的/proc/[pid]目錄(/proc/[pid]目錄本身還是可見的)
- 敏感文件比如
/proc/[pid]/cmdline
以及/proc/[pid]/status
現在是針對其他用戶保護起來了
- 這樣就使得去了解是否其他用戶正在運行一個特定的程序變得不可能(只要程序自身不能通過行爲表現出在幹嘛就行)
- 2 在mode1的基礎上,讓屬於其他用戶的
/proc/[pid]
目錄變得不可見。
- 這意味着
/proc/[pid]
入口不再可以用於挖掘系統上的PID
- 這也隱藏不了帶有指定的pid的進程是否存在的事實,因爲可以通過其他手段獲取到,如
kill -0 $PID
- 但是隱藏了一個進程的UID和GID,因爲這個本來是可以通過在
/proc/[pid]/
目錄上調用stat(2)來獲取的
- 這樣對於攻擊者想要收集運行進程的信息增加了難度
- 例如,-發現某個守護程序是否正在以提升的特權運行
- 例如,另一個用戶是否正在運行某個敏感程序
- 例如,其他用戶是否在運行何程序,等等。
文件和目錄
/proc/interrupts
- 這用於記錄每個IO設備每個CPU的中斷數。
- 從Linux 2.6.24,對於i386以及x86-64體系結構,包含了如下的系統內部中斷(也就是說不跟任何設備相關聯的)
名稱 |
全稱 |
詳解 |
NMI |
nonmaskable interrupt |
非掩碼中斷 |
LOC |
local timer interrupt |
本地定時器中斷 |
TLB |
TLB flush interrupt |
TLB刷新中斷,SMP系統纔有 |
RES |
rescheduling interrupt |
重調度中斷,SMP系統纔有 |
CAL |
remote function call interrupt |
遠程函數調用中斷,SMP系統纔有 |
/proc/uptime
/proc/stat
- 內核系統統計信息。跟隨體系結構而變化。通常的入口包括:
CPU編號 |
user(1) |
nice(2) |
system(3) |
idle(4) |
iowait(5) |
irq(6) |
softirq(7) |
steal(8) |
guest(9) |
guest_nice(10) |
cpu |
6114 |
138 |
31318 |
1011714 |
2441 |
0 |
24 |
0 |
0 |
0 |
cpu0 |
3014 |
138 |
15713 |
505979 |
1329 |
0 |
16 |
0 |
0 |
0 |
cpu1 |
3099 |
0 |
15605 |
505735 |
1112 |
0 |
7 |
0 |
0 |
0 |
- cpu時間
- cpu行是整個系統的,cpuN行是指定的CPU的
- 表中的內容都是時間的數量,單位是USER_HZ(在大多數架構上爲1/100秒,可以使用
sysconf(_SC_CLK_TCK)
獲取正確值)
- user(1) 在用戶層模式下花的時間
- nice(2) 帶有低優先級的(nice)用戶層模式下的花的時間
- system(3) 系統模式下花的時間
- idle(4) 空閒任務下花的時間。這個值應該是USER_HZ乘以
/proc/uptime
文件中的第二個數字
- iowait(5) 花的時間。等待IO完成的時間。這個值不可靠,原因如下:
- 1 CPU將不等待I / O完成。 iowait是任務等待I / O完成的時間。 當CPU進入任務I / O的空閒狀態時,將在該CPU上調度另一個任務。
- 2 在多核CPU上,等待I / O完成的任務沒有在任何CPU上運行,因此很難計算每個CPU的iowait。
- 3 在某些情況下,此字段中的值可能會減小。
- irq(6) 服務中斷花的時間
- softirq(7) 服務軟中斷花的時間
- steal(8) 被盜時間,即在虛擬化環境中運行時在其他操作系統上花費的時間
- guest(9) 在linux內核控制下,爲guest操作系統運行虛擬CPU所花費的時間。
- guest_nice(10) 花在運行一個niced的guest上的時間(Linux內核控制下的guest操作系統的虛擬CPU)
- page 5741 1808
- The number of pages the system paged in and the number that were paged out (from disk).
- swap 1 0
- The number of swap pages that have been brought in and out.
- intr 1462898
- 自引導啓動以來針對每種可能的系統中斷服務的中斷計數。
- 第一列是所有服務交互的總數,包括未編號的體系結構特定中斷;
- 隨後的每一列都是該特定編號的中斷的總數。沒有編號的中斷不顯示,僅累加總數。
- disk_io: (2,0):(31,30,5764,1,2) (3,0):…
- (major,disk_idx):(noinfo, read_io_ops, blks_read, write_io_ops, blks_written) (Linux 2.4 only)
- ctxt 115315
- btime 769041601
- processes 86031
- procs_running 6
- procs_blocked 2
- softirq 229245889 94 60001584 13619 5175704 2471304 28 51212741 59130143 0 51240672
- 此行顯示所有CPU的softirq數。
- 第一列是所有softirq的總數,後面的每列是特定軟中斷的總數。 (從Linux 2.6.31開始。)