विशेषाधिकार प्राप्त अनुमति सूची

विशेषाधिकार प्राप्त ऐप्स सिस्टम ऐप्स होते हैं जो सिस्टम छवि विभाजनों में से एक पर एक priv-app निर्देशिका में स्थित होते हैं। Android रिलीज़ के लिए उपयोग किए जाने वाले विभाजन हैं

  • एंड्रॉइड 8.1 और निचला - /system
  • एंड्रॉइड 9 और उच्चतर - /system, /product, /vendor

इस पूरे पृष्ठ में, /etc/permissions/priv-app partition /etc/permissions/priv-app

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

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

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

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

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

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

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

अनुमति सूची बनाना

सिस्टम छवि पर उपलब्ध सभी ऐप्स के लिए स्वचालित रूप से एक अनुमति सूची उत्पन्न करने के लिए, एओएसपी कमांड लाइन टूल का उपयोग development/tools/privapp_permissions/privapp_permissions.py । डिवाइस-विशिष्ट privapp-permissions.xml का प्रारंभिक संस्करण जेनरेट करने के लिए:

  1. एक सिस्टम छवि बनाएँ:
        . build/envsetup.sh
        lunch PRODUCT_NAME
        make -j
  2. privapp_permissions.py स्क्रिप्ट चलाने के लिए एक privapp-permissions.xml फ़ाइल उत्पन्न करें जिसमें सभी हस्ताक्षर सूचीबद्ध हों|सूचीबद्ध होने के लिए आवश्यक विशेषाधिकार प्राप्त अनुमतियाँ:
    development/tools/privapp_permissions/privapp_permissions.py
    यह उपकरण XML सामग्री को प्रिंट करता है जिसे या तो एक फ़ाइल के रूप में उपयोग किया जा सकता है, या कई फ़ाइलों में विभाजित किया जा सकता है। /etc/permissions निर्देशिका पथ में। यदि डिवाइस में पहले से ही /etc/permissions निर्देशिकाओं में अनुमति सूची शामिल है, तो उपकरण केवल अंतरों को प्रिंट करता है (जैसे अनुपलब्ध हस्ताक्षर|विशेषाधिकार प्राप्त अनुमतियाँ जिन्हें आपको अनुमति सूची में जोड़ने की आवश्यकता है)। यह ऑडिट उद्देश्यों के लिए भी उपयोगी है: जब ऐप का एक नया संस्करण जोड़ा जाता है, तो टूल आवश्यक अतिरिक्त अनुमतियों का पता लगाता है।
  3. जेनरेट की गई फाइलों को उपयुक्त /etc/permissions डायरेक्टरी में कॉपी करें, जहां सिस्टम बूट के दौरान फाइलों को पढ़ता है।

अनुमत सूचियों को अनुकूलित करना

एओएसपी में एक अनुमति सूची कार्यान्वयन शामिल है जिसे आवश्यकतानुसार अनुकूलित किया जा सकता है। AOSP में शामिल ऐप्स के लिए अनुमतियाँ पहले से ही /etc/permissions/privapp-permissions-platform.xml में सूचीबद्ध हैं।

डिफ़ॉल्ट रूप से, privapp_permissions.py स्क्रिप्ट आउटपुट उत्पन्न करती है जो किसी विशेषाधिकार प्राप्त एप्लिकेशन द्वारा अनुरोधित किसी भी अनुमति को स्वचालित रूप से अनुदान देती है। अगर ऐसी अनुमतियां हैं जिन्हें अस्वीकार किया जाना चाहिए, तो "अनुमति" टैग के बजाय "अस्वीकार-अनुमति" टैग का उपयोग करने के लिए एक्सएमएल संपादित करें। उदाहरण:

<!-- 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 8.0 और उसके बाद के संस्करण पर, प्रभावित ऐप्स को अनुपलब्ध अनुमतियां नहीं दी जाती हैं, भले ही वे priv-app पथ में हों।
  • Android 9 और उच्चतर पर, उल्लंघन ( विशेषाधिकार प्राप्त अनुमतियों के) का अर्थ है कि डिवाइस बूट नहीं होता है । आपको सभी विशेषाधिकार प्राप्त अनुमतियों को स्पष्ट रूप से या तो अनुमति देनी चाहिए या अस्वीकार करनी चाहिए

अनुमत सूचियों को लागू करना

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