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开始。)