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

विशेषाधिकृत क्षुधा है कि एक में स्थित हैं प्रणाली क्षुधा हैं 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

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

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

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

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

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

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

सभी सिस्टम छवि पर उपलब्ध एप्लिकेशन के लिए स्वचालित रूप से एक allowlist उत्पन्न करने के लिए, पर AOSP कमांड लाइन उपकरण का उपयोग 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 फ़ाइल है कि सूचियों सभी हस्ताक्षर | विशेषाधिकार प्राप्त अनुमतियों allowlisted जाने की आवश्यकता:
    development/tools/privapp_permissions/privapp_permissions.py
    यह उपकरण प्रिंट एक्सएमएल सामग्री है कि एक एकल फाइल के रूप में या तो किया जा सकता है, या विभाजन एकाधिक फ़ाइलों में में /etc/permissions निर्देशिका पथ। उपकरण पहले से ही में allowlists शामिल है, तो /etc/permissions निर्देशिका, उपकरण केवल (| विशेषाधिकार प्राप्त अनुमतियों allowlist को जोड़ने की जरूरत है इस तरह के लापता हस्ताक्षर के रूप में) मतभेद प्रिंट करता है। यह ऑडिट उद्देश्यों के लिए भी उपयोगी है: जब ऐप का एक नया संस्करण जोड़ा जाता है, तो टूल आवश्यक अतिरिक्त अनुमतियों का पता लगाता है।
  3. उचित करने के लिए उत्पन्न फ़ाइलों की प्रतिलिपि /etc/permissions निर्देशिका, जहां प्रणाली बूट के दौरान फ़ाइलों को पढ़ता है।

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

एओएसपी में एक अनुमति सूची कार्यान्वयन शामिल है जिसे आवश्यकतानुसार अनुकूलित किया जा सकता है। AOSP में शामिल क्षुधा के लिए अनुमतियां पहले से ही में allowlisted रहे /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

सभी उल्लंघनों को उपयुक्त अनुमत सूचियों में अनुपलब्ध अनुमतियों को जोड़कर संबोधित किया जाना चाहिए।

  • एंड्रॉयड 8.0 और कम पर, प्रभावित ऐप्स गुम अनुमतियाँ नहीं दिया गया है, भले ही वे में हैं priv-app पथ।
  • एंड्रॉयड 9 और उच्च, (विशेषाधिकार प्राप्त अनुमतियों के) डिवाइस मतलब उल्लंघन पर बूट नहीं करता है। आप स्पष्ट रूप से या तो अनुमति देते हैं या सभी विशेषाधिकार प्राप्त अनुमतियों से इनकार करना होगा

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

Allowlists स्थान पर हैं के बाद, निर्माण संपत्ति की स्थापना द्वारा क्रम प्रवर्तन सक्षम ro.control_privapp_permissions=enforce