विशेषाधिकार प्राप्त ऐप्स सिस्टम ऐप्स हैं जो सिस्टम छवि विभाजन पर priv-app
निर्देशिका में स्थित होते हैं। Android रिलीज़ के लिए उपयोग किए जाने वाले विभाजन हैं:
- एंड्रॉइड 9 और उच्चतर:
/system, /product, /vendor
- Android 8.1 और इससे पहले का संस्करण:
/system
ऐतिहासिक रूप से, डिवाइस निर्माताओं का इस बात पर बहुत कम नियंत्रण था कि कौन सा हस्ताक्षर | विशेषाधिकार प्राप्त ऐप्स को विशेषाधिकार प्राप्त अनुमतियां दी जा सकती हैं। एंड्रॉइड 8.0 से शुरू होकर, निर्माता /etc/permissions
निर्देशिका में सिस्टम कॉन्फ़िगरेशन XML फ़ाइलों में स्पष्ट रूप से विशेषाधिकार प्राप्त अनुमतियाँ प्रदान कर सकते हैं। एंड्रॉइड 9 के अनुसार, कार्यान्वयनकर्ता स्पष्ट रूप से सभी विशेषाधिकार प्राप्त अनुमतियाँ प्रदान या अस्वीकार कर सकते हैं। यदि विशेषाधिकार प्राप्त अनुमतियाँ नहीं दी गई हैं, तो डिवाइस बूट नहीं होगा।
privapp-permissions.xml
फ़ाइल केवल उसी विभाजन पर विशेषाधिकार प्राप्त ऐप्स के लिए अनुमतियाँ प्रदान या अस्वीकार कर सकती है। उदाहरण के लिए, यदि /product
विभाजन पर कोई ऐप विशेषाधिकार प्राप्त अनुमतियों का अनुरोध करता है, तो अनुरोध केवल /product
पर privapp-permissions.xml
फ़ाइल द्वारा ही स्वीकृत या अस्वीकृत किया जा सकता है।
एक अनुमति सूची जोड़ें
ऐप्स के लिए अनुमति अनुमति सूचियाँ एकल XML फ़ाइल में या frameworks/base/etc/permissions
निर्देशिका में स्थित एकाधिक XML फ़ाइलों में सूचीबद्ध की जा सकती हैं:
-
/etc/permissions/privapp-permissions- OEM_NAME .xml
-
/etc/permissions/privapp-permissions- DEVICE_NAME .xml
सामग्री कैसे व्यवस्थित की जाती है, इस पर कोई सख्त नियम लागू नहीं होता है। डिवाइस कार्यान्वयनकर्ता तब तक सामग्री संरचना निर्धारित कर सकते हैं जब तक /system/priv-app
के सभी ऐप्स अनुमति सूची में हैं। उदाहरण के लिए, Google ने सभी विशेषाधिकार प्राप्त ऐप्स के लिए एक एकल अनुमति सूची विकसित की है। हम निम्नलिखित संगठन की अनुशंसा करते हैं:
- एंड्रॉइड ओपन सोर्स प्रोजेक्ट (एओएसपी) ट्री में पहले से शामिल ऐप्स के लिए अनुमतियां
/etc/permissions/privapp-permissions-platform.xml
में सूचीबद्ध हैं। - अन्य ऐप्स के लिए,
/etc/permissions/privapp-permissions- DEVICE_NAME .xml
फ़ॉर्म की फ़ाइलों का उपयोग करें।
एक अनुमति सूची अनुकूलित करें
एओएसपी में एक अनुमति सूची कार्यान्वयन शामिल है जिसे आवश्यकतानुसार अनुकूलित किया जा सकता है।
यदि किसी अनुमति को अस्वीकार किया जाना है, तो permission
टैग के बजाय deny-permission
टैग का उपयोग करने के लिए 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
सभी उल्लंघनों को उचित अनुमति सूचियों में अनुपलब्ध अनुमतियों को जोड़कर संबोधित किया जाना चाहिए। ध्यान दें कि इसमें:
- एंड्रॉइड 9 और उच्चतर, विशेषाधिकार प्राप्त अनुमतियों का उल्लंघन डिवाइस को प्रारंभ होने से रोकता है। इसके बजाय, आपको सभी विशेषाधिकार प्राप्त अनुमतियों को स्पष्ट रूप से अनुमति देना या अस्वीकार करना होगा।
- एंड्रॉइड 8.0 और उससे पहले के संस्करण में,
priv-app
पथ में होने के बावजूद प्रभावित ऐप्स को अनुपलब्ध अनुमतियाँ नहीं दी जाती हैं।
एक अनुमति सूची लागू करें
अपनी अनुमति सूची बनाने के बाद, बिल्ड प्रॉपर्टी ro.control_privapp_permissions=enforce
सेट करके रनटाइम प्रवर्तन सक्षम करें।
अनुमति सूची केवल package="android"
वाले ऐप्स द्वारा घोषित अनुमतियों के लिए आवश्यक है। ro.control_privapp_permissions
संपत्ति स्थिति को संगतता परिभाषा दस्तावेज़ (सीडीडी) में धारा 9.1 अनुमतियों का पालन करना होगा।