Android SElinux 权限

有关添加Android SElinux 权限------proc 文件系统 sys文件系统

    • 一,SElinux是什么,如何分析此类问题
    • 二,添加selinux权限--基于高通平台演示
      • 1,基于proc下出现selinux权限问题
      • 2,基于sys下出现selinux权限问题
    • 三,实际log分析

温馨提示
此文章参考[Android L]SEAndroid开放设备文件结点权限(读或写)方法(涵盖常用操作:sys/xxx、proc/xxx、SystemProperties)热门干货。有不对的地方请各位指出。

一,SElinux是什么,如何分析此类问题

  1. 定义:SELinux(Security-Enhanced Linux)是由美国国家安全局(NSA)开发的一种强制访问控制机制。它主要整合在 Linux 内核当中,是针对特定的进程与指定的文件资源进行权限控制的系统。主要是增强传统 Linux 操作系统的安全性,并解决传统 Linux 系统中自主访问控制(DAC)系统中的各种权限问题(如 root 权限过高等)。
  2. 分析此类问题:selinux三种状态 强制模式 宽容模式 关闭模式
    Enforcing:强制模式。代表SELinux在运行中,且已经开始限制domain/type之间的验证关系
    Permissive:宽容模式。代表SELinux在运行中,不过不会限制domain/type之间的验证关系,即使验证不正确,进程仍可以对文件进行操作。不过如果验证不正 确会发出警告。
    Disabled:关闭模式。SELinux并没有实际运行

基本命令: setenforce 1/0 1 开启强制模式 setenforce 0 宽容模式 getenforce 获取当前selinux状态
如出现应用层等访问设备节点时出现无法打开时,使用指令setenforce 0 时,能够正常使用。可能出现此问题。

或者logcat 获取log时出现 : type=1400 audit(0.0:59): avc: denied { write } for name=“xxxx” dev=“proc” ino=4026532642 scontext=u:r:vendor_init:s0 tcontext=u:object_r:sysfs_proc:s0 tclass=file permissive=0 时,则为selinux权限问题。

二,添加selinux权限–基于高通平台演示

1,基于proc下出现selinux权限问题

第一步 在device/qcom/sepolicy/vendor/common/file.te 定义selinux type: proc_xxxx,如下:
type proc_xxxx, fs_type;

第二步 device/qcom/sepolicy/vendor/common/genfs_contexts,绑定proc_xxxx到对应的实际节点
genfscon proc /touchscreen/glove u:object_r:proc_xxxx:s0

第三步 device/qcom/sepolicy/vendor/common/system_app.te,申请权限system_app的权限
allow system_app proc_xxxx:file rw_file_perms;

2,基于sys下出现selinux权限问题

第一步 在device/qcom/sepolicy/vendor/common/file.te 定义selinux type: proc_xxxx,如下:
type sys_xxxx, fs_type;

第二步 device/qcom/sepolicy/vendor/common/file_contexts,绑定sys_到对应的实际节点。 sys/bus/i2c/devices/xxxx/xxx u:object_r:sys_xxxx:s0

第三步 device/qcom/sepolicy/vendor/common/system_app.te,申请权限system_app的权限
allow system_app sys_xxxx:file rw_file_perms;

注:绑定时,需要给予实际路径,可以去find 查找一下具体实际路径。

三,实际log分析

LOG: type=1400 audit(0.0:59): avc: denied { write } for name=“xxxx” dev=“proc” ino=4026532642 scontext=u:r:vendor_init:s0 tcontext=u:object_r:sysfs_proc:s0 tclass=file permissive=0

denied { write } :需要添加写权限。 name=“xxxx” 节点名称为xxxx dev=“proc” 属于proc文件系统

scontext=u:r:vendor_init 需要添加vendor_init文件内权限(对此文件下去添加权限)

tcontext=u:object_r:sysfs_proc:s0 file定义的名称为 sysfs_proc。 tclass=file 类型为file

按照上述log,去vendor_init 文件添加 allow vendor_init:file write

添加完成之后,权限权限已经添加。

你可能感兴趣的:(android,linux)