1.什么是Selinux,
selinux就是 Security Enhanced Linux 中文意思就是安全强化的Linux。
2.Selinux的目标。
在传统的DAC(Discretionary Access Control)自主访问控制上,就是依据程序的拥有者(所在组)和文件的权限来决定是否有存取的能力。
这样在拥有高级权限例如:root用户启动的程序就会有root自身所拥有的权限,这将会造成一些攻击事件的发生。
Selinux使用的是MAC(Mandatory Access Control)委任式访问控制的方法。所以即使程序是root权限,也不一定能够任意的读取系统的文件,
这要看文件对这个程序设定的可取用的权限。但是这样一来Selinux就要有很多的控件条目,Selinux就提供了一些预设的政策(Policy),并在
政策中提供了很多的规则。
总结:Selinux就是降主体由用户变成程序,程序使用文件,文件是否让该程序使用,双向的都要设定。
3.selinux运作
1.主体:程序
2.目标:文件系统
3.政策:主要两个 targeted:针对网络服务限制多,针对本机限制少,预设政策。
strict:完整的Selinux限制,限制严格。
4.安全性本文(security context):主体能不能存取目标,有两个限制条件1.政策是否允许。2.主体和目标的安全性文本是否一致。
过程:Selinux的主体要想读取目标,首先要满足政策,然后才能对比安全性本文,然后还要看用户权限是否能够有读取文件的权限。
注意:这里如果安全性本文有错误,那么主体就不能存取文件系统,就会产生权限不符的提示。
4.说说安全性本文,安全性本文是程序和文件操作系统都需要一份。程序运行的时候当然是在内存中,所以程序的安全性文本就在内存中。
文件的安全性文本是在文件的inode中,所以读取文件的inode就可以对比安全性本文和文件的权限来确定是否程序能够读取文件。
使用ls -Z是能够显示Selinux安全性本文的信息。
例如:system_u:object_r:user_home_t:s0
字段解释:身份识别:角色:类型
身份识别:root(表示root身份)、system_u(表示系统程序)、user_u(表示一般用户)
注意:在身份的识别中,系统上面大部分的数据都会是system_u和root,在/home这种文件中大部分都会是user_u这种。
角色:1.object_r(代表是档案或者是目录)2.system_r(代表的就是程序,有时候也代表使用者)
类型:(最重要)
在预设的targeted政策中,身份系别和角色基本上是不重要的,重要的在于这个类型(type)字段上,
基本上主体程序能不能读取这个文件,与类型字段有关!类型字段在档案和程序定义不相同
1.type:在文件资源(object)上面称为类型。
2.domain:在主体的程序(subject)则称为领域。
注意:domain和type要搭配在一起才能够读取档案。
解释一下Selinux type字段的相关性。
身份识别角色 对应在targeted的意义
root system_r 代表供root账号登入是所取得的权限
system_usystem_r由于是系统账号,是非交谈式的系统运作程序
user_usystem_r一般可以登入用户的程序
过程:-rwxr-xr-x root root system_u:object_r:httpd_exec_t:s0 /usr/sbin/httpd
drwxr-xr-x root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html
1. 首先,我们触发一个可执行的目标档案,那就是具有 httpd_exec_t 这个类型的usr/sbin/httpd
文档 。
2. 该文件的类型会让这个档案所造成的主体程序 (Subject) 具有 httpd 这个领域 (domain) ,我们
的政策针对这个领域已经制定了讲多规则,其中包括这个领域可以读取的目标资源类型;
3. 由于 httpd domain 被设定为可以读取 httpd_sys_content_t 这个类型的目标档文件(Object) ,
因此你的网页放置到 /var/www/html/ 目录下,就能够被 httpd 那支程序所诺取了;
4. 但最终能不能读到正确的资料,还得要看 rwx 是否符合 Linux 权限的规范!
以上注意:政策内需要制定详细的domain/type相关性。
5.以上是关于Selinux的原理性的问题,那么下面说一下使用
1.Selinux支持的三种模式;1.enforcing强制模式:表明开始限制domain/type
2.permissive宽容模式:有警告信息,但是没有domain/type限制。
3.diabled关闭
2.getenforce 查询Selinux的状态。
3.sestatus [-vb] v:检查/etc/sestatus.conf内的文件
b:将目前的政策的规则布尔值列出。
4.Selinux的配置文件 /etc/selinux/config(这里面有启动的模式和政策的模式)
5.Selinux的启动问题:
1)先要改变配置文件中的模式为enfocing 或者 permissive.
2)到/boot/grup/menu.lst(其实这个是grup.conf的链接文件)去掉selinux=0(有了这个那么内核在
启动的时候就会忽略掉/etc/selinux/config的设定值,就不会加载Selinux)
以上注意:Selinux是加载在内核中的所以必须要重启生效。
6.模式切换:在Selinux中可以在enforcing 和permissive之间切换,但是不能和disable切换(要重启)
切换的指令setenforce [0|1] 0是permissive,1是enforcing。
6.实例:在/var/www/html 下建立的Index.html是可以执行的,ls -Z的属性是
-rw-r--r-- root root user_u:object_r:httpd_sys_content_t:s0 /var/www/html/index1.html
注意:httpd_sys_content_t类型是可以被httpd_t 域读取的
例如:在/root下建立的目录
-rw-r--r-- root root user_u:object_r:user_home_t:s0 index.html
user_home_t 类型是不可以被httpd_t 域读取的。
解决这个的办法就是:重置Selinux安全性本文。
1.使用chcon( change file SELinux security context)命令处理:
chcon [-R] [-t type] [-u user] [-r role] 文件
或者:chcon [-R] --reference=范例文件 档案
参数:-R :递归修改。
-t :后面接安全性文本的类型字段 例如:httpd_sys_content_t
-u :后面接身份识别,例如:system_u
-r :后面接角色例如:sytem_r
例如:chcon -t httpd_sys_content_t /var/www/html/index.html
chcon --reference=/etc/passwd index.html
2.系统默认的文件都有特殊的Selinux安全新本文,例如、/var/www/html 原本就是httpd能够读取的目录,
所以就可以用还原的方式即:restorecon(restore file(s) default SELinux security contexts.
)命令。
参数:-R 递归
-v:将过程显示到屏幕上。
7.Selinux的排错:
1.Selinux是整合到内核中的服务,所以几乎不用其他的服务支持,开机就好了。但是如果要一动一些文件到其他目录下可能没有更改安全性本文,‘
会产生错误,这里就要用到其他的服务帮助了。
2.setroubleshoot服务会将错误信息写入到/var/log/messages中,通过cat /var/log/messages | grep "setroubleshoot"可以查到。
3.使用auditd 把详细的资料写入到/var/log/audit/audit.log
auditd是核查的意思.这里的auditd服务会把很多的信息写入/var/log/audit/audit.log,注意不只是错误信息。
使用audit2why可以帮助我们查询。
以上两种方法setroubleshoot更加好用
8.Selinux的政策与规则管理
1.首先要会查阅政策的相关内容。seinfo:-A 列出所有Selinux的状态,规则布尔值,身份标志,角色,类别等。
-t 列出Selinux所有类别
-r 所有的角色
-u 所有的身份标志
-b 列出规则布尔值
想要知道更加详细的的内容可以用sesearch [-a] [-s 主体类别] [-t 目标类型] [-b 布尔值]
-a 列出该类别或布尔值的所有相关信息
-s 后面接主体程序
-t 后面还要接类别:如 -t http_t
-b 后面还要接布尔值的规则,例如 -b http_enable_ftp_server
注意:以上两个查询很重要,有时候会遇到一些服务器无法访问的问题,可以使用ps -aux -Z来找到主程序的domain 然后可以
利用sesearch 找到主程序能够读取的文件。
2.布尔值:里面规范了很多的主体程序和文件的之间的读取问题。其实就是一堆的规则。这个布尔值可以将规则设定为启动(1)或者关闭(0)
1.布尔值的查询与修改。
1)seinfo -b可以用来查询系统有多少布尔值,但是每个布尔值是否能够启动用getsebool命令查询:
-a :列出目前系统上面的所有布尔值条款设定为开启或关闭值。
2)修改布尔值,关闭或者是启动
setsebool [-P] 布尔值=[0|1]
-P:直接将设定值写入配置文件,该设定数据未来会生效的。
例如:getsebool httpd_enable_homedirs
setsebool -P httpd_enable_homedirs=0
以上两个布尔值的命令式很有用的。
3.默认目录的安全性本文查询与修改。
restorecon是能够将文件恢复到文件所在位置的默认的安全性本文。
semanage是用来查询默认的安全性本文。
#semanage {login|user|port|interface|fcontext|translation} -l
#semanage fcontext -{a|d|m} [-frst] file_spec
参数:fcontext:主要用在安全性文本方面的用途,-l为查询的意思;
-a 增加的意思,你可以增加一些目录的默认安全性本文类型设定;
-m:修改的意思
-d:删除的意思
例如:#semanage fcontext -a -t public_content_t(将默认文件的安全性本文加上 public_content_t)
注意:#semanage fcontext -l这个查询到的是所有的默认的安全性本文的内容。
semanage fcontext -a -t public_content_t "/srv/samba(/.*)?
注意以上的格式/srv/samba(/.*)?