Berechtigungsverstöße debuggen

Ein Autorisierungsverstoß tritt auf, wenn ein Dienst versucht, eine Aktion auszuführen, die ihm nicht erlaubt ist. Im Standardmodus permissionsOnly prüft das SDV-Framework (Software-Defined Vehicle), ob das Subjekt oder seine virtuelle Maschine (VM) die in der Richtlinie deklarierte erforderliche Berechtigung hat.

Sie müssen Verstoßbenachrichtigungen im Sicherheitskontext bewerten. Nicht jeder Verstoß weist auf einen Fehler oder einen Versuch hin, unbefugten Zugriff zu erhalten.

Alle Autorisierungsentscheidungen werden protokolliert. Suchen Sie in der logcat-Ausgabe nach Audit-Nachrichten, um sie aufzurufen:

adb -s $SERIAL logcat | grep 'audit message'

Erfolgreiche Autorisierung

Erfolgreiche Prüfungen werden auf der Ebene debug protokolliert.

Das bedeutet, dass das Rechtssubjekt die erforderliche Berechtigung deklariert hat:

D SdvServiceManagerServer: instance2:com.sdv.google.sample.bar.ServiceBundleBar/instance declares permission to access com.sdv.google.sample.foo.ServiceBundleFoo#foo-rpc, audit message: ...

Verstöße und fehlende Berechtigungen

Verstöße treten auf, wenn eine Berechtigung fehlt.

Dies tritt auf, wenn das Subjekt in seiner Autorisierungsrichtlinie nicht die erforderliche Berechtigung hat, z. B. client, server, publisher oder subscriber, oder wenn die VM des Subjekts in der Richtlinie auf VM-Ebene nicht über die erforderliche Berechtigung verfügt.

Dies wird auf der Ebene error protokolliert:

E SdvServiceManagerServer: Authz violation. instance2:com.sdv.google.sample.bar.ServiceBundleBar/instance does not declare permission to access com.sdv.google.sample.foo.ServiceBundleFoo#foo-rpc, audit message: Subject lacks 'client' permission...

Auflösung

Das audit message des Logs enthält häufig einen nützlichen Vorschlag, was hinzugefügt werden muss, um einen Verstoß zu beheben.

Möglicherweise wird ein Berechtigungsfehler wie dieser angezeigt:

Subject 'vm:com.client.Bundle/default' lacks 'client' permission for service 'com.server.TargetType' with channel 'my-unit'. Add 'client { service: "com.server.TargetType" channel: "my-unit" }' to the subject's Authz policy

Fügen Sie die Regel in der Autorisierungsrichtlinie des Subjekts hinzu, um das Problem zu beheben:

client {
    service: "com.server.TargetType"
    channel: "my-unit"
}

Wenn die Fehlermeldung auf eine fehlende Berechtigung in der VM des Subjekts hinweist, müssen Sie sie der Richtlinie auf VM-Ebene hinzufügen, z. B. <vm_name>.textproto oder .default.textproto im com.oem.sdv.authz APEX:

allow_server {
    service: "com.server.TargetType"
    channel: "my-unit"
}

Von ACLs migrieren

Aus Gründen der Abwärtskompatibilität und Migration unterstützt das Framework die Modi ACLs only, Lenient und Strict, in denen frühere Access Control Lists (ACLs) berücksichtigt werden.

Modus „Nur ACLs“

Im Modus ACLs only ist der Zugriff nur zulässig, wenn er durch ACLs erlaubt wird. Berechtigungen werden ignoriert. Wenn der Zugriff durch ACLs verweigert wird, wird ein Fehler protokolliert:

E SdvServiceManagerServer: Authz violation. com.sdv.google.sample.foo.ServiceBundleFoo#foo-rpc denies access to instance2:com.sdv.google.sample.bar.ServiceBundleBar/instance, audit message: ...

Kulanzmodus

Im Lenient-Modus ist der Zugriff zulässig, wenn er entweder durch ACLs oder Berechtigungen erlaubt wird. Wenn der Zugriff über ACLs gewährt wird, aber Berechtigungen fehlen, wird dies als Soft-Verstoß auf der Ebene debug protokolliert. So können Sie fehlende Berechtigungen erkennen, ohne dass das System beeinträchtigt wird:

D SdvServiceManagerServer: Permissions Authz violation (access granted by ACLs): instance2:com.sdv.google.sample.bar.ServiceBundleBar/instance does not declare permission to access com.sdv.google.sample.foo.ServiceBundleFoo#foo-rpc, audit message: ...

Wenn sowohl ACLs als auch Berechtigungen fehlschlagen, wird dies als Fehler für beide protokolliert:

E SdvServiceManagerServer: Authz violation. com.sdv.google.sample.foo.ServiceBundleFoo#foo-rpc denies access to instance2:com.sdv.google.sample.bar.ServiceBundleBar/instance, audit message: ...
E SdvServiceManagerServer: Authz violation. instance2:com.sdv.google.sample.bar.ServiceBundleBar/instance does not declare permission to access com.sdv.google.sample.foo.ServiceBundleFoo#foo-rpc, audit message: ...

Strenger Modus

Im Strict-Modus muss der Zugriff sowohl durch ACLs als auch durch Berechtigungen erlaubt werden. Wenn entweder ACLs oder Berechtigungen fehlschlagen, wird der Zugriff verweigert und ein Fehler protokolliert.