खास अनुमति वाली अनुमति की सूची

खास ऐप्लिकेशन, सिस्टम ऐप्लिकेशन होते हैं. ये सिस्टम इमेज पार्टीशन पर मौजूद priv-app डायरेक्ट्री में होते हैं. Android रिलीज़ के लिए इस्तेमाल किए जाने वाले पार्टीशन ये हैं:

  • Android 9 और इसके बाद के वर्शन: /system, /product, /vendor
  • Android 8.1 और इससे पहले वाले वर्शन: /system

पहले, डिवाइस बनाने वाली कंपनियों के पास यह कंट्रोल नहीं होता था कि खास अधिकारों वाले ऐप्लिकेशन को कौनसी हस्ताक्षर | खास अधिकार वाली अनुमतियां दी जा सकती हैं. Android 8.0 से, डिवाइस बनाने वाली कंपनियां सिस्टम कॉन्फ़िगरेशन की एक्सएमएल फ़ाइलों में, खास अनुमतियां साफ़ तौर पर दे सकती हैं. ये फ़ाइलें, /etc/permissions डायरेक्ट्री में होती हैं. Android 9 से, लागू करने वाले लोग या कंपनियां, खास अधिकारों वाली सभी अनुमतियों को साफ़ तौर पर अनुमति दे सकती हैं या अस्वीकार कर सकती हैं. अगर खास अनुमतियां नहीं दी जाती हैं, तो डिवाइस बूट नहीं होगा.

privapp-permissions.xml फ़ाइल, एक ही पार्टीशन पर मौजूद खास ऐप्लिकेशन के लिए अनुमतियां सिर्फ़ स्वीकार या अस्वीकार कर सकती है. उदाहरण के लिए, अगर /product पार्टीशन पर मौजूद कोई ऐप्लिकेशन, खास अनुमतियों का अनुरोध करता है, तो अनुरोध को सिर्फ़ /product पर मौजूद privapp-permissions.xml फ़ाइल से स्वीकार या अस्वीकार किया जा सकता है.

अनुमति वाली सूची जोड़ना

ऐप्लिकेशन के लिए अनुमति वाली सूचियों को एक एक्सएमएल फ़ाइल में या /etc/permissions डायरेक्ट्री में मौजूद एक से ज़्यादा एक्सएमएल फ़ाइलों में शामिल किया जा सकता है:

  • /etc/permissions/privapp-permissions-OEM_NAME.xml
  • /etc/permissions/privapp-permissions-DEVICE_NAME.xml

कॉन्टेंट को व्यवस्थित करने के तरीके पर कोई सख्त नियम लागू नहीं होता. डिवाइस बनाने वाली कंपनियां, कॉन्टेंट का स्ट्रक्चर तय कर सकती हैं. हालांकि, इसके लिए ज़रूरी है कि /system/priv-app के सभी ऐप्लिकेशन को अनुमति दी गई हो. उदाहरण के लिए, Google ने सभी खास ऐप्लिकेशन के लिए एक ही अनुमति वाली सूची बनाई है. हमारा सुझाव है कि आप इस तरह से व्यवस्थित करें:

  • Android ओपन सोर्स प्रोजेक्ट (AOSP) ट्री में पहले से शामिल ऐप्लिकेशन के लिए अनुमतियां, /etc/permissions/privapp-permissions-platform.xml में दी गई हैं.
  • अन्य ऐप्लिकेशन के लिए, इस फ़ॉर्मैट की फ़ाइलें इस्तेमाल करें: /etc/permissions/privapp-permissions-DEVICE_NAME.xml.

अनुमति वाली सूची को पसंद के मुताबिक बनाना

AOSP में, अनुमति वाली सूची को लागू करने की सुविधा शामिल होती है. इसे ज़रूरत के हिसाब से पसंद के मुताबिक बनाया जा सकता है.

अगर अनुमति नहीं देनी है, तो एक्सएमएल में बदलाव करके permission टैग के बजाय deny-permission टैग का इस्तेमाल करें. उदाहरण के लिए:

<!-- This XML file declares which signature|privileged permissions to grant to
privileged apps that come with the platform -->

    <permissions>
      <privapp-permissions package="com.android.backupconfirm">
        <permission name="android.permission.BACKUP"/>
        <permission name="android.permission.CRYPT_KEEPER"/>
      </privapp-permissions>

      <privapp-permissions package="com.android.cellbroadcastreceiver">

        <!-- Don't allow the application to interact across users -->

        <deny-permission name="android.permission.INTERACT_ACROSS_USERS"/>
        <permission name="android.permission.MANAGE_USERS"/>
        <permission name="android.permission.MODIFY_PHONE_STATE"/>
        <permission name="android.permission.READ_PRIVILEGED_PHONE_STATE"/>
        <permission name="android.permission.RECEIVE_EMERGENCY_BROADCAST"/>
      </privapp-permissions>
    ...

उन अनुमतियों का पता लगाना जो मौजूद नहीं हैं

नए डिवाइस पर, ज़रूरी अनुमतियां न मिलने पर, ट्रांज़िशनल लॉग मोड चालू करें:

ro.control_privapp_permissions=log

उल्लंघनों की जानकारी लॉग फ़ाइल में दी जाती है. बिना खास अधिकार वाली अनुमतियां दी गई हैं. ऐसा करने से, यह पक्का होता है कि डिवाइस काम करता रहे. साथ ही, उल्लंघन की सूची भी मिलती रहे. गड़बड़ी के मैसेज का फ़ॉर्मैट इस तरह होता है:

PackageManager: Privileged permission {PERMISSION_NAME} for package {PACKAGE_NAME} - not in privapp-permissions allowlist

सभी उल्लंघनों को ठीक करने के लिए, अनुमति वाली सूचियों में ज़रूरी अनुमतियां जोड़ें. ध्यान दें कि:

  • Android 9 और इसके बाद के वर्शन में, खास अनुमतियों के उल्लंघन की वजह से डिवाइस शुरू नहीं हो पाता. इसके बजाय, आपको खास अनुमतियों को साफ़ तौर पर स्वीकार या अस्वीकार करना होगा.
  • Android 8.0 और इससे पहले के वर्शन पर, priv-app पाथ में होने के बावजूद, जिन ऐप्लिकेशन के लिए अनुमतियां नहीं दी गई हैं उन्हें ये अनुमतियां नहीं दी जातीं.

अनुमति वाली सूची लागू करना

अनुमति वाली सूचियां बनाने के बाद, बिल्ड प्रॉपर्टी ro.control_privapp_permissions=enforce को सेट करके, रनटाइम एनफ़ोर्समेंट चालू करें.

अनुमति वाली सूची में शामिल करने की सुविधा, सिर्फ़ उन अनुमतियों के लिए ज़रूरी है जिन्हें package="android" वाले ऐप्लिकेशन ने ज़ाहिर किया है. ro.control_privapp_permissions प्रॉपर्टी की स्थिति, Compatibility Definition Document (CDD) में दिए गए Section 9.1 Permissions के मुताबिक होनी चाहिए.