zoukankan      html  css  js  c++  java
  • SELinux基础知识

    1、前言

    在Linux Kernel 2.6的时代,内核引入了一个新的安全系统,用来提供访问控制安全策略的机制,这个安全系统就是SELinux,全称为Security Enhanced Linux,由NSA贡献的,它为Linux内核子系统引入了一个健壮的强制控制访问架构 。

    Linux系统上传统的访问控制标准是自主访问控制(DAC),在这种形式下,一个软件或者守护进程以User ID(UID)或Set owner User ID(SUID)的身份运行,并且拥有该用户的目标(文件、套接字、以及其它进程)的权限,恶意代码很轻易运行在特定权限之下,从而取得访问的关键子系统的权限。而强制访问控制(MAC)基于保密性和完整性强制信息的隔离以限制破坏,该限制独立于传统的Linux安全机制运作。

    2、SELinux的工作方式

    SELinux的相关概念有:

    • 主体
    • 目标
    • 策略
    • 模式

    当一个主体(例如一个程序)尝试去访问一个目标(例如一个文件),SELinux安全服务器将在内核中从策略数据库中运行一个检查,基于当前的模式,如果SELinux安全服务器授予权限,则该主体能后访问目标,如果SELinux安全服务器拒绝了权限,就会在/var/log/messages中记录一条拒绝信息。

    SELinux的模式有:

    • Enforcing--SELinux策略强制执行,基于SELinux策略规则授予或拒绝主体对目标的访问;
    • Permissive--SELinux策略不强制执行,不实际拒绝访问,但会有拒绝信息写到日志;
    • Disabled--完全禁用SELinux。

    大多数系统,在默认的情况下,会将SELinux的模式设置为Enforcing,在登录的系统中,可以使用简单的命令getenforce查看,需要注意的是,永远不建议直接关闭SELinux,最佳设置模式为Enforcing和Permissive。

    3、模式设置

    在一些Android嵌入式设备上,使用串口登录后,出现了大量的SELinux拒绝信息的输出,如下图,该系统当前的SELinux模式为Enforcing,接下来,将简单介绍,如何去进行模式的设置:

    在对SELinux的模式进行配置之前,我们先了解一下,这些SELinux输出提示大概是什么意思,使用下面的一个输出进行详细分析,输出如下:

    [ 1150.705796] type=1400 audit(1578020365.526:4542): avc: denied { dac_override } for pid=186 comm="kworker/4:1" capability=1 scontext=u:r:kernel:s0 tcontext=u:r:kernel:s0 tclass=capability permissive=0

    对上面这个例子分析过程如下:

    缺少的权限:{ dac_override };

    谁缺少了权限:scontext=u:r:kernel:s0;

    对哪个文件缺少了权限:tcontext=u:r:kernel:s0;

    文件的类型为:tclass=capability;

    SELinux模式为:permissive=0。

    接下来,则是介绍SELinux模式设置的一些方式:

    (1)通过命令设置

    对于SELinux的模式设置,可采用命令行的方式进行改变,例如,使用下面的命令查看当前模式,并设置模式为Permissive,命令如下:

    查看当前系统的SELinux模式:

    # getenforce

    将模式设置为Permissive:

    # setenforce 0

    将模式设置为Enforcing:

    # setenforce 1

    在嵌入式设备下执行的命令效果如下所示:

    (2)修改配置文件

     修改SELinux的配置文件也可以更改SELinux的模式,可使用下面的操作进行修改:

    # vim /etc/selinux/config

    在需要修改的文件中,找到下面这行,然后设置成自己需要的模式:

    SELINUX=permissive

    (3)修改系统启动参数

     通过修改系统的启动参数,也可以达到修改SELinux的模式,修改步骤如下:

    进入到Android源码中,修改对应板子的编译文件:

    $ cd /sdm450_9.0/device/qcom/msm8953_64
    $ vim BoardConfig.mk

    在编译脚本的最后添加下面这一行,将SELlinux的模式设置为permissive:

    BOARD_KERNEL_CMDLINE += androidboot.selinux=permissive

    文件修改效果如下所示:

     然后回到Android源码根目录,重新编译,并使用fastboot命令更新boot.img镜像:

    $ croot
    $ make bootimage -j20
    
    /* 更新boot分区 */
    # adb reboot bootloader
    # fastboot flash boot boot.img
    # fastboot reboot

    当烧写完成后,Android系统重新启动完成后,进入到终端查看系统启动参数,检查SELinux的模式是否配置成功,使用命令如下:

    # cat /proc/cmdline

    模式配置成功效果如下:

    4、小结

    本文主要简单介绍了SELinux的相关基础知识,并简单介绍了如何在嵌入式设备上修改SELinux的模式。

  • 相关阅读:
    Java基础-Object通用方法
    Java基础-关键字
    Java基础-运算
    Java基础-String
    Java基础-数据类型
    GCN-GAN:对加权动态网络的非线性时间链路预测模型
    长短期记忆(long short-term memory, LSTM)
    CSP 201604-1 折点计数
    介绍一个好东西C++11
    malloc free使用规范
  • 原文地址:https://www.cnblogs.com/Cqlismy/p/12143484.html
Copyright © 2011-2022 走看看