SELinux使用所谓的委任式访问控制(Mandatory Access Control,MAC),可以根据特定的程序和特定的文件资源进行权限的管理。即使是root用户,在使用不同的程序时,你所能获得的权限不一定是root,需要根据程序的设定。
一、SELinux的工作模式
1、主体(Subject)
SELinux主要管理的就是程序。可以相比于process。
2、目标(Object)
主体程序访问的目标资源一般就是文件系统。
3、策略(Policy)
访问安全性策略,规则等。CentOS6.x提供targeted和mls两个主要的策略。
targeted:针对网络服务限制较多,针对本机限制较少,是默认的策略。
mls:完整的SELinux限制,限制方面较为严格。
4、安全性环境(Security Context)
类似于文件系统的rwx。
查看/root下面文件的安全性环境
[root@www ~]# ls -Z
-rw——-. root root system_u:object_r:admin_home_t:s0 anaconda-ks.cfg
-rw-r–r–. root root system_u:object_r:admin_home_t:s0 install.log
-rw-r–r–. root root system_u:object_r:admin_home_t:s0 install.log.syslog
Identify:role:type
身份识别:角色:类型
身份识别(Identify):相当于账号方面的身份识别。主要的身份识别有:
1、root:表示root的账号身份
2、system_u:表示系统程序方面的识别,通常就是程序
3、user_u:代表的是一般用户账号相关的身份
角色(Rule):通过角色字段,我们可以知道这个数据是代表程序、文件资源还是用户。
1、object_r:代表的是文件或目录等资源,这是最常见的。
2、system_r:代表的就是程序了。不过一般用户也会被指定成为system_r
类型(Type):一个主体程序能否读取到这个文件资源,与类型字段有关
1、Type:在文件资源中被称为类型
2、Domain:在主体程序中被称为域
二、SELinux的启动、关闭与查看
三种模式:
# SELINUX= can take one of these three values:
# enforcing – SELinux security policy is enforced.
# permissive – SELinux prints warnings instead of enforcing.
# disabled – No SELinux policy is loaded.
查看:getenforce
临时设置:setenforce 【0 | 1】
永久修改:vim /etc/selinux/config,再重新启动
注意:setenforce无法在disabled的模式下进行切换
三、SELinux的Type字段修改
复制文件的Type字段会继承自目标目录,而移动文件保持不变。
1、chcon
chcon [-R] [-t type] [-u user] [-r role] 文件
chcon [-R] –reference=范例文件 文件
-R:连同该目录下的子目录也进行修改
-t:后面接安全性环境的类型字段
-u:后面接身份识别
-r:后面接角色
–reference:参考范例文件
2、restorecon
restorecon [-Rv] 文件或目录
-R:连同子目录修改
-v:过程显示到屏幕
3、semanage
semanage {login|user|port|interface|fcontext|translation} -l
semanage fcontext -{a|d|m} [-frst] file_spec
fcontext:主要用作安全性环境方面,-l为查询
-a:增加
-m:修改
-d:删除
四、SELinux策略内的规则布尔值修订
1、策略查阅
seinfo [-Atrub]
-A:列出SELinux的状态
-t:所有类别
-r:所有角色种类
-u:所有身份识别种类
-b:所有规则的种类(布尔值)
详细的规则:
sesearch [–all] [-s 主体类别] [-t 目标类别] [-b 布尔值]
2、布尔值的查询与修改
查阅:
getsebool [-a] [布尔值条款]
修改:
getsebool [-P] 布尔值=[0|1]
五、SELinux日志文件记录所需的服务
使用setsebool、chcon、restorecon等都是为了当某些网络服务无法正常提供相关功能时才需要进行修改的一些命令动作。CentOS提供了几个检测的服务来检测处理在登录SELinux时产生的错误,那就是auditd、setroubleshoot。
1、setroubleshoot:将错误信息写入/var/log/message与/var/log/setroubleshoot/*
安装并启动该服务
[root@www ~ ]yum install setroubleshoot setroubleshoot-server
[root@www ~ ]service auditd restart
运作方式:
1、先由auditd去呼叫audispd服务
2、然后audispd服务去启动sedispatch程序
3、sedispatch再将原本的auditd信息转成setroubleshoot的信息,进一步储存下来。
以httpd程序产生的错误为例
2、使用E-mail或在命令列上面直接提供setroubleshoot错误信息
3、SELinux错误克服的总结
网络连接要通过SELinux的权限判定后才能够继续rwx的权限对比,而SELinux的对比需要通过策略的各项规则对比后才能够进行SELinux Type安全性环境的对比。而后续的SELinux的修改通过chcon、restorecon、setsebool等命令来处理。通过分析/var/log/messsage内提供的setroubleshoot的信息。
a】在服务和rwx权限都没有问题,却无法成功的使用网络服务时,先使用setenforce 0 设置为宽容模式
b】再次使用该网络服务,如果这样就能使用,则问题出现在SELinux上面,若仍无法使用则应从其他方面考虑排错。
c】分析/var/log/message中的信息,找到sealert -l相关的信息并且执行
d】找到Allow Access的关键词,按照里面的动作来进行SELinux的错误克服。
e】处理完毕重新setenforce 1,再次测试网络服务
Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx
本文永久更新链接地址:https://www.linuxidc.com/Linux/2018-08/153603.htm