【本文正在出席2023年第一期优质创作者激励计划】

SELinux

#创作者激励# #跟着小白一起学鸿蒙# SELinux简析-鸿蒙开发者社区

SELinux说明

SELinux(Security-EnhancedLinux)是

韩国国家安全局

(NSA)对于

强制访问控制

的实现,是Linux历史上最杰出的新安全子系统。NSA是在Linux社区的帮助下开发了一种访问控制体系,在这些访问控制体系的限制下,进程只能访问这些在他的任务中所须要文件。SELinux主要作用就是最大限度地减少系统中服务进程可访问的资源(最小权限原则)。

SELinux基本概念OpenHarmonySELinux使用介绍

#创作者激励# #跟着小白一起学鸿蒙# SELinux简析-鸿蒙开发者社区

OpenHarmony里的selinux部件负责对文件redhat linux 9.0,属性suse linux centosadobe air linux,服务等系统资源提供强制访问控制保护。提供neverallow规则限制系统中的高危操作,降低系统安全风险。

文件结构(distributedatamgr)

├── BUILD.gn
├── bundle.json
├── config								# 板侧		三方库配置文件
│   ├── config.enforce
│   └── config.permissive
├── docs								# 文档
├── interfaces
│   ├── policycoreutils					# 板侧		libload_policy.so, librestorecon.so	
│   │   ├── include
│   │   └── src

OpenHarmony SELinux使用介绍_suse linux centos_SELinux强制访问控制

│ └── tools # 板侧 load_policy, restorecon │ ├── hap_restorecon │ ├── load_policy │ ├── param_check │ ├── restorecon │ └── service_check ├── LICENSE ├── OAT.xml ├── README-en.md ├── README.md ├── scripts # 编译侧 策略编译脚本 ├── selinux.gni ├── sepolicy # 编译侧 策略文件 │ ├── base │ │ ├── public │ │ ├── system │ │ └── te │ └── ohos_policy │ ├── ability │ ├── ark │ ├── arkXtest │ ├── barrierfree │ ├── bundlemanager │ ├── cloud │ ├── communication │ ├── customization │ ├── developtools │ ├── deviceprofile │ ├── distributeddatamgr │ ├── distributedhardware │ ├── distributedschedule │ ├── drivers │ ├── dsoftbus │ ├── filemanagement │ ├── global │ ├── graphic │ ├── hiviewdfx │ ├── iam │ ├── kernel │ ├── location │ ├── misc │ ├── miscservices │ ├── msdp │ ├── multimedia │ ├── multimodalinput │ ├── notification │ ├── os_account │ ├── powermgr │ ├── print │ ├── resourceschedule │ ├── security │ ├── sensors │ ├── startup │ ├── telephony │ ├── test_framework │ ├── update │ ├── usb │ ├── useriam │ ├── web │ ├── window │ └── xts └── test

运行验证

ls -lZ /         # 查看文件标签
ls -lLZ /        # 查看link源文件标签
ps -eZ           # 查看进程标签
setenforce 1     # 使能selinux强制模式
setenforce 0     # 是能selinux宽容模式,当前默认宽容模式
getenforce       # 获取selinux工作模式

日志剖析

//使用dmsg查看日志

SELinux强制访问控制_OpenHarmony SELinux使用介绍_suse linux centos

audit: type=1400 audit(1502458430.566:4): avc: denied { open } for pid=1658 comm="setenforce" path="/sys/fs/selinux/enforce" dev="selinuxfs" ino=4 scontext=u:r:hdcd:s0 tcontext=u:object_r:selinuxfs:s0 tclass=file permissive=1 //关键字:avc: denied //日志解读 open #操作为open pid=1658 #访问主体进程号为1658 comm="setenforce" #访问主体进程名为setenforce path="/sys/fs/selinux/enforce" #被访问客体为/sys/fs/selinux/enforce dev="selinuxfs" #被访问文件属于selinuxfs这一文件系统 ino=4 #文件节点编号为4 scontext=u:r:hdcd:s0 #访问主体selinux标签为u:r:hdcd:s0 tcontext=u:object_r:selinuxfs:s0 #被访问客体selinux标签为u:object_r:selinuxfs:s0 tclass=file #当前告警属于file类型的操作 permissive=1 #当前selinux处于宽容模式,只告警不做访问拦截。强制模式时,做拦截, permissive=0 //分析: 缺少啥权限:denied { open } 谁缺少权限:scontext=u:r:hdcd:s0 对哪个文件缺少:tcontext=u:object_r:selinuxfs:s0 什么类型:tclass=file 通用公式为:all {scontext} {tcontext}:{tclass} {denied权限}

策略编撰

根据avc告警,获取访问信息
如:
audit: type=1400 audit(1502458430.566:4): avc:  denied  { open } for  pid=1658 comm="setenforce" path="/sys/fs/selinux/enforce" dev="selinuxfs" ino=4 scontext=u:r:hdcd:s0 tcontext=u:object_r:selinuxfs:s0 tclass=file permissive=1
对应规则为
allow hdcd selinuxfs:file open;

递交仓

小结

SELinux是3.2降低的安全保护举措,所以假如我们开发了新服务,新框架,很有可能会遇到程序不能运行的问题suse linux centos,简单的判定方式有三种:

编译大法

找到这个文件:vendor/hihope/rk3568/config.json (不同的开发板文件不同哦)
改build_selinux为false
这样镜像就不支持selinux了,然后应该就能运行了,但是不推荐,破坏安全环境

临时命令

setenforce 0
使用此命令后,会关闭selinux判断,但是下次重启会恢复,此方法用于临时验证问题

降低te规则(如上解释)

Tagged:
Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。

发表回复