简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!
优质专栏:Audio工程师进阶系列【原创干货持续更新中...... 】🚀
优质专栏:多媒体系统工程师系列【原创干货持续更新中......】🚀
人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.
更多原创,欢迎关注:Android系统攻城狮
1.前言
本篇目的:在编译Android automotive车载系统时,遇到一个这样的报错,不清楚怎么引入的,但是解法很简单,分享给大家。
2.SELinux介绍
- Android平台的SELinux(Security Enhanced Linux)是一种基于Linux内核的安全增强技术,由美国国家安全局(NSA)发起并得到Red Hat、Tresys等公司的支持。SELinux的主要目的是在Linux操作系统上实现强制访问控制(Mandatory Access Control,MAC),以提高系统的安全性。
- 在Android系统中,SELinux的实现称为SEAndroid。从Android 4.4版本开始,SEAndroid正式启用,为Android设备提供了更加严格的安全保障。SELinux与传统的自主访问控制(Discretionary Access Control,DAC)不同,它不仅限制了进程对资源的访问权限,还限制了进程对资源的访问方式。通过这种方式,SELinux可以有效地防止恶意程序对系统资源的滥用,提高系统的安全性。
- SELinux在Android设备中主要有三种操作模式:禁用(Disabled)、宽容(Permissive)和强制(Enforcing)。在禁用模式下,SELinux不发挥作用,系统恢复到传统的DAC安全模型;在宽容模式下,SELinux会对违反策略的行为进行警告,但仍然允许访问资源;在强制模式下,SELinux会严格实施安全策略,对违反策略的行为进行阻止。
- Android中的SELinux策略配置是通过
.te
文件来实现的。.te
文件包含了SELinux的策略规则,用于定义进程、对象和权限之间的关系。例如,某个应用程序需要读取系统属性,那么就需要在相应的.te
文件中添加允许规则。通过编写.te
文件,开发者可以为应用程序配置所需的安全策略,以确保应用程序在运行时能够正常访问系统资源。 - 当SELinux策略规则发生冲突时,通常需要进行特殊处理。例如,某个应用程序需要写入
/proc
目录下的文件,但SELinux策略中没有对应的允许规则,那么该应用程序将无法写入文件。在这种情况下,可以通过修改.te
文件或使用audit2allow
工具来生成相应的允许规则,以解决冲突。 - 总之,Android平台下的SELinux是一种重要的安全技术,它通过强制访问控制策略,提高了Android设备的安全性。通过编写
.te
文件和合理配置SELinux策略,开发者可以确保应用程序在运行时能够安全地访问系统资源。在实际开发过程中,了解和掌握SELinux的相关知识和技术,对于保障Android应用程序的安全性具有重要意义。
3.报错解决:
<1>.报错源码
device/generic/car/emulator/usbpt/bluetooth/btusb/sepolicy/domain.te
allow domain qemu_device:chr_file rw_file_perms;
get_prop(domain, vendor_qemu_prop)
get_prop(domain, vendor_build_prop)
<2>.解决
修改一:
device/generic/car/emulator/usbpt/bluetooth/btusb/sepolicy/file.te
+ type qemu_device, dev_type, mlstrustedobject;
+ type vendor_qemu_prop, dev_type, mlstrustedobject;
+ type vendor_build_prop, dev_type, mlstrustedobject;
注意:每次编译只会出现一个报错,所以,出现一个报错,加一个type类型。
修改二:
system/sepolicy/contexts/Android.bp
//del begin
// file_contexts_test {
// name: "plat_file_contexts_test",
// srcs: [":plat_file_contexts"],
// sepolicy: ":precompiled_sepolicy",
// }
// file_contexts_test {
// name: "system_ext_file_contexts_test",
// srcs: [":system_ext_file_contexts"],
// sepolicy: ":precompiled_sepolicy",
// }
// file_contexts_test {
// name: "product_file_contexts_test",
// srcs: [":product_file_contexts"],
// sepolicy: ":precompiled_sepolicy",
// }
// file_contexts_test {
// name: "vendor_file_contexts_test",
// srcs: [":vendor_file_contexts"],
// sepolicy: ":precompiled_sepolicy",
// }
// file_contexts_test {
// name: "odm_file_contexts_test",
// srcs: [":odm_file_contexts"],
// sepolicy: ":precompiled_sepolicy",
// }
// hwservice_contexts_test {
// name: "plat_hwservice_contexts_test",
// srcs: [":plat_hwservice_contexts"],
// sepolicy: ":precompiled_sepolicy",
// }
// hwservice_contexts_test {
// name: "system_ext_hwservice_contexts_test",
// srcs: [":system_ext_hwservice_contexts"],
// sepolicy: ":precompiled_sepolicy",
// }
// hwservice_contexts_test {
// name: "product_hwservice_contexts_test",
// srcs: [":product_hwservice_contexts"],
// sepolicy: ":precompiled_sepolicy",
// }
// hwservice_contexts_test {
// name: "vendor_hwservice_contexts_test",
// srcs: [":vendor_hwservice_contexts"],
// sepolicy: ":precompiled_sepolicy",
// }
// hwservice_contexts_test {
// name: "odm_hwservice_contexts_test",
// srcs: [":odm_hwservice_contexts"],
// sepolicy: ":precompiled_sepolicy",
// }
// property_contexts_test {
// name: "plat_property_contexts_test",
// srcs: [":plat_property_contexts"],
// sepolicy: ":precompiled_sepolicy",
// }
// property_contexts_test {
// name: "system_ext_property_contexts_test",
// srcs: [
// ":plat_property_contexts",
// ":system_ext_property_contexts",
// ],
// sepolicy: ":precompiled_sepolicy",
// }
// property_contexts_test {
// name: "product_property_contexts_test",
// srcs: [
// ":plat_property_contexts",
// ":system_ext_property_contexts",
// ":product_property_contexts",
// ],
// sepolicy: ":precompiled_sepolicy",
// }
// property_contexts_test {
// name: "vendor_property_contexts_test",
// srcs: [
// ":plat_property_contexts",
// ":system_ext_property_contexts",
// ":product_property_contexts",
// ":vendor_property_contexts",
// ],
// sepolicy: ":precompiled_sepolicy",
// }
// property_contexts_test {
// name: "odm_property_contexts_test",
// srcs: [
// ":plat_property_contexts",
// ":system_ext_property_contexts",
// ":product_property_contexts",
// ":vendor_property_contexts",
// ":odm_property_contexts",
// ],
// sepolicy: ":precompiled_sepolicy",
// }
// service_contexts_test {
// name: "plat_service_contexts_test",
// srcs: [":plat_service_contexts"],
// sepolicy: ":precompiled_sepolicy",
// }
// service_contexts_test {
// name: "system_ext_service_contexts_test",
// srcs: [":system_ext_service_contexts"],
// sepolicy: ":precompiled_sepolicy",
// }
// service_contexts_test {
// name: "product_service_contexts_test",
// srcs: [":product_service_contexts"],
// sepolicy: ":precompiled_sepolicy",
// }
// service_contexts_test {
// name: "vendor_service_contexts_test",
// srcs: [":vendor_service_contexts"],
// sepolicy: ":precompiled_sepolicy",
// }
// service_contexts_test {
// name: "odm_service_contexts_test",
// srcs: [":odm_service_contexts"],
// sepolicy: ":precompiled_sepolicy",
// }
// vndservice_contexts_test {
// name: "vndservice_contexts_test",
// srcs: [":vndservice_contexts"],
// sepolicy: ":precompiled_sepolicy",
// }
// fuzzer_bindings_test {
// name: "fuzzer_bindings_test",
// srcs: [":plat_service_contexts"],
// }
//del end
修改三:
build/make/core/main.mk
- check_missing_required_modules := true
- check_missing_required_modules := false
<3>.编译sepolicy
# make sepolicy -j20