SEAndroid实战用例

定制符合项目需求的安全策略
SELinux的安全检查覆盖了所有重要的系统资源,每次MAC访问失败都会记录在内核中,如下:
<6>[82.950769] type=1400 audit(1882976.149:5): avc: denied { write } for pid=3194 comm="BluetoothAdapte" name="aplog"
dev="mmcblk0p22" ino=88 scontext=u:r:bluetooth:s0 tcontext=u:object_r:system_data_file:s0 tclass=dir
上⾯的log记录了⼀条违反安全策略的访问信息,即BluetoothAdapte进程试图在data分区写⽬录失败。
scontext表示进程的SContext,u:r:bluetooth:s0,属于bluetooth域;
tcontext表示目标的SContext,u:r:system_data_file:s0,属于system_data_file类型;
tclass表示进程要操作的ObjectClass,dir表示目录;
mmcblk0p22是userdata分区,write表示写操作。 连起来就是bluetooth域的进程(BluetoothAdapte),对
system_data_file类型的dir执⾏write操作失败。明确了失败原因,我们就可以在安全策略配置文件中定制我们的策
略了: [system/sepolicy/bluetooth.te]
allow bluetooth system_data_file:dir w_dir_perms; 可以看到宏定义如下:[system/sepolicy/global_macros] define( w_dir_perms', { open search write add_name remove_name }')

为新的设备文件增加安全属性

在项目开发中,我们在/dev目录下建立了一个新的设备文件abcxx,这是一个音频相关的设备设件,但是在集成framework
层的代码后,总是出现下面的访问错误,应该如何处理呢?
<6>[12.435524] type=1400 audit(3635791.670:21): avc: denied { read write } for pid=273 comm="mediaserver" name="abc
xx" dev="tmpfs" ino=9770 scontext=u:r:mediaserver:s0 tcontext=u:object_r:device:s0 tclass=chr_file
首先,我们先看一下访问失败的原因:从log看,应该是mediaserver域的进程没有权限读写device类型的字符设备⽂件。那
么我们能不能在mediaserver.te中加⼊访问权限呢? 在domain.te中有如下定义: [system/sepolicy/domain.te]
neverallow { domain -unconfineddomain -ueventd } device:chr_file { open read write };
也就是说除了unconfineddomain和uevented域外,所有在domain域中的进程都不能对device类型的字符设备⽂件执⾏
open,read,write操作。
mediaserver也属于domain域,所以肯定不能通过添加策略来设置访问权限,怎么办呢? 在mediaserver.te中,我们发
现mediaserver域是可以对audio_device类型的字符设备执⾏读写的: [system/sepolicy/mediaserver.te]
allow mediaserver audio_device:chr_file rw_file_perms;
那么,能不能通过打标签的方法,把/dev/abcxx设置为audio_device类型呢?答案是肯定的。 在file_context中设
置/dev/abcxx的安全属性,问题解决了:

[system/sepolicy/file_context] 

/dev/abcxx  u:object_r:audio_device:s0

posted @ 2017-05-12 14:11  克林斯顿  阅读(761)  评论(0)    收藏  举报