访问文件的SELinux权限添加 | 您所在的位置:网站首页 › linux读写权限怎么开启 › 访问文件的SELinux权限添加 |
最近做了一个功能:设备首次驻网时,在设备指定目录创建文件,并在此文件中写入当前的时间,然后通过暗码可以读取这个时间 这个功能挺简单的,唯一比较麻烦的是添加SELinux权限时的一些问题,在此记录一下。 首先通过rc文件创建一个目录 init.rc mkdir /data/vendor/time_code 0771 radio radio然后设备首次驻网时在此目录下创建txt文件,"/data/vendor/time_code/time_code.txt",此时SELinux权限问题就来了,如下所示: 上述的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/,此时发现编不过, 解决方案是修改我们要访问的文件的标签名vendor_data_file,如何修改呢?我们要访问的目录是/data/vendor/time_code/,先看一下这个目录的信息 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/ 首先ls -Z看看/data/vendor/time_code/的信息,可以看到,标签名已经被修改 |
CopyRight 2018-2019 实验室设备网 版权所有 |