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

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

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

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

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

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

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

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

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

  • Android Open Source Project (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 प्रॉपर्टी की स्थिति, काम करने के तरीके की जानकारी वाले दस्तावेज़ (सीडीडी) में बताए गए सेक्शन 9.1 अनुमतियां के मुताबिक होनी चाहिए.