关于adb push 文件到手机system分区后,文件SELinux标签不对的说明
时间:10-02
整理:3721RD
点击:
[Description]
关于adb push 文件到手机system 分区后,文件 SElinux 标签不对的说明
[Keyword]
adb, push, SELinux, 标签, Label
[android Version]
Version >= android 5.0
[Solution]
在android 5.0 后, 默认启用了Enforcing SELinux, 有很多同仁遇到, adb push 执行档到手机后,
发现执行档的SELinux 签名不对的情况. 导致经常出现如:
"[1:init]init: Warning! Service xxxx needs a SELinux domain defined; please fix!"
这样的LOG, 以及Service 因为缺少权限而无法正常执行的情况.
其关键的问题在于push 到手机后,对应的执行档 SElinux 签名变成了
u:object_r:system_file:s0, 而非正确的u:object_r:xxxx_exec:s0. 因为目前adbd 在处理push
event 时, 只有当你把路径写完整时, 它才会帮你重新打上正确的SELinux 标签,否则它就无法正
确的识别签名路径.
如:
错误的写法: adb push xxxx /system/bin
===> push 后,发现xxxx 的SELinux 签名与file_contexts 中描述不匹配, 会是默认的
u:object_r:system_file:s0
正确的写法: adb push xxxx /system/bin/xxxx
===> push 后,发现xxxx 的SELinux 签名和file_contexts 里面的描述匹配, 如果是service, 通
常会是u:object_r:xxxx_exec:s0
即我们强调push 时, 务必把路径写完整.
补救措施, 你可以强制性用restorecon -r -F /system/bin 强制性重新SELinux 签名.
关于adb push 文件到手机system 分区后,文件 SElinux 标签不对的说明
[Keyword]
adb, push, SELinux, 标签, Label
[android Version]
Version >= android 5.0
[Solution]
在android 5.0 后, 默认启用了Enforcing SELinux, 有很多同仁遇到, adb push 执行档到手机后,
发现执行档的SELinux 签名不对的情况. 导致经常出现如:
"[1:init]init: Warning! Service xxxx needs a SELinux domain defined; please fix!"
这样的LOG, 以及Service 因为缺少权限而无法正常执行的情况.
其关键的问题在于push 到手机后,对应的执行档 SElinux 签名变成了
u:object_r:system_file:s0, 而非正确的u:object_r:xxxx_exec:s0. 因为目前adbd 在处理push
event 时, 只有当你把路径写完整时, 它才会帮你重新打上正确的SELinux 标签,否则它就无法正
确的识别签名路径.
如:
错误的写法: adb push xxxx /system/bin
===> push 后,发现xxxx 的SELinux 签名与file_contexts 中描述不匹配, 会是默认的
u:object_r:system_file:s0
正确的写法: adb push xxxx /system/bin/xxxx
===> push 后,发现xxxx 的SELinux 签名和file_contexts 里面的描述匹配, 如果是service, 通
常会是u:object_r:xxxx_exec:s0
即我们强调push 时, 务必把路径写完整.
补救措施, 你可以强制性用restorecon -r -F /system/bin 强制性重新SELinux 签名.