访问文件的SELinux权限添加 您所在的位置:网站首页 linux读写权限怎么开启 访问文件的SELinux权限添加

访问文件的SELinux权限添加

2024-07-16 15:32| 来源: 网络整理| 查看: 265

最近做了一个功能:设备首次驻网时,在设备指定目录创建文件,并在此文件中写入当前的时间,然后通过暗码可以读取这个时间

这个功能挺简单的,唯一比较麻烦的是添加SELinux权限时的一些问题,在此记录一下。

首先通过rc文件创建一个目录

init.rc mkdir /data/vendor/time_code 0771 radio radio

然后设备首次驻网时在此目录下创建txt文件,"/data/vendor/time_code/time_code.txt",此时SELinux权限问题就来了,如下所示: SELinux权限拒绝 ps:如何确认是 SELinux 问题?可以关闭 SELinux(adb shell setenforce 0),确认相关功能是否 ok,如果 ok 是 SELinux 问题,如果nok,说明本身程序有问题

上述的SELinux报的权限并不全,通常SELinux打开时不会一次性打印出所有缺少权限,可以先将SELinux关闭,在通过adb logcat或者adb shell dmesg打印全部缺少权限

SELinux报错的标准格式是:

avc: denied { 操作权限 } for pid=26382 comm=“进程名” scontext=u:r:源类型:s0 tcontext=u:r:目标类型:s0 tclass=访问类型 permissive=0

添加规则是,在源类型.te文件中添加 :

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

例如上图报出的log: 05-11 16:39:13.249 1950 1950 W SharedPreferenc: type=1400 audit(0.0:99): avc: denied { read } for name=“time_code.txt” dev=“mmcblk0p65” ino=27156 scontext=u:r: radio:s0 tcontext=u:object_r:vendor_data_file:s0 tclass=file permissive=0

我们就应该在radio.te中添加:allow radio vendor_data_file:file { read };

添加SELinux权限的一个原则就是报出来什么,添加什么,上述log中缺少权限并没有报全,最终添加全部缺少权限如下:

allow radio vendor_data_file:dir rw_dir_perms; allow radio vendor_data_file:file { open write read create rw_file_perms setattr}; allow radio vendor_data_file:file rename; allow radio vendor_data_file:file unlink;

添加好了之后进行编译,mmma system/sepolicy/,此时发现编不过, 在这里插入图片描述 这是因为我们添加的SELinux权限违反了google的neverallow规则,google不允许名为radio源类型访问标签名为vendor_data_file的目标类型,

解决方案是修改我们要访问的文件的标签名vendor_data_file,如何修改呢?我们要访问的目录是/data/vendor/time_code/,先看一下这个目录的信息 在这里插入图片描述 需要修改的标签属于文件类型,另外还有属性类型和程序类型,对于文件类型标签的修改就是自定义一个新的标签,在file.te中定义,在file_contexts中使用, file.te中添加如下语句:

type tct_time_data_file, file_type, data_file_type, mlstrustedobject;

file_contexts中添加如下语句:

/data/vendor/time_code(/.*)? u:object_r:tct_time_data_file:s0

标签就被修改为了tct_time_data_file,然后再修改radio.te中的目标类型

allow radio tct_time_data_file:dir rw_dir_perms; allow radio tct_time_data_file:file { open write read create rw_file_perms setattr}; allow radio tct_time_data_file:file rename; allow radio tct_time_data_file:file unlink;

再进行编译,mmma system/sepolicy/ 在这里插入图片描述 编译成功后push进手机验证, adb push out/target/product/dubaivzw/vendor/etc/selinux/ /vendor/etc/

首先ls -Z看看/data/vendor/time_code/的信息,可以看到,标签名已经被修改 在这里插入图片描述 并且log中没有再报SELinux权限的问题,/data/vendor/time_code/time_code.txt文件也成功创建了,此文件中也成功写入了当前驻网时间: 在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有