授权是软件定义汽车 (SDV) 通信堆栈安全模型的一项关键必需组件。
如果授权处于 启用 状态,则仅当相应 权限允许访问时,系统才会授予访问权限。
如果授权处于 停用 状态,则无论 相应权限如何,系统都会授予访问权限。
SDV 授权强制执行是按虚拟机进行的,并且控制在本地虚拟机上执行的授权决策。鉴于 SDV 架构的分布式特性,我们建议在网状网络中的所有虚拟机之间同步授权强制执行配置。
SDV 授权强制执行适用于所有 SDV 平台:核心、IVI 和旧版 IVI。
用户 build
SDV 授权在用户 build 中强制执行,并且无法停用。
用于控制授权强制执行的属性会被忽略。
非用户 build
默认情况下,强制执行处于启用状态。
出于开发目的,您可能需要在非用户 build 中启用或停用强制执行。
系统属性
sdv.authz.enable 是一个系统属性,用于控制非用户 build 中的授权强制执行。
在运行时更改此属性可更改授权强制执行。使用 disabled 或 permissions_only:
(root) setprop sdv.authz.enable disabled
(root) setprop sdv.authz.enable permissions_only
此系统属性不是持久性的,因此在虚拟机重启后,授权强制执行会重置为默认值。
启动时系统属性
在运行时控制系统属性可能会在系统中引入竞态条件,因此务必在启动时控制授权,然后再启动任何代理和第三方服务。
ro.boot.sdv.authz.enable 是一个布尔值启动系统属性,用于
在 SDV 启动开始时设置 sdv.authz.enable 系统属性。
启动后,您仍然可以更改 sdv.authz.enable 系统属性,从而更改授权强制执行。
该系统属性并非在所有虚拟机中都是全局的,它仅影响特定虚拟机。 不过,权限是全局的。在某些虚拟机上启用该系统属性,而在其他虚拟机上停用该系统属性可能会导致强制执行拆分,即仅在某些虚拟机上执行强制执行。这可能会导致意外行为。
您可以使用
bootconfig 或内核 cmdline ro-boot-property 设置 ro.boot.sdv.authz.enable 系统属性。
测试支持
使用 atest 框架运行命令以准备用于测试的虚拟机,然后运行测试并进行清理。您可以利用 atest 框架来控制集成和端到端测试的授权强制执行。
使用 AndroidTest.xml 配置设置,并分配适当的系统属性值。
对于 Rust 目标,请使用 authz_enforcement_flag_disabled_config_template.xml:
<configuration description="Config to run {MODULE} device tests.">
{EXTRA_CONFIGS}
<!-- NOTE: To run tests using this template in a local dev env, use:
NOTIFY_AS_NATIVE=<Test device serial #> atest <test target>
For example,
NOTIFY_AS_NATIVE=0.0.0.0:6520 atest sdv_core_middleware_unit_comms_rs_sdk_test
-->
<target_preparer class="com.android.tradefed.targetprep.DeviceSetup">
<!-- Needed to prevent DeviceSetup from trying to set device features,
unsupported on minimal SDV device. -->
<option name="force-skip-settings" value="true" />
<!-- Ensure authz is set to "disabled" for this test -->
<option name="set-property" key="sdv.authz.enable" value="disabled" />
<!-- Restore default authz setting on teardown -->
<option name="restore-properties" value="true" />
<!-- Needed to prevent DeviceSetup from trying to list device features,
unsupported on minimal SDV device. -->
<option name="screen-always-on" value="IGNORE" />
<!-- Add this line to disable the external storage space check -->
<option name="min-external-storage-kb" value="0" />
</target_preparer>
<target_preparer class="com.android.tradefed.targetprep.PushFilePreparer">
<option name="cleanup" value="true" />
<option name="push" value="{MODULE}->/data/local/tmp/{MODULE}" />
</target_preparer>
<test class="com.android.tradefed.testtype.rust.RustBinaryTest" >
<option name="test-device-path" value="/data/local/tmp" />
<option name="module-name" value="{MODULE}" />
</test>
</configuration>
对于 C++ 目标,请使用 authz_enforcement_flag_disabled_gtest_config_template.xml:
<configuration description="Config to run {MODULE} device tests.">
{EXTRA_CONFIGS}
<!-- NOTE: To run tests using this template in a local dev env, use:
NOTIFY_AS_NATIVE=<Test device serial #> atest <test target>
-->
<target_preparer class="com.android.tradefed.targetprep.DeviceSetup">
<!-- Needed to prevent DeviceSetup from trying to set device features,
unsupported on minimal SDV device. -->
<option name="force-skip-settings" value="true" />
<!-- Ensure authz is set to "disabled" for this test -->
<option name="set-property" key="sdv.authz.enable" value="disabled" />
<!-- Restore default authz setting on teardown -->
<option name="restore-properties" value="true" />
<!-- Needed to prevent DeviceSetup from trying to list device features,
unsupported on minimal SDV device. -->
<option name="screen-always-on" value="IGNORE" />
<!-- Add this line to disable the external storage space check -->
<option name="min-external-storage-kb" value="0" />
</target_preparer>
<target_preparer class="com.android.tradefed.targetprep.PushFilePreparer">
<option name="cleanup" value="true" />
<option name="push" value="{MODULE}->/data/local/tmp/{MODULE}" />
</target_preparer>
<test class="com.android.tradefed.testtype.GTest" >
<option name="native-test-device-path" value="/data/local/tmp" />
<option name="module-name" value="{MODULE}" />
</test>
</configuration>
使用 Android.bp 声明 Rust 目标、C++ 目标和文件组。
filegroup {
name: "sdv_authz_enforcement_flag_disabled_config_template",
srcs: ["test_configs/authz_enforcement_flag_disabled_config_template.xml"],
}
rust_test {
name: "sdv_authz_enforcement_flag_disabled_test",
srcs: ["tests/authz_enforcement_flag_disabled_test.rs"],
defaults: ["sdv_authz_enforcement_flag@rust_defaults"],
test_suites: [
"automotive-sdv-tests",
"general-tests",
],
test_options: {
unit_test: false,
},
require_root: true,
auto_gen_config: true,
test_config_template: ":sdv_authz_enforcement_flag_disabled_config_template",
compile_multilib: "first",
rustlibs: [
"libsdv_authz_enforcement_flag",
],
}
filegroup {
name: "sdv_authz_enforcement_flag_disabled_gtest_config_template",
srcs: ["authz_enforcement_flag_disabled_gtest_config_template.xml"],
}
cc_test {
name: "sdv_comms_cpp_sdk_tests",
srcs: ["cpp/**/*_test.cpp"],
defaults: ["sdv_comms_cpp_sdk_test_defaults"],
test_options: {
unit_test: true,
},
test_config_template: ":sdv_authz_enforcement_flag_disabled_gtest_config_template",
test_suites: [
"automotive-sdv-tests",
"general-tests",
],
}