news 2026/6/23 19:08:38

SElinux策略文件配置

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SElinux策略文件配置

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)



显然,通过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


可以看到代码中的死循环没有退出,另一个终端,也能看到文件写入的内容了

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/22 15:40:03

瑞士发布国家级开源大模型Apertus:AI公共基础设施的全球新范式

瑞士发布国家级开源大模型Apertus:AI公共基础设施的全球新范式 【免费下载链接】Apertus-70B-Instruct-2509-unsloth-bnb-4bit 项目地址: https://ai.gitcode.com/hf_mirrors/unsloth/Apertus-70B-Instruct-2509-unsloth-bnb-4bit 在全球人工智能竞赛愈演愈…

作者头像 李华
网站建设 2026/6/13 19:59:09

5、内核调试技术全解析

内核调试技术全解析 1. 内核调试的挑战与支持 内核编程面临着独特的调试挑战。内核代码难以在调试器下执行,也不易进行跟踪,因为它是一组与特定进程无关的功能。内核代码错误极难重现,一旦出错可能导致整个系统崩溃,破坏用于追踪错误的大量证据。 为了应对这些挑战,开发…

作者头像 李华
网站建设 2026/6/23 13:39:55

8、Linux内核中的时间处理、延迟与异步工作调度

Linux内核中的时间处理、延迟与异步工作调度 在Linux内核开发中,处理时间相关的问题是非常重要的一部分。本文将深入探讨内核中时间测量、获取当前时间、延迟执行以及异步工作调度的相关内容。 1. 测量时间间隔 内核通过定时器中断来跟踪时间的流逝。定时器中断由系统的定时…

作者头像 李华
网站建设 2026/6/22 13:40:54

10、与硬件通信:I/O端口和内存的使用指南

与硬件通信:I/O端口和内存的使用指南 1. 硬件通信基础 在Linux设备驱动的开发中,实现与真实设备的交互需要考虑硬件因素。驱动程序作为软件概念和硬件电路之间的抽象层,需要与两者进行通信。本文主要介绍驱动程序如何在不同的Linux平台上访问I/O端口和I/O内存。 为了便于…

作者头像 李华
网站建设 2026/6/22 1:59:01

17、Linux 块设备驱动开发全面解析

Linux 块设备驱动开发全面解析 1. 块设备驱动概述 块设备驱动主要用于访问以固定大小块形式传输随机访问数据的设备,像磁盘驱动器。在 Linux 系统里,内核认为块设备和字符设备有着本质区别,这使得块设备驱动有独特的接口和挑战。高效的块设备驱动对系统性能至关重要,它不…

作者头像 李华