Chinaunix首页 | 论坛 | 博客
  • 博客访问: 194225
  • 博文数量: 47
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 470
  • 用 户 组: 普通用户
  • 注册时间: 2014-06-18 12:09
个人简介

be a happy lazy and fat cat

文章分类
文章存档

2017年(1)

2016年(5)

2015年(22)

2014年(19)

我的朋友

分类: Android平台

2015-02-05 16:54:10

android 在4.3之后引入了基于selinux的安全机制,称为SEAndroid.在此之前,android使用的主要分为两个方面:应用程序和内核两个级别
应用程序就是通常所说的Permission,一个应用若想访问某个资源或者得到某个权限,需要在AndroidMannifest.xml配置申请,在安装的时候由用户来决定

内核级别就是传统的linux UID/GID,一个用户或者文件就是根据uid gid来进行rwx等操作。

最近在工作中,公司要基于aosp的SeAndroid上定制公司自己的安全策略文件,所以对此做了一些学习。边学边用,在此记录,方便以后阅读。

adb logcat|grep avc

如果设备启用了selinux,可以通过上面的方法看到log

android目前代码里面涉及到的地方主要有

  • external/libselinux
  • external/libsepol(和上面一样是,不集成到设备上)
  • external/checkpolicy(.te检查,编译时调用)
  • external/sepolicy(这个SE for Android特有的部分,里面包含各种策略模块(*.te文件)

编译完成后会生成一个二进制的策略文件,运行时发现某个文件如果没有相应的权限就会执行一些操作

启用方法

device/xx/baytrail/device_name$ vim BoardConfig.mk
# SELinux Policy
BOARD_SEPOLICY_DIRS := device/xx/common/sepolicy
BOARD_SEPOLICY_REPLACE := \
    domain.te

device/xx/common/sepolicy$ ls
adbd.te       domain.te      genfs_contexts  init.te       mediaserver.te       property_contexts  service_contexts  surfaceflinger.te  ueventd.te        wpa.te
bluetooth.te  drmserver.te   gpsd.te         kernel.te     netd.te              property.te        service.te        system_app.te      untrusted_app.te
coreu.te      file_contexts  hdcpd.te        keymaster.te  platform_app.te      pstore-clean.te    setup_fs.te       system_server.te   userfastboot.te
device.te     file.te        init_shell.te   keystore.te   power_hal_helper.te  recovery.te        shell.te          thermal.te         vold.te

最重要的是.te文件的编写。


根据SELinux规范,完整的allow相关的语句格式为:

rule_name source_type target_type : class perm_set

下面这条SELinux语句表示 允许(allow )netd域(domain)中的进程  ”写(write)“ 

 类型为proc的文件

avc:  denied  { getattr } for  pid=1840 comm="userfastboot" path="/dev/block/mmcblk0p10" dev="tmpfs" ino=10720 sconte" path="/dev/block/mmcblk0p10" dev="tmpfs" ino=10720 scontext=u:r:userfastboot:s0 tcontext=u:object_r:frp_block_device:s0 tclass=blk_file permissive=1
上面这个是我最近调试userfastboot时遇到的问题,只需要添加如下allow 在userfastboot.te文件就可以解决了。
allow userfastboot frp_block_device:blk_file getattr;
从这个allow 可以看到怎么根据错误来改写相关的te规则。userfastboot是从scontext中获得。frp_block_device从tcontext获得 blk_file是从tclass获得 getattr是要执行的操作
再此只做简单记录,内部详细调用,不敢写的太详细,怕被查水表,虽然水表已经在外面了


阅读(2688) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~