SELinux

简介

SELinux:Security Enhanced Linux,安全强化Linux

自主访问控制 DAC

这是传统文件权限与账号关系,依据进程的拥有者与文件资源的rwx权限来决定有无存取的能力。

缺点:

  • root具有最高权限

如果不小心某个进程被有心人取得,且该进程属于root权限,那么这支进程就可以在系统上进行任何资源的存取。

  • 使用者可以取得进程来更改文件资源的访问权限

如果不小心将某个目录设定为777,由于对任何人的权限都是rwx,因此该目录就会被任何人随意存取。

委任式访问控制 MAC

可针对特定的进程与特定的文件资源来进行资源管控;即使你是root,在使用不同进程时,你所能取得的权限并不一定是root,需要看当时该进程设定。

MAC控制主体为进程,目标是该进程能否读取的文件资源

左图:

没有SELinux的DAC情况,root主导的Apache进程,可在三个目录中任意新建文件与修改

右图:

有SELinux的DAC情况,SELinux仅会针对Apache此进程放行部分目录

SELinux运作模式

概念说明

主体(Subject)

进程

目标(Object)

文件系统

政策(Policy)

centos7中仅有提供三个主要政策

  • targeted(定向):针对网络限制较多,针对本机限制较少;预设的政策,建议用
  • minimum(最小):由targeted修订而来,仅针对选择的进程来保护
  • mls:完整的SELinux限制,较为严格

安全性文本(Security Context)

在政策允许后,主体与目标的安全性文本必须一致才能正常读写。先匹配政策,再对比安全性文本。

安全性文本是存储在inode内的;当某进程向读取目标文件资源时,同样需要读取inode。

#查看root家目录下文件的SELinux信息

[root@wenzi ~]#ll -Zd /root
dr-xr-x---. 2 root root system_u:object_r:admin_home_t:s0 173 M、

ay 19 16:19 /root
[root@wenzi ~]#ll -Z
total 8
-rw-------. 1 root root system_u:object_r:admin_home_t:s0     1279 May 15 02:35 anaconda-ks.cfg
-rwxr-xr-x. 1 root root unconfined_u:object_r:admin_home_t:s0 2431 May 19 16:16 centos8init.sh

安全性文本主要用冒号:分隔为三个字段:

Identity:role:type     身份:角色:类型

  • 身份

unconfined_u:不受限的用户,即该文件来自不受限制的进程产生的。通常使用可登入账号取得bash后,预设的bash环境不受SELinux控制,所以此bash进程产生的文件其身份大多是unconfined_u

system_u:系统用户,大部分是系统自己产生的文件

  • 角色

object_r:代表的是文件或目录等文件资源

system_r:代表的是进程,但一般的使用者也会被指定为system_r

  • 类型

在预设的targeted政策中,identity和role基本是不重要的,关键在于type。

在文件资源上称为类型type

在主体进程上称为领域domain

domain和type相搭配,决定主体与目标之间是否具有可以读写的权限

进程与文件SELinux type字段相关性

targeted政策下大致对应如图

身份识别角色在targeted意义
unconfined_uunconfined_r一般可登入使用者的进程,受限较少的进程,如bash,X windows相关软件
system_usystem_r大多数的系统进程均是这种类型

最重要的字段是类型字段type,主体与目标之间是否具有可读写的权限,与进程的domain及文件的type有关

SELinux三种模式的启动、关闭与观察

enforcing:强制模式

表示SELinux运行中,且已经正确的开始限制 domain/type

permissive:宽容模式

表示SELinux运行中,会有警告讯息,但并不会实际限制 domain/type 的存取;此模式可用作SELinux的Debug之用

disabled:关闭

SELinux并没有实际运作

流程

主体进程需要经过政策规则、安全文本对比、rwx权限规范,都通过才能顺利读取文件

并非所有的进程都被SELinux管制,所以左侧是 受限的进程主体。

查看进程是否受限

当前SELinux模式为 Enforcing 政策规则为 target

[root@wenzi ~]# ps -eZ | egrep "crond|bash"
system_u:system_r:crond_t:s0-s0:c0.c1023 557 ?  00:00:00 crond
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 1055 pts/0 00:00:00 bash
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 1060 ? 00:00:00 bash

可见 crond 是受限的主体进程,需要经过流程图;bash 是不受限的类型,进判断 rwx 即可

查看当前SELinux模式

查看当前SELinux政策(Policy)

命令:sestatus [-vb]

-v:检查列于 /etc/sestatus.conf 内的文件与进程的安全性文本内容

-b:将目前政策规则布尔值列出,即哪些规则是否要启动(0/1)

修改SELinux模式

配置文件 /etc/selinux/conf ,默认如下

开启SELinux

SELINUX=enforcing   修改完必须重启

关闭SELinux

SELINUX=disabled   修改完必须重启

Enforcing模式下可在Enforcing和Permissive间切换

切换为Permissive

setenforce 0

切换为Enforcing

setenforce 1

注意:无法再disabled模式下切换

某些特殊情况下,从 disabled 切换为 Enforcing 后,部分服务无法启动,提示 /lib/xxx 里面的数据没有权限读取,所以启动失败.这大多是由于在重新写入SELinux type(Relabel)出错之故,使用 Permissive 就没有这个错误。那如何处理呢?最简单的方法就是在 Permissive的状态下,使用restorecon -Rv /  重新还原所有SELinux的类型。

SELinux政策内的规则管理

SELinux各个规则的布尔值查询

getsebool [-a] [规则名]

-a:列出目前系统上所有的SELinux规则的布尔值为开启或关闭

sestatus -b 查看

SELinux各个规则规范的主体进程能够读取的文件 SELinux type 查询

使用 seinfo 命令安装工具  yum -y install setools-console.x86_64

在 查看进程是否受限 时,知道 crond 进程的 type 是 crond_t,查询 crond_t 能读取的文件 SELinux type 有哪些?使用 sesearch 命令

修改SELinux规则的布尔值

使用 setsebool 命令

SELinux安全文本的修改

使用 restorcon 让文件恢复正确的 SELinux type

命令:restorecon [-Rv] 文件或目录

选项:

-R:连同次目录一起修改

-v:将过程显示到屏幕上

默认的安全性文本查询与修改

使用 semanage 命令

当提示没有 semanage 命令时,先查询 semanage 命令来自哪个软件包,再安装对应包

[root@wenzi ~]# yum provides semanage
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
policycoreutils-python-2.5-34.el7.x86_64 : SELinux policy core python utilities
Repo        : base
Matched from:
Filename    : /usr/sbin/semanage

[root@wenzi ~]# yum -y install policycoreutils-python-2.5-34.el7.x86_64

范例可见 红帽认证—RHCSA_www.example.com_笔落_惊风雨的博客-CSDN博客 中 调试SELinux 题目

帮助文档:man semanage fcontext

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值