文章参考 Android 9.0 源码,以翻译为主,留做备用参考。
Sepolicy 工具位于 system/sepolicy/tools/

build_policies.sh

为多个目标并行构建SELinux策略的工具。这对于在多个目标上快速闫增新的测试或Neveralow规则很有用。

用法:

./build_policies.sh ~/android/master ~/tmp/build_policies
./build_policies.sh ~/android/master ~/tmp/build_policies sailfish-eng walleye-eng

checkfc

用于检查 file_contexts 或 property_contexts 配置文件有效性的工具。policy build 过程中包含以上两个文件的验证。检查 file_contexts 或 property_contexts 文件中安全上下文的有效性时,需要使用 sepolicy 文件作为参数。

用法1:

checkfc sepolicy file_contexts
checkfc -p sepolicy property_context

也可以用于比较两个 file_contexts 或 file_contexts.bin 文件。输出结果显示为 subset、equal、superset或incomparable 其中之一.

用法2:

checkfc -c file_contexts1 file_contexts2
举例:
$checkfc-c out/target/product/shamu/system/etc/general_file_contexts out/target/product/shamu/root/file_contexts.bin
subset

checkseapp

用于合并主 seapp_contexts 配置和特定设备配置的工具,同时检查配置的有效性。被用作 policy build 过程的一部分,用来合并和验证配置。

用法:

checkseapp -p sepolicy input_seapp_contexts0 [input_seapp_contexts1...] -o seapp_contexts

insertkeys.py

一个辅助脚本,用于将 mac_permissions.xml 中签名段的标记映射到 pem 文件中的公钥。这个脚本将在sepolicy/README中进一步描述。

post_process_mac_perms

该工具用于帮助修改现有的 MaqPyExist.xml,添加当前策略中不存在的附加的应用程序证书。该工具在搜索应用程序目录,并将这些应用程序中的证书添加到尚未显式列出的策略时非常有用。

用法:

post_process_mac_perms [-h] -s SEINFO -d DIR -f POLICY

-s SEINFO, --seinfo SEINFO seinfo tag for each generated stanza
-d DIR, --dir DIR Directory to search for apks
-f POLICY, --file POLICY mac_permissions.xml policy file

sepolicy-check

该工具用于审核 sepolicy 文件中任何赋予权限的允许规则。

用法:

sepolicy-check -s <domain> -t <type> -c <class> -p <permission> -P out/target/product/<board>/root/sepolicy

sepolicy-analyze

用于对 sepolicy 文件执行各种分析的组件化工具。当前支持的分析类型包括:

TYPE EQUIVALENCE (typecmp)

sepolicy-analyze out/target/product/<board>/root/sepolicy typecmp -e

显示"equivalent"的所有类型对,即它们的允许规则相同,包括通过属性的间接允许规则和默认启用的条件规则(即默认布尔值生成的真正条件表达式)。

等价类型是合并为单个类型的备选。但是,可能有正当理由使它们保持独立,例如:

  • 类型可能在当前分析中以外方面不同,例如默认禁用的条件规则、审核相关规则(auditallow或dontaudit)、默认类型转换或约束(例如mls)。
  • 当前策略可能对于一个或另一个类型过于宽松,因此正确的操作可能是加强对一个或另一个类型的访问,而不是将它们合并在一起。
  • 实际上对这些类型具有不同访问权限的域可能尚未定义,或者可能未在您分析的策略中定义。

TYPE DIFFERENCE (typecmp)

sepolicy-analyze out/target/product/<board>/root/sepolicy typecmp -d

显示不同的类型对,以及在两种类型之间发现的第一个差异。这可用于查找不相同,但可以作为合并备选的相似类型。

DUPLICATE ALLOW RULES (dups)

sepolicy-analyze out/target/product/<board>/root/sepolicy dups

显示重复的允许规则,即授予相同权限的允许规则对,其中一个允许规则直接依据独立类型写入,另一个则依据相同类型关联的属性写入。具有独立类型的规则是要删除的候选规则。具有独立类型的规则可以在源策略中直接表示,也可以是类型否定扩展的结果(例如,策略编译器将域'-foo' '-bar'扩展为独立允许规则)。具有unconfineddomain的域通常会有重复的规则,如自然的副作用,并且可以忽略。

PERMISSIVE DOMAINS (permissive)

sepolicy-analyze out/target/product/<board>/root/sepolicy permissive

显示策略中允许的域,即avc拒绝被记录,但不对这些域强制。虽然允许域在开发过程中会有帮助,但它们不应该出现在最终用户版本中。

BOOLEANS (booleans)

sepolicy-analyze out/target/product/<board>/root/sepolicy booleans

显示策略中的布尔名称(如果有)。Android策略中禁止使用布尔值,因此如果有任何输出,该策略将使CTS失败。

ATTRIBUTE (attribute)

sepolicy-analyze out/target/product/<board>/root/sepolicy attribute <name>

显示与指定属性名关联的类型。

sepolicy-analyze out/target/product/<board>/root/sepolicy attribute -r <name>

显示与指定类型名关联的属性。

sepolicy-analyze out/target/product/<board>/root/sepolicy attribute -l

显示策略中的所有属性。

NEVERALLOW CHECKING (neverallow)

sepolicy-analyze out/target/product/<board>/root/sepolicy neverallow [-w] [-d] [-f neverallows.conf] | [-n "neverallow string"]

检查 sepolicy 文件是否违反 neveralow.conf 文件或指定字符串的 neveralow 规则,字符串应包含与 SELinux policy.conf 文件格式相同的 neveralow 语句,即在从 .te 文件中对规则进行 m4 宏扩展之后。您可以使用整个 policy.conf 文件作为 neverallows.conf 文件,sepolicy analyze 将忽略除其中的 neverallows 之外的所有内容。还可以将其指定为命令行字符串参数,这对于快速检查单个展开的规则或规则组很有用。如果没有违反,sepolicy-analyze 将成功退出,没有输出。否则,sepolicy-analyze 将报告所有违规行为,并以非零退出状态退出。

'-w'或'--warn'选项可用于警告 neveralow 规则中无法在 sepolicy 文件中解析的任何types、attributes、classes 或 permissions。这可能是正常的,因为从中获取 neverallow 规则的策略与正在检查的策略之间存在差异。这些值将被忽略,以供以后进行检查。

'-d'或'--debug'选项可用于使 sepolicy analyze 在解析 neveralow 规则时输出这些规则。这主要是解析器的一个调试工具,但也可以用于从完整的 policy.conf 文件中提取 neverallow 规则,并以更容易解析的格式输出它们。


戈壁老王
143 声望64 粉丝

做为一个不称职的老年码农,一直疏忽整理笔记,开博记录一下,用来丰富老年生活,