访问文件的SELinux权限添加
标签: SELinux
最近做了一个功能:设备首次驻网时,在设备指定目录创建文件,并在此文件中写入当前的时间,然后通过暗码可以读取这个时间
这个功能挺简单的,唯一比较麻烦的是添加SELinux权限时的一些问题,在此记录一下。
首先通过rc文件创建一个目录
init.rc
mkdir /data/vendor/time_code 0771 radio radio
然后设备首次驻网时在此目录下创建txt文件,"/data/vendor/time_code/time_code.txt",此时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文件也成功创建了,此文件中也成功写入了当前驻网时间:

智能推荐
Linux下的访问控制权限文件的权限管理
知识简介 Linux系统根据用户对文件的权限将系统中的所有用户分为:所有者,同组用户,其他用户三类;并为这三类用户分别设定所需的文件操作权限。 ——用户分类: “ u ”:——文件拥有者 “ g ”:——文件属组(文件归属的群组) “ o ”:&mdash...
Linux 的文件访问权限及修改权限命令 chmod
Linux的文件访问权限可以使用ls -l进行查看,如下图这样操作就可以了。 一、访问权限 访问权限分为读(read)、写(write)、执行(execute)三种, 并且涉及到文件所有者(user)、文件所属组(group)、其他人(other)三个主体。 选取上图红框中的两行为例,结合下面的表格先讲一下基本结构: 第一位表示文件类型 第二~十位表示权限:每三位一组,共三组,分别表...
centOS 权限问题-selinux小结:
注:本文图片来自鸟哥私房菜基础篇第四版截图, 在centOS7.x中经常遇到给足权限,但是进程依旧提示权限不够的问题,前几天用rsyslog管理远程日志的时候就是这样,后来发现在cenOS7.x后系统还有一个selinux的进程在对进程读取文件的过程做权限监管,selinux是什么呢? [百度百科解释:]SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对...
Linux 给普通用户赋予sudo 权限
进入root 用户模式 输入密码进入root 先更改权限让sudoers文件可以写 然后修改sudoers文件 给hadoop 赋予sudo 权限 如图 保存退出 然后解除sudoers 可以被写的权限 从root 用户退出 OK啦...
猜你喜欢
每日一道算法题:20201014-环形链表
环形链表 前言 一、解决思路 1.快慢指针法 1,环很大 2,环很小 2.存放集合 二、实现代码 1.快慢指针法 2.存放集合 前言 给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。 说明:不允许修改给定的链表。 示例 1:...
【专题】Aho-Corasick automaton(AC自动机)精讲
Aho-Corasick automaton是什么? 要学会AC自动机,我们必须知道什么是Trie,也就是字典树。Trie树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。 首先我们要知道trie,而且要知道KMP,这样就可以学AC自动机了! 其实AC自动机就是trie和KMP的结合体。主...
C6748_UART_EDMA
通过EDMA来实现UART的收发,可以减轻CPU的负担。主函数如下: 函数中,注册了4号和5号CPU可屏蔽中断C674X_MASK_INT4和C674X_MASK_INT5的服务函数,分别为Edma3ComplHandlerIsr和Edma3CCErrHandlerIsr,然后将8号中断事件SYS_INT_EDMA3_0_CC0_INT1(EVT8)映射到C674X_MASK_INT4,将56号中...
单例设计模式之破坏
单例模式的另一篇博文 http://blog.csdn.net/nalanmingdian/article/details/77848079 单例设计模式应用场景 在某些情况下,系统只需要一个实例。比如,一个系统存在多个打印任务,但只能一个有一个正在工作的任务。在Windows系统中只能打开一个任务管理器。所以,有时确保某个对象的唯一性很有必要。它能减少系统的性能开销。 双重判断加锁及volati...
Ajax简介和使用
1.Ajax简介 Ajax (Asynchronous JavaScript and XML 阿贾克斯)不是一个新的技术,事实上,它是一些旧有的成熟的技术以一种全新的更加强大的方式整合在一起 Ajax之父Jesse James Garrett于2005年提出这一新概念 由于Google公司在Google地图、Google建议、Gmail等产品中对Ajax的成功运用,使得web浏览器的潜力被大大挖掘...
