• 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

  • 相关阅读:
    .NET指定图片地址下载并转换Base64字符串
    如何成为一名优秀的老师?
    Django集成第三方登陆(social-django)
    python的入门知识(下)
    使用Multipass编译OpenHarmony工程
    【线性代数】MIT Linear Algebra Lecture 5: Transposes, permutations, spaces R^n
    Spring-Cloud-Openfeign如何支持数据压缩?
    目标检测YOLO实战应用案例100讲-基于机器视觉的输电线路小目标检测和缺 陷识别
    STM32 cubeMX HAL-----PWM—改变频率
    高频面试题:开发实战问题
  • 原文地址:https://blog.csdn.net/qq_40875048/article/details/131238896