Android-SeLinux安全策略

一、SeLinux简介

1.安全机制–DAC和MAC

DAC(Discretionary Access Control,翻译为自主访问控制)
DAC的核心思想:进程理论上所拥有的权限与执行它的用户的权限相同,比如,以root用户启动Browser,那么Browser就有root用户的权限,在Linux系统上能干任何事情。

MAC(Mandatory Access Control,翻译为强制访问控制)
MAC的核心思想:即任何进程想在SELinux系统中干任何事情,都必须先在安全策略配置文件中赋予权限。凡是没有出现在安全策略配置文件中的权限,进程就没有该权限。

MAC两个概念:主体(Subject)和客体(Object);主体指用户或者用户运行的进展,客体包括文件、目录、socket等系统资源,注:如果进程作为一种被访问的资源时,它也是一种客体。主体和客体都被设置了安全上下文,系统通过检查安全上下文来确认主体是否有权访问。

2.安全上下文

ls -Z命令查看文件的安全上下文,ps -Z命令查看进程的安全上下文
在这里插入图片描述
其中,u:object_r:vendor_file:s0就是文件的安全上下文
格式:USER:ROLE:TYPE:LEVEL
USER:指用户,有3种类型。(1)user_u:普通用户,权限受限制;(2)system_u:系统级进程;(3)root:root用户;
ROLE:指角色,不同的角色有不同的权限。文件、目录、socket等客体的角色一般是object_r,主体进程的角色一般是r。一个用户可以有多个角色,但是同一时间内只能使用一个。
TYPE:定义主体和客体所属的类型。
LEVEL:定义安全等级。

3.selinux模式

selinux模式:分强制模式和宽容模式

getenforce 获取系统当前SELinux运行模式
setenforce 0 临时设置运行模式为Permissive(宽容模式)
setenforce 1 临时设置运行模式为Enforcing(强制模式)

二、SeLinux策略文件

相关策略文件位于:system/sepolicy和device/amlogic/common/sepolicy
1、file_contexts:保存的是系统中所有文件的安全上下文。
2、property_contexts:保存的是系统中所有属性的安全上下文。
3、seapp_contexts:定义了用户、seinfo和域之间的关联,用于确认用户进程的安全上下文。
4、attributes:属性定义文件,文件中定义了所有需要用到的属性值。
5、类型强制规则文件(te)。
该类型文件都是以te结尾,它主要有类型定义和规则定义两部分组成。
以下为swtelnetd.te文件的内容:
在这里插入图片描述
swtelnetd.te中定义了两种类型:swtelentd和swtelentd_exec。swtelentd用在进程的安全上下文中,swtelentd_exec则用在文件的安全上下文中。

type swtelentd, domain;
无论是主体还是客体的类型定义,都是type语句完成的,语法如下:
type 类型名称 [,属性]
type语法中的属性值都是预定义好的,有特别的含义。如:domain表示域,通常主体的type具有domain属性,因此,我们把主体的type称为domain。file_type表示文件,通常用于表示客体的类型(type)。

其中还调用了init_daemon_domain宏,用来设置为init的守护域;init_daemon_domain 是 SELinux 中的一个特殊域,用于运行作为 init 进程的守护程序。这意味着 “swtelentd” 服务将在 init_daemon_domain 域中以守护进程的形式运行。
在这里插入图片描述
上面规则的含义是:
1>允许“swtelentd进程”对cache_file的软链接文件读和获取属性权限
2>允许“swtelentd进程”对cache_file的目录搜查权限
3>允许“swtelentd进程”对本身主体(self)的capability相关权限

语法:allow swtelnetd cache_file:lnk_file { read getattr };
allow 主体 客体类型:客体类别 {相应权限};
allow:表示允许主体对客体执行进行的操作。
neverallow:表示不允许主体对客体执行指定的操作

三、SeLinux相关问题

关键字:denied
logcat |grep “denied” 或者 dmesg | grep denied
1)添加STBManagerService的selinux权限
报错:
在这里插入图片描述
解决:

缺少什么权限: 缺少add 权限
谁缺少权限: scontext=u:r:system_server:s0
对哪个⽂件缺少权限: tcontext=u:object_r:default_android_service:s0
什么类型的⽂件: tclass=service_manager
最后输⼊的命令:
allow system_server default_android_services:service_manager { add };

2)添加特殊的seLinux权限
在这里插入图片描述

①这个问题我第一印象是加上这个
allow hal_hwswrootservice hal_hwswrootservice:udp_socket { ioctl };
②发现失败,还是会报这个错误,就发现有这个 ioctlcmd=0x8927 首先要查找这个ioctlcmd对应的定义,查找android/system/sepolicy/public/ioctl_defines中对应的ioctlcmd在ioctl_defines中的定义,
define(SIOCGIFHWADDR', 0x00008927')
③需要在对应的te中添加:
allowxperm hal_hwswrootservice self:udp_socket ioctl{SIOCGIFHWADDR};
allow hal_hwswrootservice self:udp_socket ioctl;
其中,self是主体hal_hwswrootservice的意思。

3)设置为宽容模式
system/core 目录下
在这里插入图片描述
bootloader/uboot-repo目录下
在这里插入图片描述
4)解决添加权限后编译报neverallowe问题
报错如下:
在这里插入图片描述
解决方法:
添加attribute标签属性定义绕过该报错。typeattribute给类型增加属性
system/sepolicy目录下
在这里插入图片描述
device/amlogic/common/sepolicy目录下
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值