想了解更多关于开源的鸿蒙内容,请访问:
51CTO 开源基础软件社区
https://ost.51cto.com
SELinux(Security-Enhanced Linux) 是[美国国家安全局](NSA)对于[强制访问控制]的实现,是起学 Linux历史上最杰出的新安全子系统。NSA是鸿蒙在Linux社区的帮助下开发了一种访问控制体系,在这种访问控制体系的小白析限制下,进程只能访问那些在他的起学任务中所需要文件。SELinux 主要作用就是鸿蒙最大限度地减小系统中服务进程可访问的资源(最小权限原则)。
OpenHarmony里的selinux部件负责对文件,属性,服务等系统资源提供强制访问控制保护。提供neverallow规则限制系统中的高危操作,减少系统安全风险。
文件结构(distributedatamgr):
├── BUILD.gn
├── bundle.json
├── config # 板侧 三方库配置文件
│ ├── config.enforce
│ └── config.permissive
├── docs # 文档
├── interfaces
│ ├── policycoreutils # 板侧 libload_policy.so, librestorecon.so
│ │ ├── include
│ │ └── src
│ └── 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
│ ├── 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查看日志
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增加的安全保护措施,所以如果我们开发了新服务,新框架,很有可能会碰到程序不能运行的问题,简单的判断方法有三种:
编译大法:
找到这个文件:vendor/hihope/rk3568/config.json (不同的开发板文件不同哦)
改build_selinux为false
这样镜像就不支持selinux了,然后应该就能运行了,但是不推荐,破坏安全环境
临时命令:
setenforce 0
使用此命令后,会关闭selinux判断,但是下次重启会恢复,此方法用于临时验证问题
增加te规则(如上解释)。
想了解更多关于开源的内容,请访问:
51CTO 开源基础软件社区
https://ost.51cto.com
责任编辑:jianghua 来源: 51CTO 开源基础软件社区 SELinux安全子系统(责任编辑:百科)
HarmonyOS 3正式版开放升级 首批机型包含华为Mate 40/P50等21款设备
谷歌放弃试验6年的超级宽带计划:Google Fiber面临出售