目录
1. SELinux初探
1.1 什么是SELinux
SELinux是整合到内核的一个模块
SELinux是在进行进程、文件等详细权限设置时依据的一个内核模块
由于启动网络服务的也是进程,因此刚好也是控制网络服务能否读写系统资源的一道关卡
1.1.0 自主访问控制(DAC)
上图来自百度百科
使用DAC产生的结果,以Apache为例说明
1.1.1 强制访问控制(MAC)
上图来自百度百科
使用MAC产生的结果,以Apache为例说明
1.2 SELinux的运行模式
SELinux是通过MAC(强制访问控制)的方式来管理进程的,它控制的主体是进程,而目标则是该进程能否读取到文件资源
- 主体(Subject)
SELinux主要管理的就是进程 - 目标(Object)
主体进程能否读写的目标资源(一般就是文件系统) - 策略(Policy)
由于进程与文件数量庞大,因此SELinux会依据某些服务来制订基本的读写安全性策略,这些策略会有详细规则(Rules)CentOS 7.x里提供三个主要策略
1.targeted:针对网络服务限制较多,针对本机限制较少(默认策略)
2.minimum:由target自定义而来,仅针对选择的进程来保护
3.mls:完整的SELinux限制,限制方面较严格 - 安全上下文(security context)
主体与目标的安全上下文必须一致才能够顺利读写
安全上下文是放置到文件的inode内的
由上图:
(1)主体进程必须要通过 SELinux 策略内的规则放行后,才可以与目标资源进行安全上下文的比对
(2)若比对失效则无法读写目标,若比对成功则可以开始读写目标
策略内需制订详细的 domain(在进程中)/type(在文件中)相关性
若文件的type设置错误,那么即使权限设置为 rwx 全开的777,该主体进程也无法读取目标文件
查看root家目录下面的文件的SELinux相关信息
[root@study ~] ls -Z
# -Z, --context
# print any security context of each file
查看系统进程的SELinux相关信息
[root@study ~] ps -e
1.3 SELinux三种模式的启动、关闭与查看
并非所有Linux发行版都支持SELinux
目前SELinux依据是否被启动,分为三种模式:
- 强制模式(Enforcing):代表SELinux运行中,且已经开始限制 domain/type
- 宽容模式(Permissive):代表SELinux运行中,仅会有警告信息并不会实际限制 domain/type 的读写(可用作SELinux的debug之用)
- 关闭模式(Disabled):SELinux并没有实际运行
主体进程需要经过策略规则、安全上下文比对之后,加上rwx的权限规范,若一切合理才会让进程顺利读取文件
并非所有进程都会被SELinux所管制
查看进程是否受到SELinux的限制即是否受限(confined)
范例:
找crond与bash这两个进程是否被限制
[root@study ~] ps -eZ | grep -E 'cron|bash'
由上可以得知
crond是受到SELinux限制的主体进程,
bash因为是系统进程所以为不受限类型(unconfined_t)所以直接判断rwx
查看目前的SELinux模式
[root@study ~] getenforce
显示SELinux状态
sestatus命令的作用是可以查看系统运行SELinux的状态,应用模式、布尔值,以及显示/etc/sestatus.conf文件内列出的文件和进程的安全上下文。
SELinux全称是Security Enhanced Linux (安全强化 Linux),是 MAC (Mandatory Access Control,强制访问控制系统)的一个实现,已在linux内核中存在了许多年,对于目前可用的linux安全模块来说,SELinux功能最全面,测试最充分,是linux内核的安全保镖。
SELinux主要作用就是最大限度地减小系统中服务进程可访问的资源(最小权限原则)
[root@study ~] sestatus [参数]
-v : 详细检查进程和文件的安全上下文
-b : 显示当前布尔值状态
SELinux的配置文件为【/etc/seLinux/config】
SELinux的启动与关闭
SELinux在Enforcing与Permissive之间切换
setenforce命令 – 设置SELinux状态
setenforce命令是用来开启和关闭SELinux的
[root@study ~] setenforce [0|1]
0:转成Permissive 宽容模式
1:转成Enforcing 强制模式
范例:
将SELinux在Enforcing与Permissive之间切换与查看
setenforce无法在Disabled模式下切换模式
[root@study ~] setenforce 0
[root@study ~] getenforce
Permissive
[root@study ~] setenforce 1
[root@study ~] getenforce
Enforcing
1.4 SELinux策略内的规则管理
1.4.0 SELinux各个规则的布尔值查询:getsebool
getsebool命令是用来查询SElinux策略内各项规则的布尔值(on/off)
[root@study ~] getsebool [参数]
-a : 列出目前系统上面的所有布尔值
1.4.1 查询SELinux策略规则:seinfo、sesearch等
SELinux的策略与规则管理相关命令:seinfo命令、sesearch命令、getsebool命令、setsebool命令、semanage命令
[root@study ~] seinfo [参数]
-a : 列出SELinux的状态、规则布尔值、身份识别、角色、类型等所有信息
-t : 列出SELinux所有类型(type)的种类
-r : 列出SELinux所有角色(role)的种类
-u : 列出SELinux所有身份识别(user)的种类
-b : 列出所有规则的种类(布尔值)
[root@study ~] sesearch [参数]
-a : 列出该类型或布尔值的所有相关信息
-t : 后面还要接类型,例如 -t httpd_t
-b : 后面还要接布尔值的规则,例如 -b httpd_enable_ftp_server
1.4.2 修改SELinux规则的布尔值:setsebool
setsebool命令是用来修改SElinux策略内各项规则的布尔值
[root@study ~] setsebool [参数]
-P : 直接将设置值写入配置文件,该设置数据将来会生效的
1.5 SELinux安全上下文的修改
1.5.0 手动修改文件的SELinux类型:chcon
chcon命令是修改对象(文件)的安全上下文,比如:用户、角色、类型、安全级别。也就是将每个文件的安全环境变更至指定环境
[root@study ~] chcon [参数]
-h : 影响符号连接而非引用的文件
-R : 递归处理所有的文件及子目录
-v : 为处理的所有文件显示诊断信息
-u : 设置指定用户的目标安全环境
-r : 设置指定角色的目标安全环境
-t : 设置指定类型的目标安全环境
-l : 设置指定范围的目标安全环境
1.5.1 使文件恢复正确的SELinux类型:restorecon
restorecon命令的作用是可以修复SELinux文件属性即恢复文件的安全上下文。
在Selinux中,一切皆对象,由存放在节点的扩展属性域的安全元素所控制其访问。所有文件和端口资源和进程都具备安全标签就是安全上下文。
一般情况下,cp命令会重新生成符合目录本身的安全上下文,当然可以使用-p参数,mv命令只是单纯将原有文件移动过去 不改变文件本身的属性,要用到restorecon命令
[root@study ~] restorecon [参数]
-i : 忽略不存在的文件
-f : infilename 文件 infilename 中记录要处理的文件
-e : directory 排除目录
-v : 将过程显示到屏幕上
-F : 强制恢复文件安全语境
1.5.2 默认目录的安全上下文查询与修改:semanage
semanage命令是用来查询与修改SELinux默认目录的安全上下文
[root@study ~] semanage [参数]
-l : 查询
-a : 增加,你可以增加一些目录的默认安全上下文类型设置
-m : 修改
-d : 删除