Linux之进程管理--特殊进程与SELinux初识

上一篇文章中讲述了常见进程管理的命令,今天主要给大家讲一讲特殊的进程以及SELinux,关于SELiunux今天只是初步学习,不会深讲,有兴趣的就等一等,后面我会详细讲解。
一、特殊文件与进程
这里就要提到文件的特殊权限了,其实在前面的文章中已经讲过了文件的权限的知识,就是rwx这三个权限,但是还有其他特殊的权限比如s 或 t。进而就说到了SUID和SGID、SBIT。因为前面没有细讲,所以这里还是需要说一说的,不然就无法了解清楚这些权限是如何影响进程的。
首先咱们先看看这些特殊s和t权限会在哪里看到,举个例子吧,带大家看两个文件
在这里插入图片描述
从上面的图里面可以看到,第一个文件里面的权限部分竟然多出了一个并不常见的“t”,第二个文件里面竟然多出了个“s”,有没有觉得很意外?所以我接下来会给大家解释其存在意义。
1)SUID:以passwd文件为例,它的拥有者权限处的x被一个s替代,这个时候就可以称之为SUID的特殊权限,注意SUID要用于文件而不是目录。但是大家肯定会好奇这个SUID有什么作用呢?这里我就不长篇大论了,说的太高深也不好理解,我举个简单的例子大家就明白了。从上图中可以看到passwd的属主与属组都是root,那么也就说明只有root用户才可以进行密码的更改,但是实际的应用中大家自己的用户都是可以修改自己的密码的,这里岂不是产生了悖论???所以这就是passwd中SUID权限的存在意义。做一个简单的总结:
1)我自己的用户gao对/usr/bin/passwd这个文件是具有执行权限的
2)这个文件的拥有者是root
3)gao这个用户执执行passwd的时候会暂时获得root用户的权限
4)/etc/shadow这个文件就可以被gao所执行的passwd所修改。
这个时候你可能就明白了为什么用cat 查看/etc/shadow时是不能读取的,因为/bin/cat没有像/usr/bin/passwd一样的SUID特殊权限
Linux之进程管理--特殊进程与SELinux初识_第1张图片
2)SGID:搞明白了上面的SUID,那么这个SGID也就不难理解了,无非就是把用户组部分的x权限替换为是,也就产生了SGID特殊权限,不过不同的是SGID可以针对文件和目录来设定
在这里插入图片描述
与SUID类似,当我用gao这个用户去执行locate的时候,就会获得slocate群组的支持,自然也就能够去读取mlocate.db这个文件了,是不是很牛。
3)SBIT:这个目前只是针对目录有效,它的作用就是使目录的建立者和root具有删除的权限,但是其他的用户仅仅具有写入的权限,无法删除,我们看个具体的例子:
Linux之进程管理--特殊进程与SELinux初识_第2张图片
Linux之进程管理--特殊进程与SELinux初识_第3张图片
在第二幅图中可以看到,用户gao可以对root用户创建的文件test进行编辑却无法删除,这就是这个SBIT的功能。
4)特殊权限设定: SUID/SGID/SBIT的权限设定
关于这个权限设定,其实和之前的权限设定没什么区别,之前的rwx三个权限分别用数字421表示,现在所讲的SUID/SGID/SBIT三者的权限也是分别用421来代替。比如此时有一个文件的权限是[-rwxr-xr-x],那么用数字来表示就是755,如果此时我想设置这个文件的SUID,将此时的文件权限改为[-rwsr-xr-x],那么使用命令如下【chmod 4755 文件名】,只需在原来的基础上加上4即可
在这里插入图片描述
如果是设置SGID,自然就是修改为2755了,如下
在这里插入图片描述
这里要特殊讲一讲S和T,注意这里是大写的S和T
Linux之进程管理--特殊进程与SELinux初识_第4张图片
当我将权限设置为7666的时候,就会出现这种含有S和T的情况,其实这种情况很好理解,因为后面是666,也就是说文件的拥有者,属组都没有执行权限了,那么其他人怎么还会有执行权限呢,毕竟SUID就是要暂时获得拥有者的权限,所以连拥有者都没有了权限,SUID的功能又如何实现???因此这个大写的S和T就代表着具有空的SUID和SGID权限
二、SELinux
2.1什么是SELinux
SELinux是Security Enhanced Linux的缩写,按照字面的意思就是安全强化的Linux,那么到底是强化了哪个部分的安全呢?是资源还是权限?我来讲一下。
简单的说一下它的妙用,之前我们的linux系统是默认使用的自主式访问控制,基本上就是依据进程的拥有者文件的rwx权限来决定有无存取的能力,但是我们也都知道这些权限设定对于用户root是无效的,比如被某些无良用户不小心获得了你的进程,而恰恰这个进程又具有root的权限,那么这只进程就可以在系统上进行任何资源的存取,这是不是很要命,所以SELinux就导入了委任式访问控制(MAC).
这个MAC最大的优点就是它可以针对特定的进程与特定的文件资源进行权限的管控,说的明白一点就是即便你是root用户,但是你在使用不同的进程时获得的权限也不一定是root,这样也就可以避免了刚才所说的问题,我们针对控制的主题就由用户变成了进程,同时这个主体进程也不能任意的使用系统的文件资源,因为文件资源也有相对该主体进程设定的可取用权限。如此看来是不是就很精细了,几乎细化到了你能想到的尽可能小的地方。但是也会有一些问题,因此这个功能可以限制的很细,但是越细也就越意味着你要设置的项目越多,所以SELinux也提供了一些预设的政策,并且在该政策内提供了多个规则(rule),让我们可以选择是否启用该控制规则。
举个例子,以Apache的WWW网络服务使用DAC或MAC的结果来说
Linux之进程管理--特殊进程与SELinux初识_第5张图片
左图是没有使用SELinux的DAC存取结果,apache这只root主导的进程可以在这三个目录内作任何文件 增删改查,但是在右边加上SELinux的MAC管理的结果就是,SELinux会针对Apache这个[process]放行部分的目录,其他的目录就不会放行给 Apache使用。
它的流程就是下面这个样子
Linux之进程管理--特殊进程与SELinux初识_第6张图片
上图中体现出的重点有三个:1)主体进程必须要通过SELinux政策内的规则放行后才可以与目标资源进行安全性本文的对比 2)若对比失败则无法存取目标,成功才可以进行存取。
这里提到了安全性本文,听起来比较复杂,其实你可以换个思路理解。我们平时也会对文件的rwx进行设定,所以你就可以将这个安全性本文想象成SELinux内必备的rwx就是了。这个安全性本文存在于主体进程与目标文件资源中,因为进程存在于内存中,所以安全性本文的存入是没有问题的,而文件的安全性本文就存在了文件的inode中,因此主体进程想要读取目标文件资源时同样需要读取inode,这个inode内就可以比对安全性本文以及rwx等权限值是否正确。
关于这个安全性本文如何查看要使用【ls -Z】
Linux之进程管理--特殊进程与SELinux初识_第7张图片
查出来的信息能明显的看到被三个冒号分开,这三个字段的意义是 身份识别:角色:类型
身份识别中常见的情况主要有两种分别是unconfined_u和system_u,前者指的是不受限的用户,就是说该文件来自于不受限的进程所产生的,后者是指系统自己产生的文件,简单的说如果是网络服务或是系统运作所产生的文件会被识别为ststem_u.
角色的含义是让我们可以知道这个文件是属于进程、文件资源还是代表使用者。其中object_r代表的是文件或目录等文件资源,这种是比较常见的;另一种就是system_r,代表的就是进程了,不过一般使用者也会被指定为system_r。
**类型(TYPE)**是最重要的,基本上一个主体进程能不能读取到这个文件资源,与类型字段有关,这里要注意,类型字段在文件与进程中的定义不太相同,分别是:
1)type:在文件资源(object)上称之为类型(type)
2)domain:在主体进程则称之为领域(domain)
二者需要搭配,则该进程才能够顺利的读取文件.
拓展: SELinux的三种模式
Linux之进程管理--特殊进程与SELinux初识_第8张图片
那么如何知道当前系统的SELinux的模式呢?用【getenforce】
在这里插入图片描述
用什么查看它的政策呢?用【sestatus】
Linux之进程管理--特殊进程与SELinux初识_第9张图片
那么如何实现模式之间的切换呢
让SELinux在enforcing与permissive之间切换的方法为
Linux之进程管理--特殊进程与SELinux初识_第10张图片
不过要注意,setenforce无法在Disabled模式下进行切换。
如果要从Disabled模式切换到其他模式,就需要如下操作:
在这里插入图片描述
今天关于SELinux的知识就讲到这里,如果有朋友想要了解关于规则的修改以及安全性本文的修改,在网上就可以查到。或者看一看《Linux鸟哥的私房菜第四版》的16章即可。

拓展:一、安全性本文的修改
Linux之进程管理--特殊进程与SELinux初识_第11张图片
Linux之进程管理--特殊进程与SELinux初识_第12张图片
Linux之进程管理--特殊进程与SELinux初识_第13张图片

二、政策内规则的管理
Linux之进程管理--特殊进程与SELinux初识_第14张图片

Linux之进程管理--特殊进程与SELinux初识_第15张图片
Linux之进程管理--特殊进程与SELinux初识_第16张图片

你可能感兴趣的:(服务器,Linux)