SElinux 使用和配置

之前这篇文章AOSP安全策略SElinux_android以及问题排查思路过于繁琐。因此直接来个相对实用的。

一、SElinux 规则修改

    SDK 中已经配置有一套合理的 SElinux policy。在 SDK 开发过程中,可以根据需要,编辑规则文件,增加自定义规则。
1.查看违反规则的方法
dmesg | grep avc #或者在串口 log 中查找关键字 denied,即可看到有违反规则的行为。
2.生成规则
  • 自动生成规则:使用 linux 工具 audit2allow 可以将违反规则的 avc 记录生成放行规则 (适合于 dmesg 所有输出,初期的开发阶段)。

  • 手动生成规则: 比如违反 avc 记录如下:

type=1400 audit(1386760471.880:7): avc: denied { entrypoint } for pid=1227 comm=“init” path=“/sbin/healthd” dev=“rootfs” ino=4396 scontext=u:r:healthd:s0 tcontext=u:object_r:rootfs:s0 tclass=file

关键字对应的属性名:

scontext_name: healthd tcontext_name: rootfs tclass_type: file rules: entrypoint

放行公式:

allow scontext_name tcontext_name:tclass_type rules;

生成 rule 如下:

allow healthd rootfs:file entrypoint;
3.添加规则
  • 编辑 device/{vendor-name}/common/sepolicy 目录下面 TE 格式文件,添加 Step 2 中生成的 rule 到以 scontext_name 命名的 TE 文件。

  • 重新编译 Android 就可以生成新的 SElinux policy 固件。

  • 如在编译过程出现类似如下错误,说明添加的规则和 system/sepolicy 设置的规则冲突。

neverallow on line 269 of system/sepolicy/domain.te (or line 5193 of policy.conf)
violated by allow platform_app unlabeled:dir { create };
4.解决规则冲突
    system/sepolicy 定义通用规则,如果出现 device 规则与其冲突的问题,即 system/sepolicy定义 neverallow 规则,但是 device 规则又要允许访问。这种情况初学者本能的认为需要在system/sepolicy 中的 neverallow 中增加例外规则,如下实例。
    实际上这种做法不妥,在添加 selinux 规则的时候尽量不要违背 system/sepolicy 的 neverallow, system/sepolicy 的neverallow 都是 google 工程师经过深思熟虑设置的规则检验关卡,违背了其规则,证明添加的device 规则不合理。这种情况下一般是没有为 scontext 或者 tcontext 定制化标签导致的,请检查 avc 报错中是否有 default 或者 unlabel 字样。  
neverallow all_untrusted_apps {
  hwservice_manager_type
  -same_process_hwservice
  -coredomain_hwservice
  -hal_configstore_ISurfaceFlingerConfigs
  -hal_graphics_allocator_hwservice
  -hal_omx_hwservice
  -untrusted_app_visible_hwservice
  #相应加一条?
}:hwservice_manager find;

二、添加 sepolicy 示例

下面举例说明如何为 Android 的二进制程序 pz制定 sepolicy 规则,相关规则见

device/{vendor-name}/common/sepolicy/pz.te
  1. type pz domain,domain_deprecated;为 pz进程定义专属 type pz,关联属性 domain。

  2. type pz_exec,exec_type,file_type;为 pz 的二进制文件定义 type pz_exec。

  3. init_daemon_domain(pz);进行进程的 domain transition,当 init 进程 fork 并执行pz_exec 标签对应的可执行文件 pz 时,进程的 domain 转为 pz。

  4. 在对 pz 进行 sepolicy 的策略配置时,发现 pz 会创建文件夹/dev/com.koushikdutta.superuser.daemon 和 sock:/dev/com.koushikdutta.superuser.daemon/server 用于通信。因此需要对这两个对象打上自定义标签,防止发生 neverallow 规则冲突。

    • type pz_daemon_device,dev_type 在 device.te 中定义 pz_daemon_device 用于给文件夹打标签。

    • type pz_socket,file_type,mlstrustedobject; 在 pz.te 中定义 pz_sock 用于给 server打标签。

    • file_type_auto_trans(pz,device,pz_daemon_device); 当 pz 在/dev(context: device)目录下创建文件夹 com.koushikdutta.superuser.daemon 时,给该文件夹打上qw_daemon_device 标签。

    • file_type_atuo_trans(pz,pz_daemon_device,qw_socket); 当 pz 在/dev/com.koushikdutta.superuser.daemon/(context:qw_daemon_device) 下创建文件 server 时,给server 打上 qw_socket 标签。

  5. 接下来编译出固件,根据 dmesg 中的一些 avc 报错添加一些 allow 规则,反复编译几次即可。

按照以上规则不出意外的话就可将 pz 的相关 sepolicy 配置起来。但事与愿违,在添加策略进行验证时,发现一些规则,如: allow pz pz_socket:sock_file create_file_perms;。这些规则添加后:

  • 没有编译出错

  • 没有 neverallow 冲突

  • 成功编译进 policy.conf

但是在验证时,仍然报出相关的 avc denied。经过一番查找,发现该规则需要相应的 mls 权限才可以被授予对应权限。 mls 中:

mlsconstrain{sock_file} {write setattr...}(t2==app_data_file or l1 eq l2 or t1 == mlstrustedsubject or t2 == mlstrustedobject)

简单起见,在定义 pz 时,加上 type qw,domain,domain_deprecated,mlstrustedsubject.注: mlstrustedsubject 和 mlstrustedobject 在 mls 权限控制中拥有至高无上的权利。

三、SElinux 中的特殊符号

  1. te 文件每行末尾以分号 “;” 结束

  2. contexts 文件每行末尾没有分号 “;”

  3. 通配符• *:对应集合内的所有内容。• -:表示集合 A 内去除某项内容 b• ~:表示 ~ 后元素所在集合去除 ~ 后元素剩余的子集

注意:想要在深入了解的请移步至AOSP安全策略SElinux_android以及问题排查思路

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,036评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,046评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,411评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,622评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,661评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,521评论 1 304
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,288评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,200评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,644评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,837评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,953评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,673评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,281评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,889评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,011评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,119评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,901评论 2 355

推荐阅读更多精彩内容