selinux

selinux相关命令

// 0--代表Permissive
// 1--代表Enforcing
setenforce 0

// 查看selinux开关状态
getenforce

// 查看进程的sContext
ps -Z

// 查看文件权限
ls -Z

如果设置成permissive mode 后问题依旧,说明还有其他的权限问题约束,否则就是SELinux 方面的问题

抓取SELinux Log

  • adb shell dmesg
    抓kernel log,使用命令:
adb shell "cat /proc/kmsg | grep avc" > avc_log.txt 

可以直接提出avc的log

  • adb logcat –b events
    搜索关键字:avc: denied

selinux源码及内容

selinux权限在一些contexts及te文件中配置

contexts文件

contexts是权限的上下文,有如下contexts

file_contexts //系统中所有file_contexts安全上下文
seapp_contexts //app安全上下文
property_contexts //属性的安全上下文
service_contexts    //service文件安全上下文
genfs_contexts //虚拟文件系统安全上下文

service_contexts定义

oem_lock                                  u:object_r:oem_lock_service:s0

seapp_contexts有些不同,单独说明。列说明如下:

  • oem_lock:系统中具体资源,如服务名、设备名、文件目录等
  • u: selinux中唯一的用户
  • object_r:描述资源类型。r为进程资源,object_r非进程资源
  • oem_lock_service:资源在权限规则中所属代表
  • s0:selinux中权限级别,一般使用s0

te文件

te文件定义权限规则,不同资源可以定义各自的te文件
在这里插入图片描述
te文件内容,示例

allow priv_app surfaceflinger_service:service_manager find;
allow priv_app app_api_service:service_manager find;
allow priv_app system_api_service:service_manager find;
allow priv_app persistent_data_block_service:service_manager find;

te文件内容的语法规则

rule_name  source_type  target_type : class perm_set

rule_name:赋予权限的规则,包含allow、dontaudit、auditallow、neverallow,命令不可以随意添加。
source_type:访问target_type的主体或主体集合(域),可自定义
target_type:接受主体访问的客体或客体集合(域),可自定义
class:客体资源类型,不同的资源类型具有不同访问权限,可自定义、可继承
perm_set:客体予以主体的权限说明。是class中具有的权限的子集

source_type、target_type使用type、typeattribute、attribute定义。
attribute定义一个代表具有某种相中属性的集合(即域)。

attribute dev_type;

type定义代表一个或一类资源类型,并分配至不同属性(域)中。

# 定义一个类型,属于dev_type属性
type ttyMT_device, dev_type; 

以上定义可以拆分为两部分

# 仅定义一个类型
type ttyMT_device;
# 仅把ttyMT_device类型关联到dev_type属性
typeattribute ttyMT_device dev_type;

属性间使用逗号,一个类型可以关联至多个属性

type oem_lock_service, system_api_service, system_server_service, service_manager_type;

class字段使用comm和class定义,comm定义的class可以被class定义的对象继承。

common file {
	ioctl read write create getattr setattr lock relabelfrom relabelto
	append unlink link rename execute swapon quotaon mounton
}

class类型继承comm类型

class dir
inherits file
{
	add_name
	remove_name
	reparent
	search
	rmdir
	open
	audit_access
	execmod
}

contexts和te文件间的关系

以oem_lock为例,如下图:

// frameworks\base\core\java\android\content\Context.java
    /**
     * Use with {@link #getSystemService} to retrieve a {@link
     * android.service.oemlock.OemLockManager} instance for managing the OEM lock.
     *
     * @see #getSystemService
     * @see android.service.oemlock.OemLockManager
     * @hide
     */
    @SystemApi
    public static final String OEM_LOCK_SERVICE = "oem_lock";
在这里插入代码片

定义oem_lock权限:
涉及文件

---- oem_lock_service Matches (3 in 3 files) ----
priv_app.te (F:\Android\source_code\android-8.0.0_r1\system\sepolicy\private) line 34 : allow priv_app oem_lock_service:service_manager find;
service.te (F:\Android\source_code\android-8.0.0_r1\system\sepolicy\public) line 100 : type oem_lock_service, system_api_service, system_server_service, service_manager_type;
service_contexts (F:\Android\source_code\android-8.0.0_r1\system\sepolicy\private) line 108 : oem_lock

service_contexts定义

oem_lock                                  u:object_r:oem_lock_service:s0

service.te中定义

type oem_lock_service, system_api_service, system_server_service, service_manager_type;

priv_app.te中定义

allow priv_app oem_lock_service:service_manager find;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值