SEAndroid安全机制(二)

前一篇文章介绍了SEAndroid安全机制的框架,以及代码中各个文件的作用,接下来总结下遇到SEAndroid问题的解决办法。

1. 问题判定
  • 可能出现需要SEAndroid权限的情况:内核节点信息的操作,进程间数据的操作等
  • 通过adb shell setenforce 0 将SELinux系统置为permissive状态:处于该状态下,如果主体的操作违反了策略,还能继续执行,但是系统会把违反的策略记录下来。这种状态相当于debug模式。
  • 在log中搜索关键字"avc: denied ",探查违反的策略记录信息。
2. 实例分析

遇到log如下:

    01-01 08:03:22.410000   217   217 W applypatch: type=1400 audit(0.0:16): avc: denied { read } for name="mmcblk0p15" dev="tmpfs" ino=3364 scontext=u:r:install_recovery:s0 tcontext=u:object_r:block_device:s0 tclass=blk_file permissive=0  
  • 报错含义:主体install_recovery对客体类型为block_device的blk_file没有read权限。
  • 一般情况下,找到install_recovery.te文件,添加allow语句:allow install_recovery block_device : blk_file read;
  • 添加之后编译发现报错提示:neverallow ..... 原来在domain.te文件中有代码如下:

    neverallow { domain -kernel -init -recovery -vold -uncrypt -emsd -rild -radio_config} block_device:blk_file { open read write };  

其含义是:domain中除了 -kernel -init -recovery -vold -uncrypt -emsd -rild -radio_config这几个域对该文件类型有读写权限,其他都不允许。

  • 继续在domain.te文件中寻找关于install_recovery相关的信息,发现如下:
neverallow { domain -install_recovery -recovery } recovery_block_device:blk_file write;

install_recovery拥有对recovery_block_device:blk_file 的读取权限。

  • 在device.te文件中可以看到:
type recovery_block_device, dev_type;
type block_device, dev_type;

block_device 和 recovery_block_device具有同样的属性值dev_type。

  • 再看file_contexts,看下文件安全上下文:
    /dev/block(/.*)?    u:object_r:block_device:s0  

定义的dev/block下面的文件都是block_device,而recover_block_device是没有定义的。我们可以定义我们要操作的文件为recover_block_device类型。

  • 最后我们只要在install_recovery.te中加入下面权限就可以了。
    allow install_recovery recover_block_device:blk_file { open read write };  
3.常用命令说明
  • getenforce 和 setenforce

getenforce 用于返回系统当前是处于enforcing状态还是permissive状态
setenforce用于切换系统的enforcing状态和permissive状态

permissive状态:处于该状态下,如果主体执行的操作违反了安全策略,还能继续执行,但是系统会把违反的策略记录下来。相当于debug模式。
enforcing状态:如果主体执行的操作违反了策略,将不能继续操作。

  • chcon命令
    chcon命令用于改变文件或者目录的安全上下文。

chcon dev_type abc.txt

这个例子将abc的安全上下文设置为dev_type。

  • restorecon命令
    用于恢复文件或者目录的安全上下文为系统原始设置。

  • chown命令
    用于配置文件或目录的用户和用户组信息。

chown system system dev/data..

参考链接:

http://www.jianshu.com/p/e67107e39c98
http://blog.csdn.net/luoshengyang/article/details/37749383

你可能感兴趣的:(SEAndroid安全机制(二))