如何设置确认selinux 模式

[Description]
linux SELinux 分成Enforce 以及 Permissive 两种模式,如何进行设置与确认当前SELinux模式?
 
[Keyword]
android, SELinux, Enforce, Permissive
 
[Solution]
在Android KK 4.4 版本后,Google 有正式有限制的启用SELinux, 来增强android 的安全保护。
在ENG 版本中, 可以使用setenforce 命令进行设置:
adb shell setenforce 0    //设置成permissive 模式
adb shell setenforce 1    //设置成enforce 模式
 
在ENG/USER 版本中,都可以使用getenforce 命令进行查询,如:
root@mt6589_phone_720pv2:/ # getenforce
getenforce
Enforcing
 
如果想开机一启动就设置模式,你可以用下面方式:
KK 版本:更新mediatek/custom/{platform}/lk/rules_platform.mk
L  版本: 更新bootable/bootloader/lk/platform/mt6xxx/rules.mk
# choose one of following value -> 1: disabled/ 2: permissive /3: enforcing
SELINUX_STATUS := 3
可直接调整这个SELINUX_STATUS这个的值为2, 严禁直接设置成1:disabled, 此会造成生成的文件无法正确的打上标签,造成在再次设置成enforcing时,难以预料的情况发生。
注意的是, 在 L 版本上, Google 要求强制性开启enforcing mode, 前面的设置只针对userdebug, eng 版本有效, 如果要对user 版本有效, 需要修改system/core/init/Android.mk 新增
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 的手法.

/system/core/init/init.cpp

static bool selinux_is_enforcing(void)
{
    return false; //force set selinux permissive.
    if (ALLOW_PERMISSIVE_SELINUX) {
        return selinux_status_from_cmdline() == SELINUX_ENFORCING;
    }
    return true;
}

 P0:

/system/core/init/selinux.cpp

bool IsEnforcing() {
 return false; //force set selinux permissive.
 if (ALLOW_PERMISSIVE_SELINUX) {
 return StatusFromCmdline() == SELINUX_ENFORCING;
 }
 return true;
}

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. 
 

[相关FAQ]
[FAQ11486] [SELinux Policy] 如何设置SELinux 策略规则 ? 在Kernel Log 中出现"avc: denied" 要如何处理
http://blog.csdn.net/lei1217/article/details/48377555
[FAQ11485] 权限(Permission denied)问题如何确认是Selinux 约束引起
http://blog.csdn.net/lei1217/article/details/48377575
[FAQ11483] 如何快速Debug SELinux Policy 问题
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值