【鸿蒙南向开发】OpenHarmony之SeLinux介绍

199 篇文章 8 订阅
198 篇文章 0 订阅

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

image.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标签能够执行的操作也是在策略里定好的。
文件权限与安全上下文

image.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类型标签

写在最后

●如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:
●点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
●关注小编,同时可以期待后续文章ing🚀,不定期分享原创知识。
●更多鸿蒙最新技术知识点,请移步前往小编:https://gitee.com/

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值