विशेषाधिकार प्राप्त ऐप्स सिस्टम ऐप्स होते हैं जो सिस्टम छवि विभाजनों में से एक पर एक 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
।
अनुमत सूचियों को अनुकूलित करना
एओएसपी में एक अनुमति सूची कार्यान्वयन शामिल है जिसे आवश्यकतानुसार अनुकूलित किया जा सकता है। AOSP में शामिल ऐप्स के लिए अनुमतियाँ पहले से ही /etc/permissions/privapp-permissions-platform.xml
में सूचीबद्ध हैं।
अगर ऐसी अनुमतियां हैं जिन्हें अस्वीकार किया जाना चाहिए, तो "अनुमति" टैग के बजाय "अस्वीकार-अनुमति" टैग का उपयोग करने के लिए एक्सएमएल संपादित करें। उदाहरण:
<!-- 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
सेट करके रनटाइम प्रवर्तन सक्षम करें।