IT序号网

Linux基础学习5知识解答

developer 2021年06月13日 程序员 150 0
程序管理与SELinux初探

process&program
 程序 (program):通常为 binary program ,放置在储存媒体中 (如硬盘、光盘、软盘、磁带等), 为实体档案的型态存在;
 进程 (process): 程序被系统执行时,执行者的权限与属性、程序代码与所需数据等都会被加载内存中, 操作系统并给予这个内存内的单元一个标识符 (PID),可以说,进程就是一个正在运作中的程序。
 
子进程与父进程
子进程可以取得父进程的环境变量
ps -l 
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 
4 S 0 8074 8072 2 76 0 - 1287 wait pts/1 00:00:00 bash 
0 S 0 8102 8074 4 76 0 - 1287 wait pts/1 00:00:00 bash 
4 R 0 8118 8102 0 78 0 - 1101 - pts/1 00:00:00 ps
PPID : parent pid ;
 
 
fork-and-exec
进程都会由父进程以复制 (fork) 的方式产生一个一模一样的子进程, 然后被复制出来的子程序再以 exec 的方式来执行实际要进行的程序,最终就成为一个子进程。
 
job control
用在 bash 环境下,也就是说: 当我们登入系统取得 bash shell 后,在单一终端机接口下同时进行多个工作的行为管理;
举例来说,我们在登入 bash 后, 想要一边复制档案、一边进行资料搜寻、一边进行编译,还可以一边进行 vi 程序编写! 当然我们可以重复登入
那六个文字接口的终端机环境中,不过,能不能在一个 bash 内达成? 当然可以啊!就是使用 job control 啦
 
job control 使用注意点:
 这些工作所觉发的程序必项来自与你 shell 的子程序(即管理自己的 bash);
 前景:你可以控制不下达指令的这个环境称为前景的工作 (foreground);
 背景:可以自行运作的工作,你无法使用 [ctrl]+c 终止他,可使用 bg/fg 呼叫该工作;
 背景中『执行』的程序不能等待 terminal/shell 的输入(input)
 
&
直接将指令丢到背景中执行
[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 执行数据流, 
# 由与我们没有加上数据流重导向,所以会影响画面!不过不会影响前景的操作
当然指令有stdout 及stderr时,他的数据依旧是输出到屏幕上面的,这样虽然前景可以工作,但是被这些输出搞的乱乱的 也没有办法工作了,所以最好的办法就是使用数据流重定向;
[root@www ~]# tar -zpcvf /tmp/etc.tar.gz /etc > /tmp/log.txt 2>&1 & 
[1] 8429 
[root@www ~]#
[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
jobs
观察目前的背景工作状态
[root@www ~]# jobs [-lrs]
选项与参数:
-l :除了列出 job number 与指令串之外,同时列出 PID 的号码;
-r :仅列出正在背景 run 的工作;
-s :仅列出正在背景当中暂停 (stop) 的工作。
范例一:观察目前的 bash 当中,所有的工作,与对应的PID 
[root@www ~]# jobs -l 
[1]- 10314 Stopped vim ~/.bashrc 
[2]+ 10833 Stopped find / -print
 + 代表预设的取用工作。 所以说:『 目前我有两个工作在背景当中,两个工作都是暂停的, 而如果我仅输入 fg 时,那举那个 [2] 会被拿到前景当中来处理』其实 + 代表最近被放到背景的工作号码, - 代表最近第二个被放置到背景中的工作号码
 
 
fg
将背景工作拿到前景来处理
[root@www ~]# fg %jobnumber
选项与参数:
%jobnumber :jobnumber 为工作号码(数字)。注意,那个 % 是可有可无的!
范例一:先以 jobs 观察工作,再将工作取出: 
[root@www ~]# jobs 
[1]- 10314 Stopped vim ~/.bashrc 
[2]+ 10833 Stopped find / -print 
[root@www ~]# fg <==预设取出那个 + 的工作,即 [2]。立即按下[ctrl]-z 
[root@www ~]# fg %1 <==直接规定取出的那个工作号码!再按下[ctrl]-z 
[root@www ~]# jobs 
[1]+ Stopped vim ~/.bashrc 
[2]- Stopped find / -print

看到区别了吗,现在+号对应的就是此刻最新放入背景当中的工作噢;

bg
让工作在背景下的状态变成运作中(running)
范例一:一执行 find / -perm +7000 > /tmp/text.txt 后,立刻丢到背景去暂停! 
[root@www ~]# find / -perm +7000 > /tmp/text.txt 
# 此时,请立刻按下 [ctrl]-z 暂停! 
[3]+ Stopped find / -perm +7000 > /tmp/text.txt 
范例二:让该工作在背景下进行,并且观察他!! 
[root@www ~]# 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 & <==用 bg%3 的情况! 
[1]+ Stopped vim ~/.bashrc 
[2] Stopped find / -print 
[3]- Running find / -perm +7000 > /tmp/text.txt &
 
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 是不一样的。
 
kill 后面接的数字默认会是 PID ,如果想要管理 bash 的工作控制,就得要加上 %数字 了, 这点与前面不必要加%不一样,因此还是推荐在使用job control 是使用% 养成良好习惯;
 
nohup
在脱机或注销系统之后,还能继续工作;
[root@www ~]# nohup [指令与参数] <==在终端机前景中工作
[root@www ~]# nohup [指令与参数] & <==在终端机背景中工作
例子: 
# 1. 先编辑一支会『 睡着 500 秒』的程序: 
[root@www ~]# vim sleep500.sh 
#!/bin/bash 
/bin/sleep 500s 
/bin/echo "I have slept 500 seconds." 
# 2. 丢到背景中去执行,并立刻注销系统: 
[root@www ~]# chmod a+x sleep500.sh 
[root@www ~]# nohup ./sleep500.sh & 
[1] 5074 
[root@www ~]# nohup: appending output to ‘nohup.out’ <==会告知这个讯息! 
[root@www ~]# exit
程序观察:
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 :做一个更为完整的输出。
 
一般两种常用:ps -l  查阅自己bash 程序的 
                         ps aux  查询系统所有运行的程序
 
[root@www ~]# ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 13639 13637 0 75 0 - 1287 wait pts/1 00:00:00 bash
4 R 0 13700 13639 0 77 0 - 1101 - pts/1 00:00:00 ps
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 所执行的优先级,数值越小代表该程序越先 执行。
ADDR/SZ/WCHAN:都与内存有关,ADDR 是 kernel function,指出该程序在内存的哪个部分,如果是个 running 的程序,一般就会显示『- 』 / SZ 代表此程序用掉多少内存 / WCHAN表示目前程序是否运作中,同样的, 若为 - 表示正在运作中。
TTY:登入者的终端机位置,若为进程登录则使用动态终端接口 (pts/n);
TIME:使用掉的 CPU 时间,注意,是此程序实际花费 CPU 运作的时间,而不是系统时间;
CMD:就是 command 的缩写,造成此程序运行的指令为何。
 
注意:状态中:Z(Zombie):僵尸状态,需要注意一下,因为此时程序已经终止但却无法被移除到内存外了;
 
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 软件的按键。
 
nice与priority有关,也是越小越早被执行
 
pstree
[root@www ~]# pstree [-A|U] [-up]
选项与参数:
-A :各程序树之间的连接以 ASCII 字符来连接;
-U :各程序树之间的连接以万国码的字符来连接。在某些终端接口下可能会有错误;
-p :并同时列出每个 process 的 PID;
-u :并同时列出每个 process 的所属账号名称。
 
signal
常见型号:
代号   名称                                  内容
1       SIGHUP      启动被终止的程序,重新读取配置文件,类似重启
2       SIGINT       类似 [ctrl]-c 来中断一个程序的进行
9       SIGKILL      强制中断程序的进行,如果该程序进行到一半, 那么尚未完成的                       部分可能会有『半产品』产生,类似 vim 会有 .filename.swp 保留下来。
15     SIGTERM    以正常的结束程序来终止该程序。不过,如果该程序已经发生问题,就是无法使用正常的终止时, 输入这个 signal 也是没有用的。
17     SIGSTOP      相当于用键盘输入 [ctrl]-z 来暂停一个程序的进行
 
信号传递:
kill -signal PID
 
killall 
直接给某个程序一个signal
[root@www ~]# killall [-iIe] [command name]
选项与参数:
-i :interactive 的意思,交互式的,若需要删除时,会出现提示字符给用户;
-e :exact 的意忠,表示『后面接的 command name 要一致』,但整个完整的指令不能超过 15 个字符。
-I :指令名称(可能含参数)忽略大小写。
 
PRI
值越小CPU执行的优先级越高
PRI=PRI+nice     动态调整
 
nice
nice 值可调整的范围为 -20 ~ 19 ;
root 可随意调整自己或他人程序的Nice 值,且范围为 -20 ~ 19 ;
一般用户仅可调整自己程序的 Nice 值,且范围仅为 0 ~ 19 (避面一般用户抢占系统资源);
 
调整nice
 一开始执行程序就立即给予一个特定的 nice 值:用 nice 指令;
调整某个已经存在的 PID 的 nice 值:用 renice 指令。
 
[root@www ~]# nice [-n 数字] command 
选项与参数: 
-n :后面接一个数值,数值的范围 -20 ~ 19。 
[root@www ~]# renice [number] PID 
选项与参数: 
PID :某个程序的ID 啊!
系统资源的观察
free
观察内存使用情况
[root@www ~]# free [-b|-k|-m|-g] [-t]
选项与参数:
-b :直接输入 free 时,显示的单位是 Kbytes,我们可以使用 b(bytes),
m(Mbytey)k(Kbytes), 及 g(Gbytes) 来显示单位喔!
-t :在输出的最终结果,显示物理内存与 swap 的总量。
 
uname
查阅系统与核心相关信息
[root@www ~]# uname [-asrmpi]
选项与参数:
-a :所有系统相关的信息,包括底下的数据都会被列出来;
-s :系统核心名称
-r :核心的版本
-m :本系统的硬件名称,例如 i686 戒 x86_64 等;
-p :CPU 的类型,与 -m 类似,只是显示的是 CPU 的类型!
-i :硬件癿平台 (ix86)
 
uptime
观察系统启动时间与工作负载
 
netstat
网络监控
[root@www ~]# netstat -[atunlp]
选项与参数:
-a :将目前系统上所有的联机、监听、 Socket 数据都列出来
-t :列出 tcp 网络封包的数据
-u :列出 udp 网络封包的数据
-n :不已程序的服务名称,以串口号 (port number) 来显示;
-l :列出目前正在网络监听 (listen) 的服务;
-p :列出该网络服务的程序 PID
 
dmesg
系统在开机的时候,核心会去侦测系统的硬件,你的某些硬件到底有没有被捉到,那就不这个时候的侦测有关。 但是这些侦测的过程要不是没有显示在屏幕上,就是飞快的在屏幕上一闪而逝!能不能把核心侦测的讯息捉出来瞧瞧? 可以的,那就使用 dmesg 吧!
 
vmstat
侦测系统资源变化
 
 
SELinux( security enhance Linux)
其实 SELinux 是在进行程序、档案等权限设定的依据核心模块
 
自主式访问控制 (Discretionary Access Control, DAC)基本上就是依据程序拥有者与档案资源的rwx权限来决定由无存取能力,那么困扰来了:
1.root 具有最高的权限:如果不小心某支程序被有心人士取得, 且该程序属于 root 的权限,那么这支程序就可以在系统上进行任何资源的存取!
2.如果你不小心将某个目录的权限色定为 777 ,由与对任何人的权限会变成 rwx ,因此该目录就会被任何人所任意存取!
 
委任式访问控制 (Mandatory Access Control, MAC)
以政策规则订定特定程序度取特定档案
 
SELinux的运作模式:
SELinux 是透过 MAC 的方式来控管程序,他控制的主体是程序, 而目标是该程序能否度取的『档案资源』
 
主体 (Subject)
目标 (Object)
政策 (Policy):
o targeted:针对网络服务限制较多,针对本机限制较少,是预设的政策;
o strict:完整的 SELinux 限制,限制方面较为严格。
安全性本文 (security context):
主体能不能存取目标除了政策指定之外,主体与目标的安全性本文必项一致才能够顺利存取
 
程序的安全性文本可以直接写入,而文档的安全性文本在档案的inode内;
ls -Z 
[root@www ~]# ls -Z  #查看安全性文本
drwxr-xr-x root root root:object_r:user_home_t  Desktop
-rw-r--r-- root root root:object_r:user_home_t   install.log
-rw-r--r-- root root root:object_r:user_home_t   install.log.syslog
# 上述特殊字体的部分,就是安全性本文的内容!
文本三个字段的意义为:
Identify:role:type
身份识别:角色:类型
身份识别 (Identify):
相当于账号方面的身份识别!主要的身份识别则有底下三种常见的类型:
root:表示 root 的 账号身份,如同上面的表格显示的是 root 家目录下的数据啊!
system_u:表示系统程序方面的识别,通常就是程序啰;
user_u:代表的是一般使用者账号相关的身份。
 
角色 (Role):
透过角色字段,我们可以知道这个数据是属与程序、档案资源还是代表使用者。一般的角色有:
object_r:代表的是档案或目录等档案资源,这应该是最常见的;
system_r:代表的就是程序啦!不过,一般使用者也会被指定成为 system_r 
 
类型 (Type) :(最重要!)
在预设的targeted 政策中, Identify 与 Role 字段基本上是不重要的!重要的在与这个类型(type) 字段! 基本上,一个主体程序能不能读取到这个档案资源,与类型字段有关!而类型字段在档案与程序的定义不太相同,分别是:
o type:在档案资源 (Object) 上面称为类型 (Type);
o domain:在主体程序 (Subject) 则称为领域 (domain) ,domain 需要与type 搭配,则该程序才能够顺利的读取档案资源啦!
 
domain与type如何搭配用以下例子:httpd程序与/var/www/html目录来说明
 
[root@www ~]# ll -Zd /usr/sbin/httpd /var/www/html 
-rwxr-xr-x  root  root    system_u:object_r:httpd_exec_t              /usr/sbin/httpd 
drwxr-xr-x  root  root   system_u:object_r:httpd_sys_content_t   /var/www/html 
# 两者的角色字段都是 object_r ,代表都是档案!而 httpd 属于 httpd_exec_t类型, 
# /var/www/html 则属于 httpd_sys_content_t 这个类型!
在targeted这个规则中,httpd_sys_content_t 这个(type)类型,是可以被httpd_exec_t这个(domain)类型读取的,因此httpd可以读取 /vat/www/html
当然最终能不能读到正确的资料还要看rwx是否符合Linux权限的规范;
 
政策内需要制订详细的domain/type 相关性;若档案的type 设定错误, 那么即使权限设定为 rwx 全开的 777 ,该主体程序也无法读取目标档案资源;
 
 
SELinux 的启动、关闭与观察
三种模式:
enforcing:强制模式,代表 SELinux 运作中,且已经正确的开始限制 domain/type 
permissive:宽容模式:代表 SELinux 运作中,不过仅会有警告讯息并不会实际限制domain/type 的存取。这种模式可以运来作为 SELinux 的 debug 之用;
disabled:关闭,SELinux 并没有实际运作。
 
getenforce
获取SELinux的模式
[root@www ~]# getenforce
Enforcing <==就显示出目前的模式为 Enforcing !
 
sestatus
获取SELinux政策
[root@www ~]# sestatus [-vb]
选项与参数:
-v :检查列于 /etc/sestatus.conf 内的档案与程序的安全性本文内容;
-b :将目前政策的规则布尔值列出,亦即某些规则 (rule) 是否要启动 (0/1) 
  
/etc/selinux/config
SELinux配置文件
[root@www ~]# vi /etc/selinux/config
SELINUX=enforcing <==调整 enforcing|disabled|permissive
SELINUXTYPE=targeted <==目前仅有 targeted 与 strict
 
让/etc/selinux/config失效
在核心启动过程中忽略seLinux
/boot/grub/menu.lst
增加 selinux=0 让核心自动忽略/etc/selinux/config的设定
 
setenforce
模式切换
[root@www ~]# setenforce [0|1]
选项于参数:
0 :转成 permissive 宽容模式
1 :转成 Enforcing 强制模式
 
 
网络服务的启动与观察
一般服务启动的脚本会在/etc/init.d底下
 
# 1. 先启动这个网络服务吧! 
[root@www ~]# /etc/init.d/httpd start 
正在激活 httpd: [ 确定 ] 
# 2. 观察有无此程序,并且观察此程序的SELinux 安全性本文数据 
[root@www ~]# pstree | grep httpd 
|-httpd---8*[httpd] <==httpd 会产生多子程序来负责网络服务 
# 3. 观察此程序的SELinux 安全性本文数据 
[root@www ~]# ps aux -Z | grep http 
root:system_r:httpd_t root 24089 0.2 1.2 22896 9256 ? Ss 16:06 0:00 /usr/sbin/httpd 
root:system_r:httpd_t apache 24092 0.0 0.6 22896 4752 ? S 16:06 0:00 /usr/sbin/httpd 
root:system_r:httpd_t apache 24093 0.0 0.6 22896 4752 ? S 16:06 0:00 /usr/sbin/httpd
chcon
重设 SELinux 安全性文本
[root@www ~]# chcon [-R] [-t type] [-u user] [-r role] 档案
[root@www ~]# chcon [-R] --reference=范例文件 档案
选项与参数:
-R :连同该目录下的次目录也同时修改;
-t :后面接安全性文本的类型字段!例如 httpd_sys_content_t ;
-u :后面接身份识别,例如 system_u;
-r :后面接角色,例如 system_r;
--reference=范例文件:拿某个档案当范例来修改后续接的档案的类型!
 
restorecon
还原到预设的安全性文本
[root@www ~]# restorecon [-Rv] 档案或目录
选项与参数:
-R :连同次目录一起修改;
-v :将过程显示到屏幕上
 
seinfo
政策整体查阅
 
sesearch
查询详细规则
 
semanage
默认目录的安全性文本的查询与修改
 
 
总结
  • fork-and-exec
    • 进程都会由父进程以复制(fork),之后再以exec的方式来执行
  • job control
    • 管理自己的bash
    • 前景
      • 控制与下达指令的这个环境
    • 背景
      • 可以自信运行的工作,无法ctrl+c终止,可以使用bg/fg呼叫该工作
      • 背景中执行的程序不能等待terminal/shel的输出(input)
    • 前景与背景切换
      • &: 直接将指令丢到背景中执行
        • tar -zcvf  /tmp/etc.tar.gz /etc &
      • ctrl+z:将目前的工作丢到背景中 并 暂停
    • jobs: 观察目前的背景工作状态
      • jobs [-lrs]
      • fg %jobnumber  ,将背景工作拿到前景来处理
      • bg %jobnumber ,让工作在背景下的状态变成运行中
      • kill -signal  %jobnumber
  • nohup
    • 在脱机或注销系统之后,还能继续工作
    • nohup [指令与参数]
  • ps
    • ps -l          查阅自己bash程序
    • ps -aux     查询系统所有运行的程序
    • 状态字段
      • F,程序旗标,常见4,程序权限为root
      • S,运行状态,
        • R(running),S(sleep),T(stop)
        • Z(Zombie) 僵尸状态,程序以及终止,但无法移除到内存外
      • UID,PID,PPID
      • C,cpu使用率
      • PRI/NI:Priority/nice,程序优先级, 数值越小优先级越高。
      • addr/sz/wchan:都与内存相关
      • TTY:登录中端
      • TIME:使用掉的CPU时间
      • CMD:
    • pstree :以树状结构来显示
  • top
    • top -p 指定某个PID来进行监测。
    • 在top执行过程中使用按键指令
      • P :以 CPU 的使用资源排序显示;
      • M :以 Memory 的使用资源排序显示;
      • N :以 PID 来排序喔!
      • T:由该 Process 使用的CPU 时间累积 (TIME+) 排序。
      • k :给予某个 PID 一个讯号 (signal)
      • r :给予某个 PID 重新制订一个 nice 值
  • signal
    • 1 SIGHUP,类似重启,重新读取配置文件,
    • 2 SIGINT,类似ctrl+c,中断一个程序的进行
    • 9 SIGKILL, 强中中断
    • 15 SIGTERM,正常终止。
    • 17 SIGSTOP,类似ctrl+z 暂停程序
    • kill  -signal PID
  • PRI
    • 越小CPU执行优先级越高
    • PRI=PRI+nice     动态调整
      • nice 范围-20---19
        • root可以随意调整自己或他人程序的nice值,且范围-20--19
        • 普通用户仅可以调整自己的nice值,且范围0--19
        • 也就是说普通用户只能降低自己的优先级,不能提高 
      • nice ,renice
  • free,内存观察
    • free [-b|-k|-m|-g] [-t]
  • netstat
    • -a(all),-t(tcp),-u(udp),-l(listen),-p(pid)
  • selinux
    • 使用场景
      • 黑客拿到web server 这个程序的控制权,而这个程序有root权限。黑客可以用这个root权限的程序控制整个系统。
      • 而selinux则是让你拿到这个用户root权限的程序也不能对整个系统为所欲为,拿到这个web server 只能在规定的目录干事情。其他目录依然没有权限。 
    • 运作模式
      • 透过MAC的方式来管控程序,他控制的【主体】是程序,而目标是该程序能否读取的【档案资源】
      • 主体(subject),程序
      • 目标(object),档案资源
      • 政策(policy)
        • targeted:对网络限制多,对本机限制少,是默认政策
        • strict:完整的限制
        • 政策内需要制定详细的domian/type相关性;若档案的type设定错误,那么即使权限设为777,该主体程序也无法读取目标资源。
      • 安全性文本(security context)
        • 主体能不能存取目标除了政策之外,主体与目标的安全性文本必须一致,才能顺利存取。
        • 简单理解
          • 能不能存取还得要看两者的安全性文本是否匹配。而安全性文本中,就是看主体的domain与目标的type是否搭配。而这种搭配是在政策中规定好的。最终主体能不能拿到目标还要看,目标的rwx是否服务Linux权限的规范。
        • 查看
          • ls -Z
        • 文本三字段意义
          • identify:role:type
          • 主要身份识别:
            • root:root 账号身份
            • system_u:系统程序方面的识别,通常就是程序
            • user_u:普通用户账号
          • 角色
            • object_r:代表档案或目录等档案资源,最常见
            • system_r:代表的就是程序。一般使用者也指定为system_r
          • 类型(最重要)
            • 在默认targeted政策中,identify与role基本没用。主体能不能取得目标,重点是这个类型字段。
            • 而主体与目标的关于这个类型字段定义不同分别是:
              • type:目标object中,称类型(type)
              • domain:主体subject中,称领域(domain)
              • domian与type搭配,主体才能顺序拿到目标。
    • selinux的启动,关闭与观察
      • 三种模式
        • enforcing:强中模式。开启限制。
        • permissive:宽容模式:只发警告信息,并不限制。
        • disable:关闭
      • getenforce,获取模式
      • setenforce,模式切换
      • sestatus,获取政策
      • /etc/selinux/config selinux配置文件
    • selinux安全性文本操作
      • chcon [-R] [-t type] [-u user] [-r role] 档案
      • chcon [-R] --reference=范例文件  档案
      • 还原到预设的安全性文本
        • restorecon [-Rv] 档案或目录
    • 政策观察
      • seinfo,政策整体查阅
      • sesearch,查询详细规则
 
 

发布评论
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

Linux基础学习4知识解答
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。