selinux 权限分析添加

##SELinux 拥有三个基本的操作模式
Disabled:禁用SELinux策略
Permissive:在Permissive模式下,SELINUX有效,但是即使你违反了策略,它让你继续操作,但是把你的
违反的内容记录下来。在我们开发策略的时候非常的有用。相当于Debug模式。
Enforcing:当你违反了策略,你就无法继续操作下去。

setenforce 0 命令进入permissive模式
setenforce 1 命令进入Enforcing模式

##类型强制(TE)访问控制
在SELinux中,所有访问都必须明确授权,SELinux默认不允许任何访问,不管Linux用户/组ID是什么。
这就意味着在SELinux中,没有默认的超级用户了,与标准Linux 中的root不一样,通过指定主体类型
(即域)和客体类型使用allow规则授予访问权限,allow规则由四部分组成:
源类型(Source type(s) ) 通常是尝试访问的进程的域类型
目标类型(Target type(s) ) 被进程访问的客体的类型
客体类别(Object class(es)) 指定允许访问的客体的类型
许可(Permission(s)) 象征目标类型允许源类型访问客体类型的访问种类

Type 命令:
type type_id [alias alias_id,] [attribute_id] #
将type_id(别名为alias)关联到attribute. 这样的话,方便用attribute来管理不同的type中包含相同的属性的部分。
type alias{ aa , bb , cc } XX , YY ;

Type init, domain; //将init关联到domain,即将domain设置为init类型的属性

type httpd_user_content_t, file_type, httpdcontent;
声明一个httpd_user_content_t的类型,具有file_type和httpdcontent的属性

type httpd_user_content_t;
typeattribute httpd_user_content_t file_type, httpdcontent;
声明一个httpd_user_content_t的类型
定义httpd_user_content_t具有file_type, httpdcontent的属性

class命令:
class class_name [ inherits common_name ] { permission_name … }
inherits表示继承了common定义的权限,然后自己额外实现了permission_name的权限;

Allow:赋予某项权限。
allow appdomain anr_data_file:dir search;
allow appdomain anr_data_file:file { open append };
允许app去对anr_data_file类型的目录进行查找的操作

Allow:赋予某项权限。
Allowaudit:audit含义就是记录某项操作。默认情况下是SELinux只记录那些权限检查失败的操作。allowaudit则使得权限检查成功的操作也被记录。注意,allowaudit只是允许记录,它和赋予权限没关系。赋予权限必须且只能使用allow语句。
dontaudit:对那些权限检查失败的操作不做记录。
neverallow:用来检查安全策略文件中是否有违反该项规则的allow语句

1.在misc/data/ 目录下创建如下路径
mkdir /data/misc/test 0755 cameraserver cameraserver

  1. 定义test 类型文件件域 sepolicy/file_contexts
    /data/misc/test/(/.*)? u:object_r:camera_test_file:s0

  2. camera_test_file声明为data_file_type:
    在文件common/sepolicy/file.te中添加定义的类型。
    type camera_test_file, file_type, data_file_type;

4.添加需要访问的进程 权限类型。sepolicy/目录下很多.te文件都是以进程名来结尾的。
common/sepolicy/cameraserver.te
添加cameraserver 进程访问权限。
allow cameraserver camera_test_file:dir { search open read write add_name create};
allow cameraserver camera_test_file:file { getattr open read write create};

#camera module
在android中,只定义了一个user即为u. 另外,如果是进程的话,都会统一定义为r,如果是文件的话,会被定义为object_r. 第三个是这个进程type,在andorid里面,定义了100多个type.按照目前我的理解,这个是进程所属的>类型。第四个是s0,这个是一 个安全的等级。但是暂时还没有接触到配置这个的地方。
Sharkle camera device 域定义如下:
/dev/sprd_sensor u:object_r:camera_device:s0
/dev/sprd_rotation u:object_r:camera_device:s0
/dev/sprd_isp u:object_r:camera_device:s0
/dev/sprd_scale u:object_r:camera_device:s0
/dev/sprd_image u:object_r:camera_device:s0
/dev/sprd_cpp u:object_r:camera_device:s0

添加cameraserver 进程读camera devices 读取权限节点
allow cameraserver camera_device:dir search;
allow cameraserver camera_device:fifo_file {open read write create };
allow cameraserver camera_device:file {open read write create };

LOG信息:
avc: denied { 操作权限 } for pid=7201 comm=“进程名” scontext=u:r:源类型:s0 tcontext=u:r:目标类型:s0 tclass=访问类别 permissive=0
修改步骤:找相应的“源类型.te ”文件

例如:
14:01:59.136 2825 2825 E SELinux : avc: denied { find } for service=display pid=3015 uid=1046 scontext=u:r:mediacodec:s0 tcontext=u:object_r:display_service:s0 tclass=service_manager permissive=0
14:01:59.136 2825 2825 I auditd : avc: denied { find } for service=display pid=3015 uid=1046 scontext=u:r:mediacodec:s0 tcontext=u:object_r:display_service:s0 tclass=service_manager permissive=0

   从上方的Log中可以看出这个问题是因为mediacodec的sepolicy权限没有添加完善所致。具体的操作权限从Log中可以看到是find权限,Source上下文是mediacodec,Target上下文是display_service,Target类是service_manager。解决方法就是在te文件中为mediacodec添加上缺失的find权限。添加权限的格式为

allow SourceContext TargetContext:TargetClass Permission 
 在mediacodec.te文件中按上述格式添加上以下语句:

allow mediacodec display_service:service_manager find

在这里插入图片描述

1 确认是哪个进程访问哪个资源,具体需要哪些访问权限,read ? write ? exec ? create ? search ?

2 当前进程是否已经创建了policy 文件? 通常是process 的执行档.te,如果没有,并且它的父进程即source context 无须访问对应的资源,则创建新的te 文件.Google 要求维护关键 security context 的唯一性, 比如严禁zygote, netd, installd, vold, ueventd 等关键process 与其它process 共享同一个security context.

3 创建文件后,关联它的执行档,在file_contexts 中, 关联相关的执行档.

比如 /system/bin/idmap 则是 /system/bin/idmap u:object_r:idmap_exec:s0

4 填写policy 到相关的te 文件中
如果沿用原来父进程的te 文件,则直接添加.
如果是新的文件,那么首先:Type Declaration
然后添加权限。

new policy

allow idmap resource_cache_data_file:dir rw_dir_perms;
allow idmap resource_cache_data_file:file create_file_perms;
修改编译的问题。
Make –j8

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值