13.程序管理与SELinux初探

一.进程
1.进程与程序

程序 (program):通常为 binary program ,放置在储存媒体中 (如硬盘、光盘、软盘、磁带等), 为实体文件的型态存在;

进程 (process):程序被触发后,运行者的权限与属性、程序的程序码与所需数据等都会被加载内存中, 操作系统并给予这个内存内的单元一个识别码 (PID),可以说,程序就是一个正在运行中的程序。


2.子程序与父程序: 

程序衍生出来的其他程序在一般状态下,也会沿用这个程序的相关权限



3.fork and exec:过程调用的流程

 Linux 的程序呼叫通常称为 fork-and-exec 的流程 (注1)!程序都会通过父程序以复制 (fork) 的方式产生一个一模一样的子程序, 然后被复制出来的子程序再以 exec 的方式来运行实际要进行的程序,最终就成为一个子程序的存在。

4.常驻在内存当中的程序通常都是负责一些系统所提供的功能以服务使用者各项任务,因此这些常驻程序就会被我们称为:服务 (daemon)。

二.工作管理(job control)
1.什么是工作管理
 当我们登陆系统取得 bash shell 之后,在单一终端机介面下同时进行多个工作的行为管理 。

进行 bash 的 job control 必须要注意到的限制是:

这些工作所触发的程序必须来自於你 shell 的子程序(只管理自己的 bash);

前台:你可以控制与下达命令的这个环境称为前景的工作 (foreground);

后台:可以自行运行的工作,你无法使用 [ctrl]+c 终止他,可使用 bg/fg 呼叫该工作;

后台中『运行』的程序不能等待 terminal/shell 的输入(input)。


2.job control 的管理
(1)直接将命令丢到背景中『运行』的 &

 [root@www ~]# tar -zpcf /tmp/etc.tar.gz /etc &

[1] 8400  <== [job number] PID 

[root@www ~]# tar: Removing leading `/' from member names # 在中括号内的号码为工作号码 (job number),该号码与 bash 的控制有关。

# 后续的 8400 则是这个工作在系统中的 PID。至於后续出现的数据是 tar 运行的数据流,

# 由於我们没有加上数据流重导向,所以会影响画面!不过不会影响前景的操作喔!


(2)将『目前』的工作丢到背景中『暂停』:[ctrl]-z

[root@www ~]# vi ~/.bashrc# 在 vi 的一般模式下,按下 [ctrl]-z 这两个按键

[1]+  Stopped                 vim ~/.bashrc

[root@www ~]#   <==顺利取得了前景的操控权!

[root@www ~]# find / -print....(输出省略)....

# 此时萤幕会非常的忙碌!因为萤幕上会显示所有的档名。请按下 [ctrl]-z 暂停

[2]+  Stopped                 find / -print


(3)观察目前的后台工作状态: jobs

[root@www ~]# jobs [-lrs]选项与参数:

-l  :除了列出 job number 与命令串之外,同时列出 PID 的号码;

-r  :仅列出正在背景 run 的工作;

-s  :仅列出正在背景当中暂停 (stop) 的工作。

(4)将后台工作拿到前景来处理:fg

[root@www ~]# fg %jobnumber选项与参数:

%jobnumber :jobnumber 为工作号码(数字)。注意,那个 % 是可有可无的!


(5)让工作在背景下的状态变成运行中: bg
(6)管理背景当中的工作: kill

[root@www ~]# kill -signal %jobnumber

[root@www ~]# kill -l选项与参数:

-l  :这个是 L 的小写,列出目前 kill 能够使用的讯号 (signal) 有哪些?

signal :代表给予后面接的那个工作什么样的指示罗!用 man 7 signal 可知:

  -1 :重新读取一次参数的配置档 (类似 reload);

  -2 :代表与由键盘输入 [ctrl]-c 同样的动作;

  -9 :立刻强制删除一个工作;

  -15:以正常的程序方式终止一项工作。与 -9 是不一样的


三.进程管理
1.进程的查看
(1)ps :将某个时间点的程序运行情况选取下来

[root@www ~]# ps aux  <==观察系统所有的程序数据

[root@www ~]# ps -lA  <==也是能够观察所有系统的数据

[root@www ~]# ps axjf <==连同部分程序树状态选项与参数:

-A  :所有的 process 均显示出来,与 -e 具有同样的效用;

-a  :不与 terminal 有关的所有 process ;

-u  :有效使用者 (effective user) 相关的 process ;

x   :通常与 a 这个参数一起使用,可列出较完整资讯。

输出格式规划:

l   :较长、较详细的将该 PID 的的资讯列出;

j   :工作的格式 (jobs format)

-f  :做一个更为完整的输出。



仅查看自己的 bash 相关程序: ps -l

查看系统所有程序: ps aux


(2)top:动态查看程序的变化

[root@www ~]# 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

[root@www ~]# pstree [-A|U] [-up]

选项与参数:

-A  :各程序树之间的连接以 ASCII 字节来连接;

-U  :各程序树之间的连接以万国码的字节来连接。在某些终端介面下可能会有错误;

-p  :并同时列出每个 process 的 PID;

-u  :并同时列出每个 process 的所属帐号名称。


2.进程的管理
  程序是如何互相管理的呢?其实是透过给予该程序一个讯号 (signal) 去告知该程序你想要让它作什么!

代号

名称

内容

1

SIGHUP

启动被终止的程序,可让该 PID 重新读取自己的配置档,类似重新启动

2

SIGINT

相当於用键盘输入 [ctrl]-c 来中断一个程序的进行

9

SIGKILL

代表强制中断一个程序的进行,如果该程序进行到一半, 那么尚未完成的部分可能会有『半产品』产生,类似 vim会有 .filename.swp 保留下来。

15

SIGTERM

以正常的结束程序来终止该程序。由於是正常的终止, 所以后续的动作会将他完成。不过,如果该程序已经发生问题,就是无法使用正常的方法终止时, 输入这个 signal 也是没有用的。

17

SIGSTOP

相当於用键盘输入 [ctrl]-z 来暂停一个程序的进行

(1)kill -signal PID
(2)killall -signal 命令名称


3.进程的执行顺序
程序是有优先顺序的,该项目为 Priority,但 PRI 是核心动态调整的,使用者只能使用 nice 值去微调 PRI
(1)nice :新运行的命令即给予新的 nice 值

[root@www ~]# nice [-n 数字] command选项与参数:

-n  :后面接一个数值,数值的范围 -20 ~ 19。

(2)renice :已存在程序的 nice 重新调整

[root@www ~]# renice [number] PID选项与参数:

PID :某个程序的 ID


4.系统资源的查看
(1)free :观察内存使用情况

[root@www ~]# free [-b|-k|-m|-g] [-t]选项与参数:

-b  :直接输入 free 时,显示的单位是 Kbytes,我们可以使用 b(bytes), m(Mbytes)

      k(Kbytes), 及 g(Gbytes) 来显示单位喔!

-t  :在输出的最终结果,显示实体内存与 swap 的总量。


(2)uname:查阅系统与核心相关资讯

[root@www ~]# uname [-asrmpi]选项与参数:

-a  :所有系统相关的资讯,包括底下的数据都会被列出来;

-s  :系统核心名称

-r  :核心的版本

-m  :本系统的硬件名称,例如 i686 或 x86_64 等;

-p  :CPU 的类型,与 -m 类似,只是显示的是 CPU 的类型!

-i  :硬件的平台 (ix86)


(3)uptime:观察系统启动时间与工作负载
(4)netstat :追踪网络或插槽档

[root@www ~]# netstat -[atunlp]选项与参数:

-a  :将目前系统上所有的连线、监听、Socket 数据都列出来

-t  :列出 tcp 网络封包的数据

-u  :列出 udp 网络封包的数据

-n  :不以程序的服务名称,以埠号 (port number) 来显示;

-l  :列出目前正在网络监听 (listen) 的服务;

-p  :列出该网络服务的程序 PID 

(5)dmesg :分析核心产生的信息

(6)vmstat :侦测系统资源变化


四.特殊文件与程序

1.具有 SUID/SGID 权限的命令运行状态

SUID 权限仅对二进位程序(binary program)有效;

运行者对於该程序需要具有 x 的可运行权限;

本权限仅在运行该程序的过程中有效 (run-time);

运行者将具有该程序拥有者 (owner) 的权限。


2./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/*

一些汇流排的装置,还有 U盘 的装置也记录在此喔!



3.查询已开启文件或已运行程序开启之文件
(1)fuser:通过文件(或文件系统)找出正在使用该文件的程序

[root@www ~]# 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 :列出被程序所开启的文件档名

[root@www ~]# lsof [-aUu] [+d]选项与参数:

-a  :多项数据需要『同时成立』才显示出结果时!

-U  :仅列出 Unix like 系统的 socket 文件类型;

-u  :后面接 username,列出该使用者相关程序所开启的文件;

+d  :后面接目录,亦即找出某个目录底下已经被开启的文件!


(3)pidof :找出某支正在运行的程序的 PID

  [root@www ~]# pidof [-sx] program_name

选项与参数:

-s  :仅列出一个 PID 而不列出所有的 PID

-x  :同时列出该 program name 可能的 PPID 那个程序的 PID


五.SELinux初探
1.什么是SELinux?
『 Security Enhanced Linux 』的缩写,字面上的意义就是安全强化的 Linux 之意。
安全强化:
(1)当初设计的目标:避免资源的误用
(2)传统的文件权限与帐号关系:自主式存取控制, DAC
(3)以政策守则订定特定程序读取特定文件:委任式存取控制, MAC


2.SELinux 的运行模式

(1)主体 (Subject):SELinux 主要想要管理的就是程序,因此你可以将『主体』跟本章谈到的 process 划上等号;

(2)目标 (Object):

主体程序能否存取的『目标资源』一般就是文件系统。因此这个目标项目可以等文件系统划上等号;

(3)政策 (Policy):

targeted:针对网络服务限制较多,针对本机限制较少,是默认的政策;

strict:完整的 SELinux 限制,限制方面较为严格。

(4)安全性本文 (security context):

3.SELinux 支持三种模式

(1)enforcing:强制模式,代表 SELinux 运行中,且已经正确的开始限制 domain/type 了;

(2)permissive:宽容模式:代表 SELinux 运行中,不过仅会有警告信息并不会实际限制 domain/type 的存取。这种模式可以运来作为 SELinux 的 debug 之用;

(3)disabled:关闭,SELinux 并没有实际运行。


4.SELinux 启动与关闭的配置档在: /etc/selinux/config

5.SELinux 的启动与观察: getenforce, sestatus 等命令

6.重设 SELinux 的安全性本文可使用 restorecon 与 chcon

7.在 SELinux 有启动时,必备的服务至少要启动 setroubleshoot 这个!

8.若要管理默认的 SELinux 布林值,可使用 getsebool, setsebool 来管理!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值