一文学会Sepolicy(Selinux)快速修改验证
创始人
2024-05-20 02:08:49

目录

一、简介

二、Selinux资源访问控制

三、Selinux工作模式

四、判断是否为Sepolicy问题

五、快速修改


一、简介

安全增强型 Linux(Security-Enhanced Linux)简称 SELinux,它是 Linux 的一个安全子系统。SELinux 主要作用是最大限度地减小系统中服务进程可访问的资源(最小权限原则)。Google从android 5.0开始引入Selinux。

二、Selinux资源访问控制

Selinux中对资源的访问控制分为两类: DAC和MAC。

  • 自主访问控制(Discretionary Access Control, DAC):在未使用SELinux的系统上, 对资源的访问是通过权限位来确定, 比如一个文件对所属用户是否有读、写、执行权限, 其他用户的访问可由所属用户进行配置。
  • 强制访问控制(Mandatory Access Control, MAC):在使用了 SELinux 的系统上,对资源的访问除了通过权限位判定外,还需要判断每一类进程是否拥有对某一类资源的访问权限。这种方式对资源的访问控制, 称之为强制访问控制(Mandatory Access Control, MAC)。只给每个进程开放所需要的资源, 将权限开放到最小, 当进程出现漏洞时也只会影响到该进程所涉及的资源, 这大大提升了安全性。

 Selinux会先做DAC检查再做MAC检查。

三、Selinux工作模式

Selinux 有三种工作模式,分别为:

  • enforcing: 强制模式, 执行SELinux规则, 违反的行为会被阻止
  • permissive: 宽容模式, 执行SELinux规则, 违反的行不会被阻止
  • disabled: 关闭SELinux

对于Android设备来说,adb shell后执行getenforce即可获得当前工作模式。 

四、判断是否为Sepolicy问题

Step1. 当某个进程出问题时,举个例子,比如so明明存在却无法link,那么看日志里是否有相关的avc:

avc: denied { read } for name="libxxx.so" dev="xxx" ino=xxx scontext=u:r:abc:s0 tcontext=u:object_r:vendor_file:s0 tclass=file permissive=0

Step2. 临时关闭Selinux

adb shell
# 设置为Permissive模式
setenforce 0
# 看一下成功没
getenforce

上述方法重启后失效,仅限临时验证。

Step3. 看问题是否消失

也可以根据需要重启进程啥的。消失了就是Selinux的问题。

五、快速修改

其实很好修改,再来看这句日志:

avc: denied { read } for name="libxxx.so" dev="xxx" ino=xxx scontext=u:r:abc:s0 tcontext=u:object_r:vendor_file:s0 tclass=file permissive=0

这句日志的意思是:{被拒绝的动作}   name="客体名称"   scontext=u:r:主体上下文:s0       tcontext=u:object_r:客体上下文:s0     tclass=客体类型

只关注标红部分即可,缺啥补啥。在abc.te文件(小概率其他文件)中加上一行:

allow abc vendor_file:file { read };

 即可。

---------------------------

如果abc这个主体上下文不存在(全局搜下,正常都会有,没有说明是你自己独创的),那就要在file_context文件中加入

/vendor/bin/hw/android\.hardware\.abc@1\.0-service    u:object_r:abc_exec:s0

前面的abc对应文件名字,不一定是这个我只是举个例子。然后新建abc.te,开头写入:

type abc, domain;# allow init to launch processes in this context
type abc_exec, exec_type, vendor_file_type, file_type;
init_daemon_domain(abc)

类似的。然后下面再加上allow那个权限。

验证:修改后编译selinux_policy,如果abc安全上下文也是你自己写上的需要编译vendor或eng_vendor镜像替换(各厂商不太一样)。替换,验证。如果再报其他权限问题,再加。

参考优秀博客:

Android SELinux 规则介绍 - 万卷茅屋 (wertherzhang.com)

Android的Sepolicy - 青山牧云人 - 博客园 (cnblogs.com)

相关内容

热门资讯

世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...