首页 > 代码库 > linux 程序管理与SElinux

linux 程序管理与SElinux

此文涉及的命令:&、 jobs、fg、bg、kill、nohup、ps、top、pstree、free、uname、uptime、netstat、dmesg、 vmstat、fuser、lsof、pidof、getenforce、sestatus、setenforce、ps -Z、ll -Z、chcon、restorecon、setroubleshoot、auditd、seinfo、sesearch、getsebool、 setsebool、semanage。

概念:

  1. 什么是程序 (process)
    • 在 Linux 系统当中:『触发任何一个事件时,系统都会将他定义成为一个程序,并且给予这个程序一个 ID ,称为 PID,同时依据启发这个程序的用户与相关属性关系,给予这个 PID 一组有效的权限设定。』 从此以后,这个 PID 能够在系统上面进行的动作,就与这个 PID 的权限有关了!
  2. 程序与进程作个总结:
    • 程序 (program):通常为 binary program ,放置在储存媒体中 (如硬盘、光盘、软盘、磁带等), 为实体档案的型态存在;
    • 进程 (process):程序被触发后,执行者的权限与属性、程序的程序代码与所需数据等都会被加载内存中, 操作系统并给予这个内存内的单元一个标识符 (PID),可以说,进程就是一个正在运作中的程序。
  3. 系统或网络服务:常驻在内存的程序
    • 服务:常驻在内存当中的程序通常都是负责一些系统所提供的功能以服务用户各项任务,因此这些常驻程序就会被我们称为:服务 (daemon)。
  4. 什么是工作管理?
    • 『进行工作管理的行为中, 其实每个工作都是目前 bash 的子程序,亦即彼此之间是有相关性的。 我们无法以 job control的方式由 tty1 的环境去管理 tty2 的 bash !』
    • 要进行 bash 的 job control 必项要注意到的限制是:
      • 这些工作所触发的程序必项来自于你 shell 的子程序(只管理自己的 bash);
      • 前景:你可以控制与下达指令的这个环境称为前景的工作 (foreground);
      • 背景:可以自行运作的工作,你无法使用 [ctrl]+c 终止他,可使用 bg/fg 呼叫该工作
      • 背景中『执行』的程序不能等待 terminal/shell 的输入(input)
  5. 脱机管理问题
    • 我们在工作管理当中提到的『背景』指的是在终端机模式下可以避免 [crtl]-c 中断的一个情境, 并不是放到系统的背景去喔!如果我的工作需要进行一大段时间,我又不能放置在背景底下,那该如何处理呢? 首先,你可以参考前一章的 at 来处理即可!因为 at 是将工作放置到系统背景, 而与终端机无关。如果不想要使用 at 的话,那你也可以尝试使用 nohup 这个指令来处理!这个 nohup 可以让你在脱机或注销系统后,还能够让工作继续进行。nohup 并不支持 bash 内建的指令,因此你的指令必项要是外部指令才行。
  6. 程序的观察
    1. 如果你发现在某个程序的 CMD 后面还接上 <defunct> 时,就代表该程序是僵尸程序
    2. ps -l 仅观察自己的 bash 相关程序:
      • 字段说明:
        • F:代表这个程序旗标 (process flags),说明这个程序的总结权限,常见号码有:
          • 若为 4 表示此程序的权限为 root ;
          • 若为 1 则表示此子程序仅进行复制(fork)而没有实际执行(exec)。
        • S:代表这个程序的状态 (STAT),主要的状态有:
          • R (Running):该程序正在运作中;
          • S (Sleep):该程序目前正在睡眠状态(idle),但可以被唤醒(signal)
          • D :不可被唤醒的睡眠状态,通常这支程序可能在等待 I/O 的情况(ex>打印)
          • T :停止状态(stop),可能是在工作控制(背景暂停)或除错 (traced) 状态;
          • Z (Zombie):僵尸状态,程序已经终止但即无法被移除至内存外。
        • UID/PID/PPID:代表『此程序被该 UID 所拥有/程序的 PID 号码/此程序的父程序 PID 号码』
        • C:代表 CPU 使用率,单位为百分比;
        • PRI/NI:Priority/Nice 的缩写,代表此程序被 CPU 所执行的优先级,数值越小代表该程序越忚被 CPU 执行。
        • ADDR/SZ/WCHAN:都与内存有关,ADDR 是 kernel function,指出该程序在内存的哪个部分,如果是个 running 的程序,一般就会显示『 - 』 / SZ 代表此程序用掉多少内存 / WCHAN 表示目前程序是否运作中,同样的, 若为 - 表示正在运作中。
        • TTY:登入者的终端机位置,若为进程登录则使用动态终端接口 (pts/n);
        • TIME:使用掉的 CPU 时间,注意,是此程序实际花费 CPU 运作的时间,而不是系统时间;
        • CMD:就是 command 的缩写,造成此程序的触发程序之指令为何。
    3. ps aux 观察系统所有程序
      • 字段说明:
        • USER:该 process 属于那个使用者账号的?
        • PID :该 process 的程序标识符。
        • %CPU:该 process 使用掉的 CPU 资源百分比;
        • %MEM:该 process 所占用的物理内存百分比;
        • VSZ :该 process 使用掉的虚拟内存量 (Kbytes)
        • RSS :该 process 占用的固定的内存量 (Kbytes)
        • TTY :该 process 是在那个终端机上面运作,若与终端机无关则显示 ?,另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。
        • STAT:该程序目前的状态,状态显示与 ps -l 的 S 旗标相同 (R/S/T/Z)
        • START:该 process 被触发启动的时间;
        • TIME :该 process 实际使用 CPU 运作的时间。
        • COMMAND:该程序的实际指令为何? 
    4. top: 动态观察程序的变化
      • top 预设使用 CPU 使用率 (%CPU) 作为排序的重点,如果你想要使用内存使用率排序,则可以按下『M』,若要回复则按下『P』即可。如果想要离开 top 则按下『 q 』吧!
      • 字段说明:
        • 第一行(top...):这一行显示的信息分别为:
          • 目前的时间,亦即是 17:03:09 那个项目;
          • 开机到目前为止所经过的时间,亦即是 up 7days, 16:16 那个项目;
          • 已经登入系统的用户人数,亦即是 1 user项目;
          • 系统在 1, 5, 15 分钟的平均工作负载。我们在第十六章课到的 batch 工作方式为负载小于0.8 就是这个负载啰!代表的是 1, 5, 15 分钟,系统平均要负责运作几个程序(工作)的意思。越小代表系统越闲置,若高于 1 得要注意你的系统程序是否太过繁忙了!
        • 第二行(Tasks...):显示的是目前程序的总量与个别程序在什么状态 (running, sleeping, stopped, zombie)。 比较需要注意的是最后的 zombie 那个数值,如果不是 0 !好好看看到底是那个 process 变成僵尸了吧?
        • 第三行(Cpus...):显示的是 CPU 的整体负载,每个项目可使用 ? 查阅。需要特别注意的是 %wa ,那个项目代表的是 I/O wait, 通常你的系统会变慢都是 I/O 产生的问题比较大!因此这里得要注意这个项目耗用 CPU 的资源喔! 另外,如果是多核心的设备,可以按下数字键『1』来切换成不同 CPU 的负载率。
        • 第四行与第五行:表示目前的物理内存与虚拟内存 (Mem/Swap) 的使用情况。 再次重申,要注意的是 swap的使用量要尽量的少!如果 swap 被用的很大量,表示系统的物理内存实在不足!
        • 第六行:这个是当在 top 程序当中输入指令时,显示状态的地方
        • 至于 top 下半部分的画面,则是每个 process 使用的资源情况。比较需要注意的是:
          • PID :每个 process 的 ID 啦!
          • USER:该 process 所属的使用者;
          • PR :Priority 的简写,程序的优先执行顺序,越小越早被执行;
          • NI :Nice 的简写,与 Priority 有关,也是越小越早被执行;
          • %CPU:CPU 的使用率;
          • %MEM:内存的使用率;
          • TIME+:CPU 使用时间的累加;
    5. pstree  找程序之间的相关性
      • pstree [-A|U] [-up]
        • -A :各程序树之间的连接以 ASCII 字符来连接;
        • -U :各程序树之间的连接以万国码的字符来连接。在某些终端接口下可能会有错误;
        • -p :并同时列出每个 process 的 PID;
        • -u :并同时列出每个 process 的所属账号名称。
  7. 程序的管理
    1. killall -signal 指令名称
    2. 关于程序的执行顺序
      • Priority 与 Nice 值
        • 这个 PRI 值越低代表越优先的意思。不过这个 PRI 值是由核心动态调整的, 用户无法直接调整 PRI 值的那如果你想要调整程序的优先执行序时,就得要透过 Nice 值了!
        • Nice 值就是上表的 NI 啦!一般来说, PRI 与 NI 的相关性如下:PRI(new) = PRI(old) + nice
        • nice 值可调整的范围为 -20 ~ 19 ;
        • root 可随意调整自己或他人程序的 Nice 值,且范围为 -20 ~ 19 ;
        • 一般用户仅可调整自己程序的 Nice 值,且范围仅为 0 ~ 19 (避免一般用户抢占系统资源);
        • 一般使用者仅可将 nice 值越调越高,例如本来 nice 为 5 ,则未来仅能调整到大于 5;
      • 调整程序的nice值
        • 一开始执行程序就立即给予一个特定的 nice 值:用 nice 指令
        • 调整某个已经存在的 PID 的 nice 值:用 renice 指令。
  8. 系统资源的观察
    • free :观察内存使用情况
    • uname:查阅系统与核心相关信息
    • uptime:观察系统启动时间与工作负载
    • netstat :追踪网络或揑槽文件  --------613
    • dmesg :分析核心产生的讯息
    • vmstat :侦测系统资源变化
      • 字段说明:
        1. 内存字段 (procs) 的项目分别为:
          • r :等待运作中的程序数量;b:不可被唤醒的程序数量。这两个项目越多,代表系统越忙碌 (因为系统太忙,所以很多程序就无法被执行或一直在等待而无法被唤醒之敀)。
        2. 内存字段 (memory) 项目分别为:
          • swpd:虚拟内存被使用的容量; free:未被使用的内存容量; buff:用于缓冲存储器;cache:用于高速缓存。 这部份则与 free 是相同的。
        3. 内存置换空间 (swap) 的项目分别为:
          • si:由磁盘中将程序取出的量; so:由于内存不足而将没用到的程序写入到磁盘的 swap 的容量。如果 si/so 的数值太大,表示内存内的数据常常得在磁盘与主存储器之间传来传去,系统效能会很差!
        4. 磁盘读写 (io) 的项目分别为:
          • bi:由磁盘写入的区块数量; bo:写入到磁盘去的区块数量。如果这部份的值越高,代表系统的 I/O 非常忙碌!
        5. 系统 (system) 的项目分别为:
          • in:每秒被中断的程序次数; cs:每秒钟进行的事件切换次数;这两个数值越大,代表系统与接口设备的沟通非常频繁! 这些接口设备当然包括磁盘、网络卡、时间钟等。
        6. CPU 的项目分别为:
          • us:非核心层的 CPU 使用状态; sy:核心层所使用的 CPU 状态; id:闲置的状态; wa:等待 I/O 所耗费的CPU 状态; st:被虚拟机 (virtual machine) 所盗用的 CPU 使用状态 (2.6.11 以后才支持)。
  9. 特殊档案与程序
    1. 具有 SUID/SGID 权限的指令执行状态
      • SUID 的权限会生效是由于『具有该权限的程序被触发』,而我们知道一个程序被触发会变成程序, 所以啰,执行者可以具有程序拥有者的权限就是在该程序变成程序的那个时候啦 
    2. /proc/* 代表的意义
      • 我们开机所执行的第一支程序 init 他的 PID 是 1 , 这个 PID 的所有相关信息都写入在 /proc/1/* 当中,cmdline:这个程序被启动的指令串;environ:这个程序的环境变量内容。
      • /proc 目录底下的档案
        •  档名                                                      档案内容
        • /proc/cmdline  加载 kernel 时所下达的相关参数!查阅此档案,可了览系统是如何启动的!
        • /proc/cpuinfo  本机的 CPU 的相关信息,包含频率、类型与运算功能等
        • /proc/devices  这个档案记录了系统各个主要装置的主要装置代号,与 mknod 有关呢
        • /proc/filesystems 目前系统已经加载的文件系统啰!
        • /proc/interrupts 目前系统上面的 IRQ 分配状态。
        • /proc/ioports  目前系统上面各个装置所配置的 I/O 地址。
        • /proc/kcore  这个就是内存的大小啦!好大对吧!但是不要读他啦!
        • /proc/loadavg  还记得 top 以及 uptime 吧?没错!上头的三个平均数值就是记录在此
        • /proc/meminfo  使用 free 列出的内存信息,嘿嘿!在这里也能够查阅到!
        • /proc/modules  目前我们的 Linux 已经加载的模块列表,也可以想成是驱动程序啦!
        • /proc/mounts  系统已经挂载的数据,就是用 mount 这个指令呼叫出来的数据啦!
        • /proc/swaps  到底系统挂加载的内存在哪里?呵呵!使用掉的 partition 就记录在此啦!
        • /proc/partitions 使用 fdisk -l 会出现目前所有的 partition 吧?在这个档案当中也有纨录喔!
        • /proc/pci  在 PCI 总线上面,每个装置的详绅情况!可用 lspci 来查阅!
        • /proc/uptime  就是用 uptime 的时候,会出现的信息啦!
        • /proc/version  核心的版本,就是用 uname -a 显示的内容啦!
        • /proc/bus/*  一些总线的装置,还有 USB 的装置也记录在此喔!
  10. 查询已开启档案或已执行程序开启之档案
    1. fuser:藉由档案(或文件系统)找出正在使用该档案的程序
      • ACCESS 的项目,那个项目代表的意义为:
        • c :此程序在当前的目录下(非次目录);
        • e :可被触发为执行状态;
        • f :是一个被开启的档案;
        • r :代表顶层目录 (root directory);
        • F :该档案被开启了,不过在等待回应中;
        • m :可能为分享的动态凼式库;
    2. lsof :列出被程序所开启的档案文件名
    3. pidof :找出某支正在执行的程序的 PID
  11. SELinux ------------------------622
    1. 委任式讵问控制, MAC------可以针对特定的程序与特定的档案资源来进行权限的控管!
    2. SELinux 的运作模式
      1. 主体 (Subject):
        • SELinux 主要想要管理的就是程序,因此你可以将『主体』跟本章课到的 process 划上等号;
      2. 目标 (Object):
        • 主体程序能否存取的『目标资源』一般就是文件系统。因此这个目标项目可以等文件系统划上等号;
      3. 政策 (Policy):
        • SELinux 会依据某些服务来制订基本的存取安全性政策。
          • targeted:针对网络服务限制较多,针对本机限制较少,是预设的政策;
          • strict:完整的 SELinux 限制,限制方面较为严格。
          • 建议使用预设的 targeted 政策即可。
      4. 安全性本文 (security context):
        • 我们刚刚课到了主体、目标与政策面,但是主体能不能存取目标除了政策指定之外,主 体与目标的安全性本文必项一致才能够顺利存取。 这个安全性本文 (security context) 有点类似文件系统的rwx 啦!安全性本文的内容与设定是非常重要的! 如果设定错误,你的某些服务(主体程序)就无法存取文件系统(目标资源),当然就会一直出现『权限不符』的错误讯息了!
    3. SELinux 支持三种模式,分别如下:
      • enforcing:强制模式,代表 SELinux 运作中,且已经正确的开始限制 domain/type 了;
      • permissive:宽容模式:代表 SELinux 运作中,不过仅会有警告讯息并不会实际限制 domain/type 的存取。这种模式可以运来作为 SELinux 的 debug 之用;
      • disabled:关闭,SELinux 并没有实际运作。
    4. SELinux 的配置文件 /etc/selinux/config
    5. 安全性本文 (Security Context)
      • 安全性本文存在于主体程序中与目标档案资源中,档案的安全性文本在inode内,通过ls -Z 查看
      • 安全性本文主要用冒号分为三个字段,这三个字段的意义为:
        1. 身份识别 (Identify):
          • 相当于账号方面的身份识别!主要的身份识别则有底下三种常见的类型:
            • root:表示 root 的账号身份
            • system_u:表示系统程序方面的识别,通常就是程序啰;
            • user_u:代表的是一般使用者账号相关的身份。
        2. 角色 (Role):
          • 透过觇色字段,我们可以知道这个数据是属于程序、档案资源还是代表使用者。一般的觇色有:
            • object_r:代表的是档案或目录等档案资源,这应该是最常见的啰;
            • system_r:代表的就是程序啦!不过,一般使用者也会被指定成为 system_r 喔!
        3. 类型 (Type) :(最重要!)
          • 在预设的 targeted 政策中, Identify 与 Role 字段基本上是不重要的!重要的在于这个类型(type) 字段! 基本上,一个主体程序能不能读取到这个档案资源,与类型字段有关!而类型字段在档案与程序的定义不太相同,分别是:
            • type:在档案资源 (Object) 上面称为类型 (Type);
            • domain:在主体程序 (Subject) 则称为领域 (domain) 了!
      • domain 需要与 type 搭配,则该程序才能够顺利的读取档案资源啦!
    6. domain 需要与 type 搭配,则该程序才能够顺利的读取档案资源啦!这个领域中设置了相关规则,能否读取什么类型的档案。最终能否读取,还是由档案的权限rwx决定。
    7. SELinux 的启动与关闭
      • 强制与宽容模式之间切换与需要重启,其他模式之间切换需要重启。因为它是整合到核心里面去的。vi /boot/grub/menu.lst 查看核心有无关闭此项功能,该档案与能出现selinux=0的字样在kernel后面。
    8. 重设 SELinux 安全性本文
      • chcon [-R] [-t type] [-u user] [-r role] 档案
      • chcon [-R] --reference=范例文件 档案
    9. 预设的安全性本文来还原
      • restorecon [-Rv] 档案或目录
    10. 安装相关查询工具
      • yum install policycoreutils-python setools-console setroubleshoot setroubleshoot-server
      • setroubleshoot --> 错误讯息写入 /var/log/messages
        • cat /var/log/messages | grep setroubleshoot
      • auditd --> 详绅资料写入 /var/log/audit/audit.log ----------需安装相关工具
        • audit2why < /var/log/audit/audit.log
    11. SELinux 的政策与规则管理
      • seinfo [-Atrub]-------政策查询
      • sesearch [-all] [-s 主体类别] [-t 目标类别] [-b 布尔值]-----------SELinux的详细规则查询
      • getsebool [-a] [布尔值条款]--------查看布尔值的状态
      • setsebool [-P] 布尔值=[0|1]   0关1开---------修改布尔值状态
      • 默认目录的安全性本文查询与修改
        • semanage {login|user|port|interface|fcontext|translation} -l
        • semanage fcontext -{a|d|m} [-frst] file_spec

命令:

  1. 直接将指令丢到背景中『执行』的 &
    • [root@www ~]# tar -zpcf /tmp/etc.tar.gz /etc &
    • [1] 8400 <== [job number] PID
  2. 将『目前』的工作丢到背景中『暂停』:[ctrl]-z
    • [root@www ~]# vi ~/.bashrc 在 vi 的一般模式下,按下 [ctrl]-z 这两个按键
      •  [1]+ Stopped vim ~/.bashrc
  3. 观察目前的背景工作状态: jobs
    • jobs [-lrs]
      • -l :除了列出 job number 与指令串之外,同时列出 PID 的号码;
      • -r :仅列出正在背景 run 的工作;
      • -s :仅列出正在背景当中暂停 (stop) 的工作。
  4. 将背景工作拿到前景来处理:fg
    • fg %jobnumber
      • %jobnumber :jobnumber 为工作号码(数字)。注意,那个 % 是可有可无的!
  5. 让工作在背景下的状态变成运作中: bg
    • bg %jobnumber
  6. 管理背景当中的工作: kill
    • kill -signal %jobnumber
      • -l :这个是 L 的小写,列出目前 kill 能够使用的讯号 (signal) 有哪些?
      • signal :代表给予后面接的那个工作什么样的指示啰!用 man 7 signal 可知:
        • -1 :重新读取一次参数的配置文件 (类似 reload);
        • -2 :代表与由键盘输入 [ctrl]-c 同样的动作;
        • -9 :立刻强制删除一个工作
        • -15:以正常的程序方式终止一项工作。与 -9 是不一样的。
    • kill 后面接的数字默认会是 PID ,如果想要管理 bash 的工作控制,就得要加上 %数字 了。
  7. 脱机管理问题
    • nohup [指令与参数] <==在终端机前景中工作
    • nohup [指令与参数] & <==在终端机背景中工作
    • nohup 并不支持 bash 内建的指令,因此你的指令必项要是外部指令才行。
  8. 程序的观察
    1. ps :将某个时间点的程序运作情况摘取下来
      • ps aux <==观察系统所有的程序数据
      • ps -lA <==也是能够观察所有系统的数据
      • ps axjf <==连同部分程序树状态
        • -A :所有的 process 均显示出来,与 -e 具有同样的作用;
        • -a :不与 terminal 有关的所有 process ;
        • -u :有效使用者 (effective user) 相关的 process ;
        • x :通常与 a 这个参数一起使用,可列出较完整信息。
        • 输出格式规划:
          • l :较长、较详绅的将该 PID 的的信息列出;
          • j :工作的格式 (jobs format)
          • -f :做一个更为完整的输出。
    2. top:动态观察程序的变化
      • top [-d 数字] | top [-bnp]
        • -d :后面可以接秒数,就是整个程序画面更新的秒数。预设是 5 秒;
        • b :以批次的方式执行 top
        • -n :与 -b 搭配,意义是,需要进行几次 top 的输出结果。
        • -p :指定某些个 PID 来进行观察监测而已。
        • 在 top 执行过程当中可以使用的按键指令:
          • ? :显示在 top 当中可以输入的按键指令;
          • P :以 CPU 的使用资源排序显示;
          • M :以 Memory 的使用资源排序显示;
          • N :以 PID 来排序喔!
          • T :由该 Process 使用的 CPU 时间累积 (TIME+) 排序。
          • k :给予某个 PID 一个讯号 (signal)
          • r :给予某个 PID 重新制订一个 nice 值。
          • q :离开 top 软件的按键。
    3. pstree 找程序之间的相关性
      • pstree [-A|U] [-up]
        • -A :各程序树之间的连接以 ASCII 字符来连接;
        • -U :各程序树之间的连接以万国码的字符来连接。在某些终端接口下可能会有错误;
        • -p :并同时列出每个 process 的 PID;
        • -u :并同时列出每个 process 的所属账号名称。
  9. 程序的管理
    1. kill -signal PID
    2. killall -signal 指令名称------------ps aux 最后一项
      • killall [-iIe] [command name]
        • -i :interactive 的意思,交互式的,若需要删除时,会出现提示字符给用户;
        • -e :exact 的意思,表示『后面接的 command name 要一致』,但整个完整的指令 不能超过 15 个字符。
        • -I :指令名称(可能含参数)忽略大小写。
    3. 调整程序的nice值
      • 整个 nice 值是可以在父程序 --> 子程序之间传递的呢! 另外,除了 renice 之外,其实那个 top 同样的也是可以调整 nice 值的
      • nice :新执行的指令即给予新的 nice 值
        • nice [-n 数字] command
          • -n :后面接一个数值,数值的范围 -20 ~ 19。
      • renice :已存在程序的 nice 重新调整
        • renice [number] PID
  10. 系统资源的观察
    1. free :观察内存使用情况
      • free [-b|-k|-m|-g] [-t]
        • -b :直接输入 free 时,显示的单位是 Kbytes,我们可以使用 b(bytes),m(Mbytes) k(Kbytes), 及 g(Gbytes) 来显示单位喔!
        • -t :在输出的最终结果,显示物理内存与 swap 的总量。
    2. uname:查阅系统与核心相关信息
      • uname [-asrmpi]
        • -a :所有系统相关的信息,包括底下的数据都会被列出来;
        • -s :系统核心名称
        • -r :核心的版本
        • -m :本系统的硬件名称,例如 i686 或 x86_64 等;
        • -p :CPU 的类型,与 -m 类似,叧是显示的是 CPU 的类型!
        • -i :硬件的平台 (ix86)
    3. uptime:观察系统启动时间与工作负载
    4. netstat :追踪网络或Socket文件
      • netstat -[atunlp]
        • -a :将目前系统上所有的联机、监听、Socket 数据都列出来
        • -t :列出 tcp 网络封包的数据
        • -u :列出 udp 网络封包的数据
        • -n :不用程序的服务名称,以端号 (port number) 来显示;
        • -l :列出目前正在网络监听 (listen) 的服务;
        • -p :列出该网络服务的程序 PID
    5. dmesg :分析核心产生的讯息
      • dmesg | more
      • 例:[root@www ~]# dmesg | grep -i hd;dmesg | grep -i eth
    6. vmstat :侦测系统资源变化
      • vmstat [-a] [延迟 [总计侦测次数]] <==CPU/内存等信息
      • vmstat [-fs] <==内存相关
      • vmstat [-S 单位] <==设定显示数据的单位
      • vmstat [-d] <==与磁盘有关
      • vmstat [-p 分割槽] <==与磁盘有关
        • -a :使用 inactive/active(活跃与否) 取代 buffer/cache 的内存输出信息;
        • -f :将开机到目前为止,系统复制 (fork) 的程序数;
        • -s :将一些事件 (开机至目前为止) 导致的内存变化情况列表说明;
        • -S :后面可以接单位,让显示的数据有单位。例如 K/M 取代 bytes 的容量;
        • -d :列出磁盘的读写总量统计表
        • -p :后面列出分割槽,可显示该分割槽的读写总量统计表
  11. 查询已开启档案或已执行程序开启之档案
    1. fuser:藉由档案(或文件系统)找出正在使用该档案的程序
      • fuser [-umv] [-k [i] [-signal]] file/dir
        • -u :除了程序的 PID 之外,同时列出该程序的拥有者;
        • -m :后面接的那个档名会主动的上提到该文件系统的最顶局,对 umount 不成功很有效!  
        • -v :可以列出每个档案与程序还有指令的完整相关性!
        • -k :找出使用该档案/目录的 PID ,并试图以 SIGKILL 这个讯号给予该 PID;  
        • -i :必项与 -k 配合,在删除 PID 之前会先询问使用者意愿!
        • -signal:例如 -1 -15 等等,若不加的话,预设是 SIGKILL (-9) 啰!
    2. lsof :列出被程序所开启的档案文件名
      • lsof [-aUu] [+d]
        • -a :多项数据需要『同时成立』才显示出结果时!
        • -U :仅列出 Unix like 系统的 socket 文件类型;
        • -u :后面接 username,列出该用户相关程序所开启的档案;
        • +d :后面接目录,亦即找出某个目录底下已经被开启的档案!
      • 例:lsof -u root | grep bash -------秀出属亍 root 的 bash 这支程序所开启的档案
    3. pidof :找出某支正在执行的程序的 PID
      • pidof [-sx] program_name
        • -s :仅列出一个 PID 而不列出所有的 PID
        • -x :同时列出该 program name 可能的 PPID 那个程序的 PID
  12. SELinux 
    1. getenforce----------- 查看当前SELinux的模式
    2. sestatus------------- 查看SELinux 的政策
      • sestatus [-vb]
        • -v :检查列亍 /etc/sestatus.conf 内的档案与程序的安全性本文内容;
        • -b :将目前政策的规则布尔值列出,亦即某些规则 (rule) 是否要启动 (0/1) 之意;
    3. SELinux 模式在 enforcing 与 permissive 之间切换:
      • setenforce [0|1]
        • 0 :转成 permissive 宽容模式;
        • 1 :转成 Enforcing 强制模式
    4. ps -Z-----------查看程序的安全性文本
    5. ll -Z-----------查看档案或目录的安全性属性
    6. 重设 SELinux 安全性本文
      • chcon [-R] [-t type] [-u user] [-r role] 档案
      • chcon [-R] --reference=范例文件 档案
        • -R :连同该目录下的次目录也同时修改;
        • -t :后面接安全性本文的类型字段!例如 httpd_sys_content_t ;
        • -u :后面接身份识别,例如 system_u;
        • -r :后面街觇色,例如 system_r;
        • --reference=范例文件:拿某个档案当范例来修改后续接的档案的类型!
    7. 预设的安全性本文来还原
      • restorecon [-Rv] 档案或目录
        • -R :连同次目录一起修改;
        • -v :将过程显示到屏幕上
    8. SELinux排错
      • setroubleshoot --> 错误讯息写入 /var/log/messages
        • cat /var/log/messages | grep setroubleshoot
      • auditd --> 详绅资料写入 /var/log/audit/audit.log ----------需安装相关工具
        • audit2why < /var/log/audit/audit.log
    9. SELinux 的政策与规则管理
      1. seinfo [-Atrub] ---------------政策查询
        • -A :列出 SELinux 的状态、规则布尔值、身份识别、觇色、类别等所有信息
        • -t :列出 SELinux 的所有类别 (type) 种类
        • -r :列出 SELinux 的所有觇色 (role) 种类
        • -u :列出 SELinux 的所有身份识别 (user) 种类
        • -b :列出所有规则的种类 (布尔值)
      2. SELinux的详细规则查询:
        • sesearch [-all] [-s 主体类别] [-t 目标类别] [-b 布尔值]
          • -all :列出该类别或布尔值的所有相关信息
          • -t :后面还要接类别,例如 -t httpd_t
          • -b :后面还要接布尔值的规则,例如 -b httpd_enable_ftp_server
      3. 布尔值的查询与修改
        • getsebool [-a] [布尔值条款]
          • -a :列出目前系统上面的所有布尔值条款设定为开启或关闭值
        • setsebool [-P] 布尔值=[0|1]   0关1开
          • -P :直接将设定值写入配置文件,该设定数据未来会生效的!
      4. 默认目录的安全性本文查询与修改
        • semanage {login|user|port|interface|fcontext|translation} -l
        • semanage fcontext -{a|d|m} [-frst] file_spec
          • fcontext :主要用在安全性本文方面的用途, -l 为查询的意思;
          • -a :增加的意思,你可以增加一些目录的默认安全性本文类型设定;
          • -m :修改的意思;
          • -d :删除的意思。

linux 程序管理与SElinux