共计 2706 个字符,预计需要花费 7 分钟才能阅读完成。
导读 | SELinux 使用所谓的委任式访问控制(Mandatory Access Control,MAC), 可以根据特定的程序和特定的文件资源进行权限的管理。即使是 root 用户,在使用不同的程序时,你所能获得的权限不一定是 root,需要根据程序的设定。 |
1、主体(Subject)
SELinux 主要管理的就是程序。可以相比于 process。
2、目标(Object)
主体程序访问的目标资源一般就是文件系统。
3、策略(Policy)
访问安全性策略,规则等。CentOS6.x 提供 targeted 和 mls 两个主要的策略。
targeted:针对网络服务限制较多,针对本机限制较少,是默认的策略。
mls:完整的 SELinux 限制,限制方面较为严格。
4、安全性环境(Security Context)
类似于文件系统的 rwx。
查看 /root 下面文件的安全性环境
# 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= 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 的模式下进行切换
复制文件的 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:删除
1、策略查阅
seinfo [-Atrub]
-A:列出 SELinux 的状态
-t:所有类别
-r:所有角色种类
-u:所有身份识别种类
-b:所有规则的种类(布尔值)
详细的规则:
sesearch [–all] [-s 主体类别] [-t 目标类别] [-b 布尔值]
2、布尔值的查询与修改
查阅:
getsebool [-a] [布尔值条款]
修改:
getsebool [-P] 布尔值 =[0|1]
使用 setsebool、chcon、restorecon 等都是为了当某些网络服务无法正常提供相关功能时才需要进行修改的一些命令动作。CentOS 提供了几个检测的服务来检测处理在登录 SELinux 时产生的错误,那就是 auditd、setroubleshoot。
1、setroubleshoot:将错误信息写入 /var/log/message 与 /var/log/setroubleshoot/*
安装并启动该服务
yum install setroubleshoot setroubleshoot-server
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,再次测试网络服务