[经验分享] OpenHarmony之SeLinux介绍(一) 原创

诚迈-陆志刚 显示全部楼层 发表于 2024-7-10 16:37:50
OpenHarmony之SeLinux介绍(一)

(文章已获得原作者诚迈科技资深研发工程师-石杰授权)


一、SeLinux介绍
SeLinux(Security-Enhanced Linux)是一种基于Linux的安全模块,它提供了一种强制访问控制(MAC)机制。与Linux传统的自主访问控制(Discretionary Access Control, DAC)相比,MAC能够更严格地控制用户和进程对资源的访问,从而增强系统的安全性。

11.png

●MAC(强制访问控制Mandatory Access Control)
通过实施一套预定义的安全规则来控制用户和进程对系统资源的访问。也就是说,即使你是 root 用户,当你访问文件资源时,如果使用了不正确的进程,那么也是不能访问这个文件资源的。
●DAC(自主访问控制系统 Discretionary Access Control)
Linux 的默认访问控制方式,它允许资源的所有者(通常是文件或对象的创建者)自主决定谁可以访问这些资源以及访问的权限级别,也就是依据用户的身份和该身份对文件及目录的 rwx 权限来判断是否可以访问。
●主体(Subject):访问者
●客体/目标(Object):被访问者
●客体类别:被访问者代表的类型。例如:客体是文件,目录或者套接字类型
●安全上下文:构成如下【身份字段:角色:类型:等级】。例如 【u:r:foundation:s0】
a.身份字段:用于标识该数据被哪个身份所拥有
b.角色:主要用来表示此数据是进程还是文件或目录
c.类型:类型字段是安全上下文中最重要的字段,进程是否可以访问文件,主要就是看进程的安全上下文类型字段是否和文件的安全上下文类型字段相匹配,如果匹配则可以访问(类型字段在文件或目录的安全上下文中被称作类型(type),在进程的安全上下文中被称作域(domain))
●TE(Type Enforcement)模型
TE模型基于类型和属性的组合,对于进程给与最小权限,它的特点是对所有的文件都赋予一个type文件类型标签,对进程也赋予一个domain标签。domain标签能够执行的操作也是在策略里定好的。
文件权限与安全上下文

22.png


二、基本操作
SeLinux有 「disabled 禁用」「permissive 宽松模式」「enforcing 严格模式」3种状态。
✧通过命令更改状态
hdc shell getenforce:得到当前的Selinux值
hdc shell setenforce:更改当前的Selinux值 ,后面可以跟 enforcing, permissive 或者 1, 0。
注意:命令更改重启之后就会失效
✧通过配置文件更改
配置路径:/etc/selinux/config

  1. SELINUX=permissive
  2. SELINUX=enforcing
复制代码
✧查看文件安全上下文

ls -Z
  1. # ls -lZ samgr
  2. -rwxr-xr-x 1 root shell u:object_r:samain_exec:s0  306104 2024-06-01 02:00 samgr
复制代码


✧查看进程安全上下文
ps -eZ


  1. # ps -eZ | grep foundation
  2. u:r:foundation:s0        590 ?        00:00:13 foundation
复制代码


三、策略
✧策略规则
●allow规则
允许指定主体对指定的客体执行特定的操作
●neverallow规则
禁止特定的主体对特定的客体执行特定的操作,不管其他规则如何定义。这是一种高优先级的规则,neverallow规则通常用于定义关键的安全策略,以防止潜在的高风险操作。违反此规则在编译阶段就会报错
●规则中特殊操作符
通配符(*),包括了客体能执行的所有操作,允许foundation访问data_service_el1_file执行所有操作


  1. allow foundation data_service_el1_file:file *;
复制代码


取反操作符(~),除了列出的操作外,其它的操作都包括, 允许foundation访问data_service_el1_file除了write以外所有操作


  1. <allow foundation data_service_el1_file:file ~{write};
复制代码


●语法规则


  1. allow subject object:obj_class { rights };
  2. neverallow subject object:obj_class { rights };
复制代码


subject:一个进程或一组进程的标签,主体,即执行操作的进程的类型。
object:一个对象(文件,套接字等)或一组对象的标签,客体。
obj_class:客体类别,即要访问的对象的类型
rights:要执行的操作,例如读写等
●allow示例


  1. allow foundation data_service_el1_file:file { ioctl lock map read  open setattr };
复制代码


foundation:主体为foundation
data_service_el1_file:客体为data_service_el1_file
file:客体类别为file,访问的对象的类型为文件
{ ioctl lock map read open setattr }:ioctl、lock、map、read、open和setattr操作。
解释:允许foundation访问data_service_el1_file类型标签,可以执行ioctl lock map read append open setattr操作

●neverallow示例

  1. neverallow foundation dev_ashmem_file:chr_file execute;
复制代码


foundation:主体为foundation
dev_ashmem_file:客体为dev_ashmem_file
chr_file:客体类别为chr_file,即要访问的对象的类型为文件
execute:execute 操作
解释:不允许foundation进程执行execute操作dev_ashmem_file类型标签


无用

©著作权归作者所有,转载或内容合作请联系作者

您尚未登录,无法参与评论,登录后可以:
参与开源共建问题交流
认同或收藏高质量问答
获取积分成为开源共建先驱

精彩评论2

Hazel

沙发 发表于 2024-7-19 14:01:09
小型系统如何支持selinux

诚迈-陆志刚

发表于 2024-8-12 14:59  IP属地: 江苏省扬州市

回复 Hazel: 暂时还不支持哦

【1 条回复】

Copyright   ©2023  OpenHarmony开发者论坛  京ICP备2020036654号-3 |技术支持 Discuz!

返回顶部