اشکال‌زدایی نقض مجوزها

نقض مجوز زمانی رخ می‌دهد که یک سرویس تلاش کند عملی را انجام دهد که مجاز به اجرای آن نیست. در حالت استاندارد اجرای permissionsOnly ، چارچوب وسیله نقلیه تعریف‌شده توسط نرم‌افزار (SDV) بررسی می‌کند که آیا سوژه یا ماشین مجازی (VM) آن، مجوز مورد نیاز اعلام‌شده در سیاست خود را دارد یا خیر.

شما باید پیام‌های تخلف را در چارچوب امنیتی خودشان ارزیابی کنید. هر تخلفی نشان دهنده خطا یا تلاش برای دسترسی غیرمجاز نیست.

تمام تصمیمات مربوط به مجوزها ثبت می‌شوند. برای مشاهده آنها، خروجی logcat را برای پیام‌های حسابرسی جستجو کنید:

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

مجوز موفقیت آمیز

بررسی‌های موفق در سطح debug ثبت می‌شوند.

این نشان می‌دهد که subject مجوز لازم را دارد:

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"
}

مهاجرت از ACLها

برای سازگاری و مهاجرت به عقب، این چارچوب ACLs only ، حالت‌های Lenient و Strict که لیست‌های کنترل دسترسی (ACL) قبلی را در نظر می‌گیرند، پشتیبانی می‌کند.

حالت فقط ACLها

در حالت ACLs only ، دسترسی فقط در صورتی مجاز است که ACLها اجازه دهند. مجوزها نادیده گرفته می‌شوند. اگر ACLها دسترسی را رد کنند، خطایی ثبت می‌شود:

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 ، دسترسی در صورتی مجاز است که ACLها یا مجوزها اجازه دهند. اگر دسترسی با استفاده از ACLها اعطا شود اما مجوزها وجود نداشته باشند، این موضوع به عنوان یک تخلف نرم در سطح 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: ...

اگر هم ACL ها و هم مجوزها با شکست مواجه شوند، به عنوان یک خطا برای هر دو ثبت می‌شود:

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 ، هم ACLها و هم مجوزها باید اجازه دسترسی بدهند. اگر هر یک از ACLها یا مجوزها ناموفق باشند، دسترسی رد شده و خطایی ثبت می‌شود.