अनुमति से जुड़ी गड़बड़ी तब होती है, जब कोई सेवा ऐसा ऐक्शन करने की कोशिश करती है जिसे करने की अनुमति उसके पास नहीं होती. सॉफ़्टवेयर-डिफ़ाइंड व्हीकल (एसडीवी) फ़्रेमवर्क, permissionsOnly एनफ़ोर्समेंट मोड में यह देखता है कि विषय या उसकी वर्चुअल मशीन (वीएम) के पास, उसकी नीति में बताई गई ज़रूरी अनुमति है या नहीं.
आपको अनुमति से जुड़ी गड़बड़ी के मैसेज का आकलन, सुरक्षा के हिसाब से करना चाहिए. हर गड़बड़ी का मतलब यह नहीं है कि कोई गड़बड़ी हुई है या बिना अनुमति के ऐक्सेस करने की कोशिश की गई है.
अनुमति से जुड़े सभी फ़ैसले लॉग किए जाते हैं. इन्हें देखने के लिए, लॉगकैट आउटपुट में ऑडिट मैसेज खोजें:
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
इसे ठीक करने के लिए, विषय की अनुमति से जुड़ी नीति के टेक्स्टप्रोटो में नियम जोड़ें:
client {
service: "com.server.TargetType"
channel: "my-unit"
}
अगर गड़बड़ी के मैसेज से पता चलता है कि विषय की वीएम में अनुमति नहीं है, तो आपको इसे वीएम-लेवल की नीति में जोड़ना होगा. जैसे, <vm_name>.textproto या
.default.textproto com.oem.sdv.authz APEX में:
allow_server {
service: "com.server.TargetType"
channel: "my-unit"
}
एसीएल से माइग्रेट करना
पिछले वर्शन के साथ काम करने और माइग्रेशन के लिए, फ़्रेमवर्क ACLs only, Lenient और Strict मोड के साथ काम करता है. इनमें पहले की ऐक्सेस कंट्रोल लिस्ट (एसीएल) को ध्यान में रखा जाता है.
सिर्फ़ एसीएल दिखाने वाला मोड
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 मोड
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 मोड में, एसीएल और अनुमतियां, दोनों से ऐक्सेस की अनुमति मिलनी चाहिए. अगर एसीएल या अनुमतियां काम नहीं करती हैं, तो ऐक्सेस की अनुमति नहीं मिलती और गड़बड़ी लॉग की जाती है.