تصحيح أخطاء انتهاكات الأذونات

يحدث انتهاك التفويض عندما تحاول خدمة تنفيذ إجراء غير مسموح لها بتنفيذه. في وضع فرض permissionsOnly العادي، يتحقّق إطار عمل المركبة المعرّفة بالبرامج (SDV) مما إذا كان الموضوع أو جهازه الافتراضي (VM) لديه الإذن المطلوب المُعلن عنه في سياسته.

عليك تقييم رسائل الانتهاك ضمن سياقها الأمني. لا يشير كل انتهاك إلى حدوث خطأ أو محاولة وصول غير مصرّح به.

يتم تسجيل جميع قرارات التفويض. لعرضها، ابحث في ناتج logcat عن رسائل التدقيق:

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

تفويض ناجح

يتم تسجيل عمليات التحقّق الناجحة على مستوى debug.

يشير ذلك إلى أنّ الموضوع لديه الإذن المطلوب المُعلن عنه:

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

الانتهاكات والأذونات غير المتوفّرة

تحدث الانتهاكات عندما يكون هناك إذن غير متوفّر.

يحدث ذلك عندما لا يكون لدى الموضوع الإذن اللازم، مثل client أو server أو publisher أو subscriber، في سياسة التفويض الخاصة به، أو عندما لا يكون لدى الآلة الافتراضية للموضوع هذا الإذن في السياسة على مستوى الآلة الافتراضية.

يتم تسجيل ذلك على مستوى error:

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...

تصدير البيانات الناقصة

غالبًا ما تحتوي audit message في السجلّ على اقتراح مفيد بشأن ما يجب إضافته لحلّ الانتهاك.

على سبيل المثال، قد يظهر لك خطأ في الإذن على النحو التالي:

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

يمكنك تصحيح ذلك عن طريق إضافة القاعدة إلى نص بروتوكول textproto لسياسة التفويض الخاصة بالموضوع:

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

إذا كانت رسالة الخطأ تشير إلى إذن غير متوفّر في الآلة الافتراضية للموضوع، عليك إضافته إلى السياسة على مستوى الآلة الافتراضية، مثل <vm_name>.textproto أو .default.textproto في حزمة APEX com.oem.sdv.authz:

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

النقل من قوائم التحكم بالوصول

لضمان التوافق مع الإصدارات السابقة وعملية النقل، يتيح إطار العمل أوضاع ACLs only Lenient وStrict التي تأخذ في الاعتبار قوائم التحكم بالوصول (ACL).

وضع "قوائم التحكم بالوصول فقط"

في وضع ACLs only، لا يُسمح بالوصول إلا إذا سمحت به قوائم التحكم بالوصول. ويتم تجاهل الأذونات. إذا رفضت قوائم التحكم بالوصول إمكانية الوصول، يتم تسجيل خطأ:

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: ...

الوضع "متساهل"

في الوضع Lenient، يُسمح بالوصول إذا سمحت به قوائم التحكم بالوصول أو الأذونات. إذا تم منح إذن الوصول باستخدام قوائم التحكم بالوصول ولكن لم تكن الأذونات متوفّرة، يتم تسجيل ذلك على أنّه انتهاك بسيط على مستوى debug لمساعدتك في تحديد الأذونات غير المتوفّرة مع الحفاظ على عمل النظام:

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: ...

إذا تعذّر استخدام قوائم التحكم بالوصول والأذونات، يتم تسجيل ذلك على أنّه خطأ لكليهما:

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: ...

وضع التدقيق الصارم

في الوضع Strict، يجب أن تسمح قوائم التحكم بالوصول والأذونات بالوصول. إذا تعذّر استخدام قوائم التحكم بالوصول أو الأذونات، يتم رفض إذن الوصول وتسجيل خطأ.