鸟哥的linux私房菜——第十六章学习(程序管理与 SELinux 初探)
第十六章、程序管理与 SE Linux 初探
在 Linux 系统当中:“触发任何一个事件时,系统都会将他定义成为一个程序,并且给予这个程序一个 ID ,称为 PID,同时依据启发这个程序的使用者与相关属性关系,给予这个 PID 一组有效的权限设置。” 从此以后,这个 PID 能够在系统上面进行的动作,就与这个 PID 的权限有关了!
1.1)、进程与程序
l 程序 (program):通常为 binary program ,放置在储存媒体中 (如硬盘、光盘、软盘、磁带等), 为实体文件的型态存在;
l 进程 (process):程序被触发后,执行者的权限与属性、程序的程序码与所需数据等都会被载入内存中, 操作系统并给予这个内存内的单元一个识别码 (PID),可以说,进程就是一个正在运行中的程序。(鸟哥的书里把这两个都叫做程序)
1.2)、子进程有一个PPID(parent PID)
在 Linux 的程序调用通常称为 fork-and-exec 的流程!程序都会借由父程序以复制 (fork) 的方式产生一个一模一样的子程序, 然后被复制出来的子程序再以 exec 的方式来执行实际要进行的程序,最终就成为一个子程序的存在。
常驻在内存当中的进程通常都是负责一些系统所提供的功能以服务使用者各项任务,因此这些常驻进程就会被我们称为:服务(daemon)。
1.3)、job control:工作管理
当我们登陆系统取得 bash shell 之后,在单一终端机接口下同时进行多个工作的行为管理。
在进行工作管理的行为中, 其实每个工作都是目前 bash 的子程序,亦即彼此之间是有相关性的。 我们无法以 job control 的方式由 tty1 的环境去管理 tty2 的 bash
假设我们只有一个终端接口,因此在可以出现提示字符让你操作的环境就称为前景 (foreground),至于其他工作就可以让你放入背景 (background) 去暂停或运行。
放入背景的工作是不可以使用 [ctrl]+c 来终止的,可使用 bg/fg 调用该工作;
背景中“执行”的进程不能等待 terminal/shell 的输入(input);
在背景里面的工作状态又可以分为“暂停 (stop)”与“运行中 (running)”;
- 直接将指令丢到背景中“执行”的 & ;
将输出的信息都给他传送到 /tmp/log.txt 当中,数据流重导向:
[root@study ~]# tar -zpcvf /tmp/etc.tar.gz /etc > /tmp/log.txt 2>&1 &
[1] 14547
[root@study ~]#
在vim的一般模式下,按下ctrl和z两个键,屏幕会出现[1]表示这是第一个工作,在默认的情况下,使用[ctrl]-z 丢到背景当中的工作都是“暂停”的状态:
guojiamin@root:~/gimtest/vimtest$ jobs
[1]- Stopped vim create3files.sh
[2]+ Stopped sh what_to_eat-3.sh
+ 代表最近被放到背景的工作号码,- 代表最近最后第二个被放置到背景中的工作号码。 而超过最后第三个以后的工作,就不会有+/- 符号存在了!
- 将背景工作拿到前景来处理:fg(foreground)
[root@study ~]# fg %jobnumber
选项与参数:
%jobnumber :jobnumber 为工作号码(数字)。注意,那个 % 是可有可无的!
范例一:先以 jobs 观察工作,再将工作取出:
[root@study ~]# jobs -l
[1]- 14566 Stopped vim ~/.bashrc
[2]+ 14567 Stopped find / -print
[root@study ~]# fg <==默认取出那个 + 的工作,亦即 [2]。立即按下[ctrl]-z
[root@study ~]# fg %1 <==直接规定取出的那个工作号码!再按下[ctrl]-z
[root@study ~]# jobs -l
[1]+ 14566 Stopped vim ~/.bashrc
[2]- 14567 Stopped find / -print
- 让工作在背景下的状态变成运行中: bg(background)
范例一:一执行 find / -perm /7000 > /tmp/text.txt 后,立刻丢到背景去暂停!
[root@study ~]# find / -perm /7000 > /tmp/text.txt
# 此时,请立刻按下 [ctrl]-z 暂停!
[3]+ Stopped find / -perm /7000 > /tmp/text.txt
范例二:让该工作在背景下进行,并且观察他!!
[root@study ~]# jobs ; bg %3 ; jobs
[1] Stopped vim ~/.bashrc
[2]- Stopped find / -print
[3]+ Stopped find / -perm /7000 > /tmp/text.txt
[3]+ find / -perm /7000 > /tmp/text.txt &
[1]- Stopped vim ~/.bashrc
[2]+ Stopped find / -print
[3] Running find / -perm /7000 > /tmp/text.txt &
- 管理背景当中的工作: kill
需要给予该工作一个讯号 (signal),由于用 vim 的时候,不是会产生一个 .filename.swp 的文件,
-9 这个 signal 通常是用在“强制删除一个不正常的工作”时所使用的, .filename.swp 文件不会被删除;【不建议】
-15 则是以正常步骤结束一项工作,.filename.swp 文件被删除;【推荐】
当用-15kill进程时,若kill不掉,则可以先用fg来取回前景控制权,然后再离开 vim 才对。
kill 后面接的数字默认会是 PID ,如果想要管理 bash 的工作控制,就得要加上 %数字 了
- 仅观察自己的 bash 相关程序: ps -l
- 观察系统所有程序: ps aux
- 动态观察程序的变化:top
ps 是静态的结果输出, top 这个程序可以持续的监测整个系统的程序工作状态
如果想要找出最损耗 CPU 资源的那个程序时:
1、top;
2、CPU 使用资源来排序 (在 top 当中按下 P 即可)。
杀掉某进程:kill -9 +PID或killall PName
2.1)、Priority 与 Nice 值
假设 pro1, pro2 是紧急的程序, pro3, pro4 是一般的程序,在这样的环境中,由于不具有优先顺序,如果 pro3, pro4 的工作又臭又长!那么紧急的 pro1, pro2 就得要等待个老半天才能够完成,我们想要将程序分优先顺序啦!如果优先序较高则运行次数可以较多次, 而不需要与较慢优先的程序抢位置!
所以具高优先权的 pro1, pro2 可以被取用两次,而较不重要的 pro3, pro4 则运行次数较少。 如此一来 pro1, pro2 就可以较快被完成啦。这就是“优先执行序(priority, PRI)”,不过PRI 值越低代表越优先的意思。不过这个 PRI 值是由核心动态调整的, 使用者无法直接调整 PRI 值的。
那么为了调整PRI值,我们可以通过NI(Nice)值,为什么呢?
因为PRI(new) = PRI(old) + nice (nice 值有正负)
- nice 值可调整的范围为 -20 ~ 19 ;
- root 可随意调整自己或他人程序的 Nice 值,且范围为 -20 ~ 19 ;
- 一般使用者仅可调整自己程序的 Nice 值,且范围仅为 0 ~ 19 (避免一般用户抢占系统资源);
- 一般使用者仅可将 nice 值越调越高,例如本来 nice 为 5 ,则未来仅能调整到大于 5;
那么如何调整nice值呢?有两种方法:
1、一开始执行程序就立即给予一个特定的 nice 值:用 nice 指令;
范例一:用 root 给一个 nice 值为 -5 ,用于执行 vim ,并观察该程序!
[root@study ~]# nice -n -5 vim &
[1] 19865
[root@study ~]# ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 14836 14835 0 90 10 - 29068 wait pts/0 00:00:00 bash
2、调整某个已经存在的 PID 的 nice 值:用 renice 指令。
范例一:找出自己的 bash PID ,并将该 PID 的 nice 调整到 -5
[root@study ~]# ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 14836 14835 0 90 10 - 29068 wait pts/0 00:00:00 bash
0 R 0 19900 14836 0 90 10 - 30319 - pts/0 00:00:00 ps
[root@study ~]# renice -5 14836
14836 (process ID) old priority 10, new priority -5
[root@study ~]# ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 14836 14835 0 75 -5 - 29068 wait pts/0 00:00:00 bash
0 R 0 19910 14836 0 75 -5 - 30319 - pts/0 00:00:00 ps
2.2)、系统资源的观察
free :观察内存使用情况
uname:查阅系统与核心相关信息
dmesg :分析核心产生的讯息,后面加“|more”可使画面暂停
fuser:通过这个 fuser 我们可以找出使用该文件、目录的程序,借以观察的啦! 他的重点与 ps, pstree 不同。fuser 可以让我们了解到某个文件 (或文件系统) 目前正在被哪些程序所利用。
lsof :列出被程序所打开的文件文件名。
pidof :找出某支正在执行的程序的 PID。
3.1)、SELinux
SELinux是“ Security Enhanced Linux”缩写,字面上的意义就是安全强化的 Linux。
其实 SELinux 是在进行程序、文件等细部权限设置依据的一个核心模块! 由于启动网络服务的也是程序,因此刚好也能够控制网络服务能否存取系统资源的一道关卡!
DAC:“自主式存取控制 (Discretionary Access Control, DAC)”,,就是依据程序的拥有者与文件资源的 rwx 权限来决定有无存取的能力。
MAC:“委任式存取控制”(Mandatory Access Control)针对特定的程序与特定的文件资源来进行权限的控管,即使你是 root ,那么在使用不同的程序时,你所能取得的权限并不一定是 root , 而得要看当时该程序的设置而定。
使用 DAC/MAC 产生的不同结果,以 Apache 为例说明
3.2)、SELinux的运行模式
SELinux 是通过 MAC 的方式来控管程序,他控制的主体是程序, 而目标则是该程序能否读取的“文件资源”!
主体 (Subject):process
目标 (Object):是文件系统
政策 (Policy):三条
targeted:针对网络服务限制较多,针对本机限制较少,是默认的政策;
minimum:由 target 修订而来,仅针对选择的程序来保护!
mls:完整的 SELinux 限制,限制方面较为严
安全性本文 (security context):,安全性本文主要用冒号分为三个字段
Identify:role:type
身份识别:角色:类型
l 三种模式
enforcing:强制模式,代表 SELinux 运行中,且已经正确的开始限制 domain/type 了;
permissive:宽容模式:代表 SELinux 运行中,不过仅会有警告讯息并不会实际限制 domain/type 的存取。这种模式可以运来作为SELinux 的 debug 之用;
disabled:关闭,SELinux 并没有实际运行。
SELinux 的三种类型与实际运行流程图示意
【重点回顾】
① 程序 (program):通常为 binary program ,放置在储存媒体中 (如硬盘、光盘、软盘、磁带等),为实体文件的型态存在;
② 进程 (process):程序被触发后,执行者的权限与属性、程序的程序码与所需数据等都会被载入内存中, 操作系统并给予这个内存内的单元一个识别码 (PID),可以说,程序就是一个正在运行中的程序。
③ 程序彼此之间是有相关性的,故有父程序与子程序之分。而 Linux 系统所有程序的父程序就是 init 这个 PID 为 1 号的程序。
④ 在 Linux 的程序调用通常称为 fork-and-exec 的流程!程序都会借由父程序以复制 (fork) 的方式产生一个一模一样的子程序, 然后被复制出来的子程序再以 exec 的方式来执行实际要进行的程序,最终就成为一个子程序的存在。
⑤ 常驻在内存当中的程序通常都是负责一些系统所提供的功能以服务使用者各项任务,因此这些常驻程序就会被我们称为:服务(daemon)。
⑥ 在工作管理 (job control) 中,可以出现提示字符让你操作的环境就称为前景 (foreground),至于其他工作就可以让你放入背景(background) 去暂停或运行。
⑦ 与 job control 有关的按键与关键字有: &, [ctrl]-z, jobs, fg, bg, kill %n 等;
⑧ 程序管理的观察指令有: ps, top, pstree 等等;
⑨ 程序之间是可以互相控制的,传递的讯息 (signal) 主要通过 kill 这个指令在处理;
⑩ 程序是有优先顺序的,该项目为 Priority,但 PRI 是核心动态调整的,使用者只能使用 nice 值去微调 PRI;
⑪ nice 的给予可以有: nice, renice, top 等指令;
⑫ vmstat 为相当好用的系统资源使用情况观察指令;
⑬ SELinux 当初的设计是为了避免使用者资源的误用,而 SELinux 使用的是 MAC 委任式存取设置;
⑭ SELinux 的运行中,重点在于主体程序 (Subject) 能否存取目标文件资源 (Object) ,这中间牵涉到政策 (Policy) 内的规则, 以及实际的安全性本文类别 (type);
⑮ 安全性本文的一般设置为:“Identify:role:type”其中又以 type 最重要;
⑯ SELinux 的模式有: enforcing, permissive, disabled 三种,而启动的政策 (Policy) 主要是 targeted;
⑰ SELinux 启动与关闭的配置文件在: /etc/selinux/config
⑱ SELinux 的启动与观察: getenforce, sestatus 等指令
⑲ 重设 SELinux 的安全性本文可使用 restorecon 与 chcon
⑳ 在 SELinux 有启动时,必备的服务至少要启动 auditd 这个!
21 若要管理默认的 SELinux 布林值,可使用 getsebool, setsebool 来管理!
Over......
鸟哥的linux私房菜——第十六章学习(程序管理与 SELinux 初探)的更多相关文章
- 鸟哥的linux私房菜——第十二章学习(Shell Scripts)
第十二章 Shell Scripts 1.0).什么是shell scripts? script 是"脚本.剧本"的意思.整句话是说, shell script 是针对 shel ...
- 鸟哥的Linux私房菜——第十六章:学习Shell Scripts
视频链接:http://www.bilibili.com/video/av10565321/ 1. 什么是 Shell Script (shell写的脚本)1.1 干嘛学习 shell s ...
- 鸟哥的Linux私房菜笔记第六章(二)
文件内容查询 直接查询文件内容 查阅一个文件的内容可以使用指令cat/tac/nl. # [cat|tac|nl] 文件 区别: 1.cat是直接把文件内容输出到屏幕上,并且从第一行开始输出到末行 2 ...
- 鸟哥的Linux私房菜——第十九章:例行命令的建立
视频链接:http://www.bilibili.com/video/av11008859/ 1. 什么是例行性命令 (分为两种,一种是周期性的,一种是突发性的)1.1 Linux 工作排程的种类: ...
- 鸟哥的Linux私房菜——第十四章:Bash Shell
视频链接:http://www.bilibili.com/video/av10094012/ 本章目录: 1. Bash shell1.1 什么是 shell ? (我们通过shell与Kernel核 ...
- 鸟哥的Linux私房菜——第十二章:档案的压缩与打包
视频链接: 土豆:http://www.tudou.com/programs/view/GncwT0FJKsQ B站(推荐):http://www.bilibili.com/video/av98857 ...
- 鸟哥的Linux私房菜——第十五章:正规表示法
视频链接 B站:http://www.bilibili.com/video/av10364761/ 目录如下 1. 前言:2. 基础正规表示法:2.1 以 grep 撷取字符串 (grep -iv ...
- 鸟哥的Linux私房菜笔记第六章(一)
目录与路径 相对路径与绝对路径 上一章简单的提到绝对路径和相对路径 绝对路径:路径的写法一定是由根目录(/)写起的,例如:/home/user 这个目录 相对路径:路径的写法不是由根目录(/)写起,例 ...
- 鸟哥的Linux私房菜笔记第四章
前言 对着<鸟哥的Linux私房菜-基础版>做了简化笔记.不想让自己知其然而不知其所然.所以写个博客让自己好好巩固一下,当然不可能把书中的内容全部写下来.在这里就简化一点把命令写下来. 让 ...
随机推荐
- postgresql插件安装
postgresql安装包自带插件安装: 1.编译安装插件 # root用户 # postgresql安装过程省略 # 进入解压包的contrib目录 cd postgresql-10.6/contr ...
- linux多路径(multipath)
https://www.itread01.com/articles/1475909423.html
- 7行代码解决P1441砝码称重(附优化过程)
先贴上最终代码感受一下: #include <bits/stdc++.h> using namespace std; int i, N, M, wi[21], res = 0; int m ...
- JAVA中@Override的含义
@Override是伪代码,表示重写(当然不写也可以),不过写上有如下好处: 1.可以当注释用,方便阅读: 2.编译器可以给你验证@Override下面的方法名是否是你父类中所有的,如果没有则报错.例 ...
- 小程序map学习:使用map获取当前位置并显示出来
在小程序开发的过程中,我碰到过一个做map的需求,在我开发的时候我碰到了一些问题,这里总结出来,给大家一些解决方法. 简易小程序dome下载 代码片段分享: js部分: var amapFile = ...
- GlusterFS数据存储脑裂修复方案最全解析
本文档介绍了glusterfs中可用于监视复制卷状态的heal info命令以及解决脑裂的方法 一. 概念解析 常见术语 名称 解释 Brick GlusterFS 的基本存储单元,由可信存储池中服务 ...
- MySQL设计之Schema与数据类型优化
一.数据类型优化 1.更小通常更好 应该尽量使用可以正确存储数据的最小数据类型,更小的数据类型通常更快,因为它们占用更少的磁盘.内存和CPU缓存,并且处理时需要的CPU周期更少,但是要确保没有低估需要 ...
- Pulsar Pub/Sub Messaging
The Apache Software Foundation Announces Apache Pulsar as a Top-Level Project : The Apache Software ...
- Defining Go Modules
research!rsc: Go & Versioning https://research.swtch.com/vgo shawn@a:~/gokit/tmp$ go get --helpu ...
- noip 注意事项 (个人向)
目录 非常重要 对拍 空间 极限数据 模数,YES/NO等大小写 个人 考场 神仙 czdzx 说要写,我也来写 非常重要 对拍 空间 极限数据 模数,YES/NO等大小写 个人 养身体,不要紧张,不 ...