搜索

430

主题

515

帖子

2134

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2134
QQ
发表于 2020-8-18 20:55:59 7083 浏览 0 回复

MTK android 如何设置确认selinux 模式?

[Description]
linux SELinux 分成Enforce 以及 Permissive 两种模式,如何进行设置与确认当前SELinux模式?

[Solution]
在Android KK 4.4 版本后,Google 有正式有限制的启用SELinux, 来增强android 的安全保护。

在ENG 版本中, 可以使用setenforce 命令进行设置:
(USERDEBUG版本中需要先执行adb root命令获取root权限)
  1. adb shell setenforce 0    //设置成permissive 模式
  2. adb shell setenforce 1    //设置成enforce 模式
复制代码
在ENG/USER 版本中,都可以使用getenforce 命令进行查询,如:
  1. root@mt6589_phone_720pv2:/ # getenforce
  2. getenforce
  3. Enforcing
复制代码
如果想开机一启动就设置模式,你可以用下面方式:
  1. KK 版本:更新mediatek/custom/{platform}/lk/rules_platform.mk
  2. L  版本: 更新bootable/bootloader/lk/platform/mt6xxx/rules.mk
  3. M/N/O 版本: 更新vendor/mediatek/proprietary/bootable/bootloader/lk/platform/mt6XXX/rules.mk
  4. # choose one of following value -> 1: disabled/ 2: permissive /3: enforcing
  5. SELINUX_STATUS := 3
复制代码
可直接调整这个SELINUX_STATUS这个的值为2, 严禁直接设置成1:disabled, 此会造成生成的文件无法正确的打上标签,造成在再次设置成enforcing时,难以预料的情况发生。

注意的是:
在L 版本后, Google 要求强制性开启enforcing mode, 前面的设置只针对userdebug, eng 版本有效, 如果要对user 版本有效,
需要修改system/core/init/Android.mk
如果是L 版本 新增:
ifeq ($(strip $(TARGET_BUILD_VARIANT)),user)
LOCAL_CFLAGS += -DALLOW_DISABLE_SELINUX=1
endif

如果是在M 版本 将:
ifneq (,$(filter userdebug eng,$(TARGET_BUILD_VARIANT)))
init_options += -DALLOW_LOCAL_PROP_OVERRIDE=1 -DALLOW_DISABLE_SELINUX=1
init_options += -DINIT_ENG_BUILD
else

修改成:
ifneq (,$(filter user userdebug eng,$(TARGET_BUILD_VARIANT)))
init_options += -DALLOW_LOCAL_PROP_OVERRIDE=1 -DALLOW_DISABLE_SELINUX=1
init_options += -DINIT_ENG_BUILD
else

N/O 版本上宏ALLOW_DISABLE_SELINUX 被Google 用 ALLOW_PERMISSIVE_SELINUX 替换了, 即 N 版本后已经禁止直接关闭掉selinux, 只能设定成permissive , 否则将直接无法开机.

另外前面的处理方式比较文雅, 不涉及代码修改, 附加 N/O 版本最快速暴力设定 permissive mode 的手法.
  1. /system/core/init/init.cpp
  2. static bool selinux_is_enforcing(void)
  3. {
  4.     return false; //force set selinux permissive.
  5.     if (ALLOW_PERMISSIVE_SELINUX) {
  6.         return selinux_status_from_cmdline() == SELINUX_ENFORCING;
  7.     }
  8.     return true;
  9. }
  10. P0:
  11. /system/core/init/selinux.cpp
  12. bool IsEnforcing() {
  13. return false; //force set selinux permissive.
  14. if (ALLOW_PERMISSIVE_SELINUX) {
  15. return StatusFromCmdline() == SELINUX_ENFORCING;
  16. }
  17. return true;
  18. }
复制代码
R0 之后的 user load,
还需要在 alps/kernel-x.xx/arch/armxx/configs/xxxx_defconfig (比如:alps/kernel-4.14/arch/arm64/configs/k69v1_64_tee_cts_defconfig,注意:不是 xxxx_debug_defconfig)中,
配置:
CONFIG_SECURITY_SELINUX_DEVELOP=y


需要注意的是, Google 要求强制性开启SELinux Enforcing Mode, 如果您关闭,将无法通过Google CTS.


手机微信同号:13682654092
回复

使用道具 举报

返回列表
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


登录或注册
快速回复 返回顶部 返回列表