SElinux策略文件配置

SELinux策略配置与调试

2025博客之星年度评选已开启 10w+人浏览 807人参与

SElinux策略文件配置

经过前面的一大堆理论的学习,我们知道,还需要编写相关的规则文件,才能通过 SElinux 的检测

Selinux权限配置及安全上下文文件目录:
在这里插入图片描述
在这里插入图片描述

编译selinux_policy

所以在device下搜索emulator_x86_64的关键字,因为device是产品配置相关的目录:
在这里插入图片描述
上面导入的是build/make/target/board/emulator_x86_64/BoardConfig.mk,于是需要在这个文件中配置sepolicy所在的路径,这样系统可以将其加入编译到selinux_policy

在这里插入图片描述
在这里插入图片描述

编译

在这里插入图片描述
编译后会得到两个结果
第一个:上下文标签
第二个:编译后的二进制策略文件precompiled_sepolicy
但是,这个文件是放在哪个目录下呢:请用以下指令搜索

dzz@ubuntu:~/aosp/out/target/product/emulator_x86_64$ find . -name "precompiled_sepolicy"
./obj/ETC/precompiled_sepolicy_intermediates/precompiled_sepolicy
./vendor/etc/selinux/precompiled_sepolicy
dzz@ubuntu:~/aosp/out/target/product/emulator_x86_64$ 

可以得到的是 ./vendor/etc/selinux/precompiled_sepolicy
在这里插入图片描述
避免遗漏,把整个 selinux 文件push 到android 模拟器上面就好
在这里插入图片描述

调试

查看sedemo_dev设备文件的上下文标签

ls -laZ /dev/sedemo_dev_dzz

在这里插入图片描述
为什么不是前面定义的标签?(sedemo_dev_dzz_t)
在这里插入图片描述
> ls -lZ /vendor/bin/sedemo
在这里插入图片描述
显然,通过 restorecon 切换,上下文标签已经是我们定义的了

但是这样麻烦,我们期望他能自己切换域;添加一句即可

domain_auto_trans(shell, sedemo_dt_exec, sedemo_dt)

因为切换进程域的时候,如果是由shell指令去切换,将切换成对应的sedemo_dt这个域,sedemo_dt_exec是类型
然后继续编译:

make selinux_policy -j16

然后重复上面的push:

adb push out/target/product/emulator_x86_64/vendor/etc/selinux /vendor/etc/

重启设备,让系统根据file_contexts的内容自动打标签:

adb reboot

运行

//如果不是宽容模式,先切换到宽容模式(为方便调试)
setenforce 0

touch /dev/sedemo_dev_dzz
restorecon /dev/sedemo_dev_dzz

ls -lZ /dev/sedemo_dev_dzz
ls -lZ /vendor/bin/sedemo_dzz

开两个终端,左边抓log ,右边运行,先在宽容模式下调试 logcat | grep "avc" | grep -E "sedemo_dzz|sedemo"
在这里插入图片描述
在这里插入图片描述
做到之后,使用 audit2allow 转换为 allow

先安装audit2allow
sudo apt install policycoreutils-python-utils

屏蔽以下4个语句 :
sudo vim /usr/bin/audit2allow  //打开文件,屏蔽以下几行
350             self.__parse_options()                                                                                                                                       |~                             
351             #if self.__options.policy:                                                                                                                                   |~                             
352             #    audit2why.init(self.__options.policy)                                                                                                                   |~                             
353             #else:                                                                                                                                                       |~                             
354             #    audit2why.init() 


转换成te策略:
audit2allow -i avc.txt > hello.te

在这里插入图片描述
运行转换后的结果
在这里插入图片描述
加到te 文件,重新编译
在这里插入图片描述

make selinux_policy -j16
adb reboot

重启完成后,就可以使用强制模式执行了

setenforce 1    //切换到强制模式
getenforce
runcon u:r:sedemo_dt:s0 /vendor/bin/sedemo_dzz

在这里插入图片描述
可以看到代码中的死循环没有退出,另一个终端,也能看到文件写入的内容了

Android 系统中,SELinux 策略文件的存储位置通常由构建配置中的系统变量指定,这些变量定义了平台公共、平台私有、设备特定以及系统级别的策略文件路径。 平台公共 SELinux 策略文件路径通常指向 `system/sepolicy/public`,该目录包含适用于所有设备的通用 SELinux 策略定义[^2]。平台私有 SELinux 策略文件路径则通常指向 `system/sepolicy/private`,此目录存放的是特定于 Android 平台但不对外公开的策略规则。设备特定的 SELinux 策略文件路径一般位于 `device/{厂商}/{设备名称}/sepolicy/`,这里包含了针对特定设备或厂商定制的 SELinux 策略文件[^2]。对于系统级别的 SELinux 策略文件路径,它通常也指向 `system/sepolicy`,作为整个系统策略的基础部分。 这些目录结构和路径设置允许 Android 构建系统在编译过程中正确地收集和处理不同来源的 SELinux 策略文件,以生成最终部署到设备上的策略文件。此外,`BoardConfig.mk` 文件负责指定这些路径,确保构建过程能够识别并使用正确的策略文件集[^2]。 ### SELinux 策略文件的作用 - **public 目录** 中的策略文件提供了所有设备共享的基础策略,比如对标准系统服务和组件的安全策略定义。 - **private 目录** 包含了非公开的平台策略,可能涉及更敏感或特定的功能实现。 - **vendor 特定目录** 允许硬件制造商添加其设备所需的独特安全策略,这有助于保持核心平台策略的干净和通用性。 - **system/sepolicy 目录** 作为主策略目录,整合了来自其他目录的策略片段,形成完整的 SELinux 策略集。 通过这种方式,Android 系统实现了灵活而细粒度的安全控制机制,使得每个运行中的进程(主体)对文件、目录和套接字等资源(客体)的访问都受到严格限制,从而保障了系统的整体安全性[^1]。 ```bash # 示例:在 BoardConfig.mk 中定义 SELinux 策略路径 BOARD_PLAT_PUBLIC_SEPOLICY_DIR := system/sepolicy/public BOARD_PLAT_PRIVATE_SEPOLICY_DIR := system/sepolicy/private BOARD_VENDOR_SEPOLICY_DIRS := device/manufacturer/device-name/sepolicy/ BOARD_SEPOLICY_DIRS := device/manufacturer/device-name/sepolicy/ BOARD_SYSTEM_SEPOLICY_DIRS := system/sepolicy ``` 上述配置示例展示了如何在 `BoardConfig.mk` 文件中定义用于构建 SELinux 策略的各个目录路径。这种组织方式不仅简化了策略文件的管理,也为不同层级的策略定制提供了良好的支持。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值