最近做了一个功能:设备首次驻网时,在设备指定目录创建文件,并在此文件中写入当前的时间,然后通过暗码可以读取这个时间 这个功能挺简单的,唯一比较麻烦的是添加SELinux权限时的一些问题,在此记录一下。 首先通过rc文件创建一个目录 然后设备首次驻网时在此目录下创建txt文件,”/data/vendor/time_code/time_code.txt”,此时SELinux权限问题就来了,如下所示: 上述的SELinux报的权限并不全,通常SELinux打开时不会一次性打印出所有缺少权限,可以先将SELinux关闭,在通过adb logcat或者adb shell dmesg打印全部缺少权限 SELinux报错的标准格式是: 添加规则是,在源类型.te文件中添加 : 例如上图报出的log: 我们就应该在radio.te中添加:allow radio vendor_data_file:file { read }; 添加SELinux权限的一个原则就是报出来什么,添加什么,上述log中缺少权限并没有报全,最终添加全部缺少权限如下: 添加好了之后进行编译,mmma system/sepolicy/,此时发现编不过, 解决方案是修改我们要访问的文件的标签名vendor_data_file,如何修改呢?我们要访问的目录是/data/vendor/time_code/,先看一下这个目录的信息 file_contexts中添加如下语句: 标签就被修改为了tct_time_data_file,然后再修改radio.te中的目标类型 再进行编译,mmma system/sepolicy/ 首先ls -Z看看/data/vendor/time_code/的信息,可以看到,标签名已经被修改init.rc
mkdir /data/vendor/time_code 0771 radio radio
ps:如何确认是 SELinux 问题?可以关闭 SELinux(adb shell setenforce 0),确认相关功能是否 ok,如果 ok 是 SELinux 问题,如果nok,说明本身程序有问题 avc: denied { 操作权限 } for pid=26382 comm=“进程名” scontext=u:r:源类型:s0 tcontext=u:r:目标类型:s0 tclass=访问类型 permissive=0
allow 源类型 目标类型:访问类型 {操作权限};
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=0allow 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;
这是因为我们添加的SELinux权限违反了google的neverallow规则,google不允许名为radio源类型访问标签名为vendor_data_file的目标类型,
需要修改的标签属于文件类型,另外还有属性类型和程序类型,对于文件类型标签的修改就是自定义一个新的标签,在file.te中定义,在file_contexts中使用,
file.te中添加如下语句:type tct_time_data_file, file_type, data_file_type, mlstrustedobject;
/data/vendor/time_code(/.*)? u:object_r:tct_time_data_file:s0
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;
编译成功后push进手机验证,
adb push out/target/product/dubaivzw/vendor/etc/selinux/ /vendor/etc/
并且log中没有再报SELinux权限的问题,/data/vendor/time_code/time_code.txt文件也成功创建了,此文件中也成功写入了当前驻网时间:
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算