Android selinux策略文件怎么编译与加载


本文小编为大家详细介绍“Androidselinux策略文件怎么编译与加载”,内容详细,步骤清晰,细节处理妥当,希望这篇“Androidselinux策略文件怎么编译与加载”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。编译selinuxmake sepolicy -j48 或 make selinux_policy -j48把生成的文件 outtargetproductXXXXobjETCvendor_sepolicy.cil_intermediatesvendor_sepolicy.cil push(outtargetproductXXXXvendoretcselinuxvendor_sepolicy.cil)到 /vendor/etc/selinux 目录下注:当前以规则文件 vendor_sepolicy.cil 为例。备份后删除/od免费云主机域名m/etc/selinux/precompiled_sepolicy文件重启手机后生效编译selinuxmake selinux_policy -j48make编译大约 3~17分钟 如果make编译过了,可使用ninja编译,不到一分钟就可以编译完成time prebuilts/build-tools/linux-x86/bin/ninja -f out/combined-XXXX.ninja -j48 selinux_policytime prebuilts/build-tools/linux-x86/bin/ninja -f out/combined-XXXX.ninja -j48 sepolicy.recovery备份/odm/etc/selinux/precompiled_sepolicy文件把生成的文件outtargetproductkleinodmetcselinuxprecompiled_sepolicy,push到/odm/etc/selinux/目录下重启手机后生效注:App上下文seapp_contexts,文件上下文 file_contexts ,属性上下文 property_contexts 的修改生效方法,见文末手机启动后,进入加载selinux政策流程,会使用/odm/etc/selinux/目录下的两个sha256文件中的值分别同/system/etc/selinux,/product/etc/selinux 目录的sha256文件中的值对比,如果都相等,则加载/odm/etc/selinux/目录下的/odm/etc/selinux/precompiled_sepolicy 预编译的selinux二进制政策文件。如果不同,则使用/system/etc/selinux 和 /vendor/etc/selinux 等目录下的文件重新编译 selinux二进制政策文件,然后加载新的 sepolicy 文件。system/core/init/main.cpp—> selinux.cpp —> int SetupSelinux(char** argv)—> SelinuxInitialize();—> LoadPolicy()—> LoadSplitPolicy()—> FindPrecompiledSplitPolicy(std::string* file) // 关键函数开机启动时会加载selinux政策。main.cpp 中调用 selinux.cpp 中的 int SetupSelinux(char** argv) 函数,SetupSelinux 调用SelinuxInitialize(),SelinuxInitialize() 调用 LoadPolicy() 函数LoadPolicy 方法中会判断 /system/etc/selinux/plat_sepolicy.cil 文件是否存在,存在调用LoadSplitPolicy,不存在调用LoadMonolithicPolicy方法从根目录/sepolicy(此路径在 /external/selinux/libselinux/src/android/android_platform.c sepolicy_file变量写死)下加载selinux政策(这是以前的版本)【根据此处代码逻辑,make sepolicy 后,把生成的文件outtargetproductkleinrootsepolicy,push到根目录下,顺便删除/system/etc/selinux/plat_sepolicy.cil 文件应该也可以使新的selinux政策生效(经测试无法push到根目录:Read-only file system)】/external/selinux/libselinux/src/android/android_platform.cLoadSplitPolicy() 方法use_userdebug_policy 由环境变量 INIT_FORCE_DEBUGGABLE 决定,使用adb shell命令 echo $INIT_FORCE_DEBUGGABLE 查看此变量为空,所以 use_userdebug_policy == false代码进入 FindPrecompiledSplitPolicy方法.FindPrecompiledSplitPolicy 此方法主要工作:/odm/etc/selinux/precompiled_sepolicy.plat_sepolicy_and_mapping.sha256/system/etc/selinux/plat_sepolicy_and_mapping.sha256对比两个文件中的sha值/odm/etc/selinux/precompiled_sepolicy.product_sepolicy_and_mapping.sha256/product/etc/selinux/product_sepolicy_and_mapping.sha256并且对比这两个文件中的sha值如果这两对文件中的值一致,FindPrecompiledSplitPolicy返回true,不一致返回false。如果/odm/etc/selinux/目录下没有precompiled_sepolicy文件,则会去/vendor/etc/selinux/目录下找相关的mapping.sha256去和system product 中的文件对比,(我们的手机没有/vendor/etc/selinux/precompiled_sepolicy文件)如果/vendor/etc/selinux/目录下也没有precompiled_sepolicy文件,则FindPrecompiledSplitPolicy返回 false。如果FindPrecompiledSplitPolicy返回true,加载预编译的政策FindPrecompiledSplitPolicy返回false,则重新编译selinux政策,完成后加载新政策【由此,可推测,修改/odm/etc/selinux/precompiled_sepolicy.plat_sepolicy_and_mapping.sha256文件中的值,或,修改/odm/etc/selinux/precompiled_sepolicy.product_sepolicy_and_mapping.sha256的值或,修改/system/etc/selinux/plat_sepolicy_and_mapping.sha256的值或,修改/product/etc/selinux/product_sepolicy_and_mapping.sha256的值或,删除/odm/etc/selinux/precompiled_sepolicy文件都能引起重启后,重新编译新的sepolicy文件,使新的selinux政策生效】删除/system/etc/selinux/plat_sepolicy.cil 文件,make sepolicy 后,把生成的文件outtargetproductkleinrootsepolicy,push到根目录下 【无法push:Read-only file system】make selinux_policy 后,把生成的文件outtargetproductkleinodmetcselinuxprecompiled_sepolicy,push到/odm/etc/selinux/目录下 【已验证】make selinux_policy 后,把生成的文件outtargetproductkleinodmetcselinuxprecompiled_sepolicy,push到/vendor/etc/selinux/目录下,复制/odm/etc/selinux/目录下的两个sha文件到/vendor/etc/selinux/目录 【未验证】删除或修改/odm/etc/selinux/precompiled_sepolicy.plat_sepolicy_and_mapping.sha256 【已验证 删除方式】删除或修改/odm/etc/selinux/precompiled_sepolicy.product_sepolicy_and_mapping.sha256 【未验证】删除或修改**/system/etc/selinux/plat_sepolicy_and_mapping.sha256** 【已验证 修改方式】删除或修改/product/etc/selinux/product_sepolicy_and_mapping.sha256 【已验证 删除方式】删除/odm/etc/selinux/precompiled_sepolicy文件 【已验证】开机时重新编译的sepolicy文件,会编译一个临时文件/dev/sepolicy.XXXXXX,新的selinux生效后,此文件会被删除。当前测试发现:开机时编译sepolicy文件会导致开机时间变长,并且每次开机都编译一次。有没有其他副作用?暂时未发现。1970-01-01 11:56:20.738 0-0/? I/SELinux: Initializing. 1970-01-01 11:56:31.265 0-0/? I/init: Loading SELinux policy 1970-01-01 11:56:31.271 0-0/? I/init: Compiling SELinux policy // log中出现此日志表明在编译新的selinux,selinux将会生效 1970-01-01 11:56:32.034 0-0/? I/init: Loading compiled SELinux policy1970-01-01 11:56:32.255 0-0/? I/SELinux: policy capability network_peer_controls=1 1970-01-01 11:56:32.255 0-0/? I/SELinux: policy capability open_perms=1 1970-01-01 11:56:32.255 0-0/? I/SELinux: policy capability extended_socket_class=1 1970-01-01 11:56:32.255 0-0/? I/SELinux: policy capability always_check_network=0 1970-01-01 11:56:32.255 0-0/? I/SELinux: policy capability cgroup_seclabel=0 1970-01-01 11:56:32.255 0-0/? I/SELinux: policy capability nnp_nosuid_transition=1 1970-01-01 11:56:32.461 0-0/? I/selinux: SELinux: Loaded policy from /dev/sepolicy.ys2KNm // 新的selinux生效,如果没有编译新的selinux,此处加载的是/odm/etc/selinux/precompiled_sepolicy 1970-01-01 11:56:32.467 0-0/? W/selinux: SELinux: Skipping /product/etc/selinux/product_file_contexts: empty file 1970-01-01 11:56:32.467 0-0/? I/selinux: SELinux: Loaded file_contexts 1970-01-01 11:56:32.524 0-0/? W/selinux: SELinux: Skipping /product/etc/selinux/product_file_contexts: empty file 1970-01-01 11:56:32.524 0-0/? I/selinux: SELinux: Loaded file_contextsApp的上下文 seapp_contexts 文件,可以直接修改,push手机上。重启后生效。属性的上下文 property_contexts 文件, 可以直接修改,push手机上。重启后生效。服务的上下文 service_contexts 文件,可以直接修改,push手机上。重启后生效。虚拟文件上下文 genfs_contexts 文件,通过chcon命令进行修改讲下文件上下文 file_contexts 文件的修改与测试。restorecon 命令可使文件上下文selinux政策生效。 restorecon -Rchcon : 随意修改某个文件(夹)的selinux lable。Ex: chcon u:object_r:system_data_file:s0 /data/apprestorecon : 依照sepolicy Rule中定义的规则,重新relable指定的文件(夹)。修改 /system/bin/toybox 上下文示例:把junkserver的上下文修改为 shell_exec首先修改 /system/etc/selinux/plat_file_contexts 文件内容把 /system/bin/toybox u:object_r:toolbox_exec:s0修改为: /system/bin/toybox u:object_r:shell_exec:s0进入手机shell 执行以下命令可以看到文件上下文生效了chcon读到这里,这篇“Androidselinux策略文件怎么编译与加载”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注百云主机行业资讯频道。

相关推荐: 怎么用css设置行间距

本文小编为大家详细介绍“怎么用css设置行间距”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么用css设置行间距”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1、使用数值来设置行间距,是拥有标准行高的段落。 默认行高大约是1。 …

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 05/20 10:33
下一篇 05/20 10:33

相关推荐