SELinux:Secure Ehanced Linux
它的作用就是将每个文件的权限更加细分,这样使用户访问的时候就像经过多道安检一样,只有全部通过才可以顺利的读取文件。
其实很多错误及安全问题都是人为造成的,使用SELinux可以防止这种现象产生。
SELinux的运作模式 MAC:委任式访问控制
主体:就相当于进程
目标:要访问的文件
政策:针对怎样的主体可以访问哪些目标,这就是政策所定义的东西;
政策主要有targeted和strict两种,第一种针对网络服务限制较多,第二种对本机及网络都有严格限制。
安全性本文:安全性本文有三个参数,分别是身份鉴定、角色以及类型,其中最重要的是类型这个参数。类型这个参数有type和domin两种,其中文档是type,程序是domin。安全性本文与文件系统中的每一个档案都相当于绑定在一起的,每一个文件都有安全性本文,它在文档的inode中。
简单来说在SELinux下我们来读取目标文件的主要步骤,由于政策是targeted,主要限制的是网络服务,所以就以www服务器(http协议)来演示:
在SELinux中规定www服务器的网页存放范围只能够在/var/www/html目录下,不允许存放到其它目录下,否则www服务器访问不到其它目录(没有权限)。
当我们在/var/www/html目录下写完一个脚本index.html后,用浏览器可以打开此网页文件。
当我们在自己的家目录下写完一个脚本index.html后,将这个文件复制到/var/www/html目录后(删除原来那个),再用浏览器可以打开此网页文件就会显示forbidden。
这种情况产生的原因主要是权限不符合,就是因为SELinux的原因。一旦我们打开了SELinux,它就会对我们整个文件系统里的每一个文件和目录加上另外一层的访问控制,也就是写入inode中的安全性本文数据。每当我们创建一个文件或者是目录的时候SELinux都会按照默认规定(下文会提到)给这个新创建的文件或目录一个安全性本文参数。所以说当我们在家目录和其他目录创建的同名文件即使内容和权限相同,但他们的安全性本文却是不同的。
接着介绍一下我们的主体程序是怎么一步步访问到目标的,用浏览器打开/var/www/html中的程序第一步是浏览器通过www服务器触发一个叫/usr/sbin/httpd的程序,然后程序运行起来在内存中生成一个进程httpd,这个进程会有一个安全性本文,而且他的类型参数会是domin,名字叫httpd_t,通过这个名为httpd_t的domin,系统就去文件中查找政策,发现这个domin可以访问安全性本文类别参数为type中的httpd_sys_content_t这样的文档,而我们在/var/www/html中建立的文档默认的安全性本文type都是httpd_sys_content_t这样的,所以可以访问。也就是说在调用任何一个程序时,会根据产生的进程的domin去查阅政策文件,可以知道可以访问的文档的type类型,接着才可以去进行最后一步——验证进程的属主究竟对文档有怎样的权限。
所以说我们在家目录下建立的文件的安全性本文中的type并不是httpd进程的domin可以匹配的,即使将文件mv过去也不会改变属性,所以httpd打不开那个index.html。
SELinux在启动时就会对每一个目录下新建的目录或文件给予怎样的安全性本文都有默认的参数,这个可以用命令查看和修改。
命令:
getenforce:查看SELinux的模式(enforcing、permissive、disable)
sestatus:查看SELinux模式以及政策 /etc/selinux/config文件可配置模式及政策。
setenforce [0|1]:修改模式
chcon [-R] [-t type] [-u user] [-r role] 档案 :重设安全性本文
restorecon [-Rv] 档案或目录:恢复默认的安全性本文
seinfo [-Atrub] :政策查阅,
sesearch :查阅更加详细的规则,
其实政策最底层的是规则,规则的意思就是哪个domin可以访问哪个type。然而这些
规则是由布尔值控制的,每一个布尔值都会控制几十个规则。所以说布尔值的on、off才是最底层的。
getsebool 布尔值查询