Open Harmony 安全隐私module.json5 中的 Ability 暴露控制与权限边界 ️前言 在 OpenHarmony / HarmonyOS 项目中module.json5不是一个“随便生成的配置文件”。它决定了模块类型、入口 Ability、页面路径、扩展 Ability、启动图标、启动背景以及 Ability 是否对外暴露。当前项目的安全隐私切入点不是复杂权限系统而是 Ability 暴露边界。也就是说哪些能力可以被系统或外部拉起哪些能力只应该留在应用内部。本文基于当前项目真实的module.json5分析其中和安全隐私相关的配置。module.json5 的核心结构 当前项目的模块配置大致如下{module: {name:entry,type:entry,mainElement:EntryAbility,deviceTypes: [phone],deliveryWithInstall:true,installationFree:false,pages:$profile:main_pages,abilities: [ {name:EntryAbility,srcEntry:./ets/entryability/EntryAbility.ets,exported:true} ],extensionAbilities: [ {name:EntryBackupAbility,type:backup,exported:false} ] } }这份配置可以拆成两部分看普通 AbilityEntryAbility扩展 AbilityEntryBackupAbility它们的exported配置不同背后体现的是不同的能力边界。EntryAbility 为什么是 exported: true项目中EntryAbility的配置如下{name:EntryAbility,srcEntry:./ets/entryability/EntryAbility.ets,description:$string:EntryAbility_desc,icon:$media:layered_image,label:$string:EntryAbility_label,startWindowIcon:$media:startIcon,startWindowBackground:$color:start_window_background,exported:true,skills: [ {entities: [entity.system.home],actions: [ohos.want.action.home] } ] }这里exported: true是合理的因为它是应用主入口并且通过skills声明了桌面启动能力。关键配置是entities: [entity.system.home],actions: [ohos.want.action.home]这表示该 Ability 可以作为应用首页入口被系统识别。用户点击桌面图标时就会进入这个 Ability。从安全角度看主入口可以暴露但入口内部仍然应该做好页面跳转、登录状态、数据访问等控制。exported: true不代表所有业务能力都可以无边界开放。EntryBackupAbility 为什么是 exported: false备份扩展的配置如下{name:EntryBackupAbility,srcEntry:./ets/entrybackupability/EntryBackupAbility.ets,type:backup,exported:false,metadata: [ {name:ohos.extension.backup,resource:$profile:backup_config} ] }这里exported: false很重要。备份恢复能力可能涉及应用内部数据。如果随意暴露会扩大攻击面也会让能力边界变得模糊。当前项目将备份扩展设置为不导出是比较稳妥的配置。这也体现了安全隐私设计中的一个基本原则只暴露必须暴露的能力。metadata 的作用 备份扩展还绑定了 metadatametadata: [ {name:ohos.extension.backup,resource:$profile:backup_config} ]它指向{allowToBackupRestore:true}这说明当前应用允许备份恢复。但注意允许备份恢复和开放扩展入口不是一回事。当前项目一方面允许系统备份恢复流程识别该能力另一方面通过exported: false控制外部暴露边界。这个组合比较适合写安全隐私文章因为它不是口号而是具体配置。配置文件中的安全检查清单 ✅基于当前项目可以总结出一份检查清单主入口 Ability 是否确实需要exported: true非主入口 Ability 是否默认关闭外部暴露扩展 Ability 是否按照能力类型进行精确配置metadata 是否指向正确资源skills是否只声明必要的启动动作后续增加权限时是否做到最小权限原则当前项目暂时没有复杂权限申请所以不要把文章写成“已经实现精细化权限管控”。更真实的说法是当前项目从 Ability 暴露边界开始具备安全隐私治理的基础。与页面代码的关系 module.json5负责入口和能力声明页面文件负责 UI。当前首页是EntryComponentstruct Index {Statemessage: string Hello World;build() {RelativeContainer() {Text(this.message) }.height(100%).width(100%) } }这段页面代码本身没有权限访问行为也没有敏感数据处理。因此安全重点并不在页面而在 Ability 配置和扩展能力边界。写技术文章时把配置层和页面层分清楚会比泛泛而谈“安全隐私”更有说服力。总结 这篇文章对应“四大主题”中的安全隐私。当前项目可以真实支撑的内容包括EntryAbility作为主入口设置exported: true。通过skills声明桌面启动入口。EntryBackupAbility作为备份扩展设置exported: false。通过 metadata 绑定备份配置。安全隐私不是只有权限弹窗。对 OpenHarmony 应用来说Ability 是否暴露、扩展能力是否收口、配置文件是否准确同样是安全设计的重要组成部分。当前项目虽然简单但这部分基础是扎实的。参考资料HarmonyOS 官方文档模块配置文件HarmonyOS 官方文档Ability 与 ExtensionAbility 配置当前项目文件module.json5、EntryAbility.ets、EntryBackupAbility.ets