简介
SELinux的目的是控制 Subject( 程序 ) 访问 Object( 文件 ).
管控流程
Subject发起对Object的访问请求, SELinux根据其策略( targeted / mls / minimum )设定, 验证Subject和Object的安全性环境( Security Context ), 验证通过, 允许访问, 验证失败, 访问拒绝.
注:[^ 国内Security Context多称作安全上下文]
相关属性
先来看下用户目录下的安全上下文信息
[root@server ~]# ls -Z
-rw-------. root root system_u:object_r:admin_home_t:s0 anaconda-ks.cfg
drwxr-xr-x. root root unconfined_u:object_r:bin_t:s0 bin
drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 git-dir
drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 temp
以 anaconda-ks.cfg 文件为例, 其安全上下文信息是 system_u:object_r:admin_home_t:s0
它的信息由 : 分为四段, 前三段依次为 Identify:role:type ( 身份识别:角色:类型 )
- Identify
标记文件的产生者- unconfined_u
不受限的用户, 改文件由不受限的程序产生.
一般来说, 系统内账号登录后获取的获取的bash环境就不受SELinux管控, 由它产生的文件, 多半就是unconfined_u - system_u
系统自身产生的文件
- unconfined_u
- Role
显示文件的属性- object_r
该文件是普通文件或目录文件 - system_r
该文件是程序
- object_r
- Type
针对程序, 它显示程序所属的Domain
针对文件, 它显示文件的Type
Domain会对特定的Type有读写权限, 由SELinux的策略管控
SELinux运行状态
SELinux有三种运行状态( 或者说是模式 ).
- enforcing
实际运作状态
SELinux的所有功能均运作且生效 - permissive
宽容状态
SELinux会根据Policy来验证Security Context, 但是不会拦截文件的读写
改状态多用来Debug - disabled
禁用状态
SELinux被停用
使用getenforce
命令可以查看系统当前SELinux的运行状态
使用setenforce [0|1]
可以实现在permissive和enforcing间的切换
setenforce
命令在SELinux是disabled的状态下无作用
[^ 有时候, SELinux从disabled切换至enforcing后, 会有服务无法启动, 提示没权限读取 /lib/xxx 的数据, 这多半是由于重新写入SELinux Type( Relable )时出错导致, 可以在permissive状态下执行 restorecon -Rv / 命令解决]
SELinux命令
getsebool
获取SELinux的布尔值设定
seinfo, sesearch
SELinux Policy查询命令
注:[^ 不是系统默认包含的命令, 需要安装 setools-console 包]
setsebool
设定SELinux的布尔值
不带 -P 参数为临时生效(系统重启后失效), -P 则为立即生效且永久生效
chcon
修改文件的Security Context
restorecon
恢复文件默认Security Context
semanage
修改SELinux Policy
sealert
[^ 需安装 setroubleshoot ]
很棒的辅助工具!!!
在系统日志中记录因SELinux而导致的失败信息, 同时提供建议处理方法