从android5.0开始,强制开启了SELinux,对系统属性的访问权限也由selinux进行限制。
SELinux非常繁杂,8.0开始的Treble Project后,为了实现system、vendor分区的隔离,selinux的机制变的更加繁琐。本文不打算全面讲解android上selinux,通过概览全貌和常见案例分析,让大家在"不求甚解"的情况下,能够处理系统定制中80%的selinux权限问题。
1.SELinux的基本介绍
框架:Kernel中,SELinux通过Linux Security Modules实现。
kernel/fs/read_write.c:
int rw_verify_area(int read_write, struct file *file, const loff_t *ppos, size_t count)
{
......
/* 基础权限检查 */
if (unlikely(!access_ok(VERIFY_READ, buf, count)))
return -EFAULT;
......
/* selinux权限检查 */
retval = security_file_permission(file,
read_write == READ ? MAY_READ : MAY_WRITE);
......
}
语法:rule_name source_type target_type : class perm_set
allow system