Android系统应用没有读写权限普通应用有权限

type=1400 audit(0.0:21): avc: denied { read write } for name="ttyUSB0" dev="tmpfs" ino=61137 scontext=u:r:system_app:s0 tcontext=u:object_r:device:s0 tclass=chr_file permissive=0

 

一、异常情况(普通应用可读写,系统应用没有权限):

安卓应用读写一个自己外包驱动的动态挂载的USB转串口设备,读写句柄位置为 /dev/ttyUSB0

  • 普通应用可以直接读写/dev/ttyUSB0
  • 系统应用加上就不行,不加就可以。
android:sharedUserId="android.uid.system"

显示没有读写/dev/ttyUSB0的权限

二、异常提示日志:

Can't Open Serial Port /dev/ttyUSB0:Permission denied

type=1400 audit(0.0:21): avc: denied { read write } for name="ttyUSB0" dev="tmpfs" ino=61137 scontext=u:r:system_app:s0 tcontext=u:object_r:device:s0 tclass=chr_file permissive=0

三、异常分析:(肯定是系统权限分配问题导致)

  1. 普通应用有读写权限,系统应用没有读写权限,颠覆我的认知
  2. 要不就是/dev/ttyUSB0这个句柄位置没有权限,用chmod解决
  3. 要不就是andriod selinux权限问题 ,这个不懂,学习

四、解决问题过程

方案一:chmod修改文件挂载权限

修改文件 device/qcom/common/rootdir/etc/init.qcom.rc

    chmod 0666 /dev/ttyUSB0
    chmod 0666 /dev/ttyUSB1
    chmod 0666 /dev/ttyUSB2
    chown  system system /dev/ttyUSB0
    chown  system system /dev/ttyUSB1
    chown  system system /dev/ttyUSB2

结果:此方案没有用。

方案二:andriod selinux

因为是system应用没有权限,所有修改system_app.te

至于为什么改这个,自学android selinux

修改 /device/qcom/sepolicy/msm8953/system_app.te

新增
allow system_app selinuxfs:file read;
allow system_app device:chr_file { read open write ioctl };

结果:成功了。

四、关于如何修改 andriod selinux

我认为有用资料

参考Android selinux权限修改

如何写:

格式:

allow 源类型 目标类型:访问类型 操作权限;    

内容来源:

allow scontext tcontext: tclass { denied }

结果:

allow system_app device:chr_file { read open write ioctl };

个人总结的如何写SELinux(看图)

Android selinux

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值