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

如果是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

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