第17章 程序管理与 SELinux初探
program,程序,或者说工程,是实体文件的形态存在;
process,程序,或者说进程,是特指执行中的程序。
fork and exec:过程调用的流程
父程序以复制(fork)的方式产生一个一模一样的子程序,然后被复制出来的子程序以exec的方式来执行实际要进行的程序。
Linux独特的多人多任务环境使得它能够防止程序运行期间的错误。因为用户可以切换到其他终端机界面,然后以 ps -aux调出错误程序,kill之,就行了。
--------------------------------------------------------------------------------------
工作管理(job control)
进行工作管理的行为中,其实每个工作都是目前bash的子程序,亦即彼此之间都是有相关性的,所以无法用job control的方式让一个用户的环境去管理另一个用户的bash
进行bash的工作管理必须注意:只能管理自己的bash
直接将指令丢到背景中【执行】的 &
将目前的工作丢到背景中【暂停】 [ctrl]+z
观察目前的背景工作状态: jobs
将背景工作拿到前景来处理: fg
让工作在背景下的状态变成运作中: bg
管理背景当中的工作: kill
脱机管理问题——————
at 或者是 nohup 可以让工作脱机进行,但是nohup 只对外部指令有效
------------------------------------------------------------------------------
程序管理
查阅系统上面正在运作当中的程序——静态的ps或者动态的top,或者pstree查阅程序树
ps:将某个时间点的程序运作情况撷取下来
仅观察自己的bash的相关程序: ps -l
会显示出来的资料有:
F:程序标识(process flags),说明程序的权限,4代表root,1代表子程序仅能fork不能exec
S:程序状态(state),主要有R、S、D、T、Z(僵尸)
UID/PID/PPID :PPID指父程序的PID
C:代表CPU使用率
PRI/NI:此程序被CPU执行优先级,数值越小程序优先级越高
ADDR/SZ/WCHAN:ADDR代表在内存哪个部分,SZ代表用掉多少内存,WCHAN表示程序是否正在运作
TTY:登陆者的终端机位置,远程登录时为 pts/n
TIME:使用掉的CPU时间,程序实际花费CPU运作时间
CMD:触发程序的指令是
top:动态观察程序的变化
pstree——程序之间的相关性
程序之间相互管理可以通过给该程序一个信号(signal)来通知它对应的操作
kill -signal PID
PID 1 :专指“init"这个程序
可以将signal传送给某个工作(%jobnumber)或者某个PID(数字),不过加数字和%number很大不同哦
killalll -singnal 指令名称
程序的执行顺序
PRI(越低越先执行)——由核心动态调整
用户只能通过nice值影响优先级:PRI(new)=PRI(old)+nice
nice的可调节范围:-20~19,root可以随意调整,一般用户只能将自己的nice值越调越高,而且范围在0~19
已存在程序的nice重新调整,renice
系统资源的观察
free:观察内存使用情况
uname:查阅系统与核心相关信息
uptime:观察系统启动时间与工作负载
显示系统开机多久了,以及1,5,15分钟的平均负载
netstat:追踪网络或插槽文件
dmesg:分析核心产生的信息
比如,输出所有核心开机信息是 dmesg |more,而单独查询硬盘信息则是 dmesg | grep -i hd,查询网络卡则是 dmesg | grep -i eth
vmstat:侦测系统资源变化
-------------------------------------------------------------------------------------------------
特殊文件与程序
SUID的权限会生效是由于“具有该权限的程序被触发”,执行者可以具有程序拥有者的权限时因为该program被触发成为process。
与Linux系统相关的参数(/proc目录底下的文件)是——大致了解而已
fuser:根据文件(或文件系统)找出正在使用该文件的程序
lsof:列出被程序所开启的文件的文件名
pidof:找出某支正在执行的程序的PID
------------------------------------------------------------------------------------------------------
SELinux初探
Security Enhanced Linux——安全强化的Linux,最初是为了避免资源误用
SELinux的运作模式:
主体(Subject),也就是process
目标(Object),也就是文件系统
政策(Policy),分为 targeted 和 strict 两种
安全性本文(security context),有点类似文件系统的 rwx 。感觉就是权限
安全性本文是放置在文件的 inode内, 可以用 ls -Z 来查看安全性本文,它主要用冒号分为三个字段:身份识别、角色、类型
身份识别——有三种类型,root、system_u(表示系统程序的识别)、user_u(表示一般用户账号)
角色——分为 object_r(代表文件或目录)、system_r(代表程序)
类型(最重要)——在文件资源上称为类型(type),在主体程序上称为(domain)
这三个字段在targeted政策下的对应如下
SELinux的启动、关闭与观察
目前SELinux支持三种模式:enforcing(强制模式,代表SELinux运作中,且已经正确的开始限制 domain/type 了);permissive(宽容模式,运作中不过只有警告而不会限制,作为调试);disabled(关闭,没有运作)
观察目前SELinux的模式
观察SELinux的政策:
如果改变了SELinux的政策,那么需要重新启动哦~~
让SELinux在 enforcing 与 permissive 之间切换的方法:
如果安全性本文错了,那么怎么把它改过来呢~~如下
使用默认的安全性本文还原方式:
setroubleshoot: 将错误信息 写入 /var/log/messages
这个服务最好是开机自启动哦,所以需要使用 chkconfig --list setroubleshoot 来查看一下它的运作情况,如果出现 3:off / 5:off 的话,就需要用 chkconfig setroubleshoot on指令来开启。
auditd:将详细资料写入 /var/log/audit/audit.log
会将错误的详细信息记录下来,与上一个服务开启相同
seinfo:查询 SELinux使用的政策
如果查询到相关的类别或者布尔值后想要知道详细规则,使用sesearch
布尔值的查询与修改:
开启或关闭布尔值
semanage:查询或修改 默认的安全性本文