প্রিভিলেজড পারমিশন অ্যালোলিস্টিং

প্রিভিলেজড অ্যাপ হল সিস্টেম অ্যাপ যা সিস্টেম ইমেজ পার্টিশনগুলির একটিতে একটি priv-app ডিরেক্টরিতে অবস্থিত। অ্যান্ড্রয়েড রিলিজের জন্য ব্যবহৃত পার্টিশনগুলি হল

  • অ্যান্ড্রয়েড 8.1 এবং নিম্নতর - /system
  • Android 9 এবং উচ্চতর - /system, /product, /vendor

এই পৃষ্ঠা জুড়ে, /etc/permissions/priv-app partition /etc/permissions/priv-app

ঐতিহাসিকভাবে, ডিভাইস নির্মাতাদের কোন স্বাক্ষরের উপর খুব কম নিয়ন্ত্রণ ছিল| সুবিধাপ্রাপ্ত অ্যাপগুলিকে বিশেষ অনুমতি দেওয়া যেতে পারে৷ অ্যান্ড্রয়েড 8.0 থেকে শুরু করে, নির্মাতাদের অবশ্যই /etc/permissions ডিরেক্টরিতে সিস্টেম কনফিগারেশন XML ফাইলগুলিতে বিশেষ সুবিধাপ্রাপ্ত অনুমতি দিতে হবে। অ্যান্ড্রয়েড 9 অনুসারে, বাস্তবায়নকারীদের অবশ্যই সমস্ত বিশেষাধিকারপ্রাপ্ত অনুমতিগুলি স্পষ্টভাবে মঞ্জুর বা অস্বীকার করতে হবে বা ডিভাইসটি বুট হবে না।

privapp-permissions.xml ফাইলটি শুধুমাত্র একই পার্টিশনে বিশেষ সুবিধাপ্রাপ্ত অ্যাপগুলির জন্য অনুমতি দিতে বা অস্বীকার করতে পারে। উদাহরণস্বরূপ, যদি /product পার্টিশনের একটি অ্যাপ বিশেষাধিকারপ্রাপ্ত অনুমতির জন্য অনুরোধ করে, তাহলে অনুরোধটি শুধুমাত্র একটি privapp-permissions.xml ফাইল দ্বারা মঞ্জুর বা অস্বীকার করা যেতে পারে যেটি /product এও রয়েছে।

অনুমোদিত তালিকা যোগ করা হচ্ছে

অ্যাপ্লিকেশানগুলির জন্য অনুমতির অনুমতি তালিকাগুলি একটি একক XML বা একাধিক XML ফাইলে frameworks/base/etc/permissions নির্দেশিকাতে নিম্নরূপ তালিকাভুক্ত করা যেতে পারে:

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

বিষয়বস্তু সংগঠিত করার জন্য কোন কঠোর নিয়ম নেই। যতক্ষণ পর্যন্ত /system/priv-app এর সমস্ত অ্যাপ অনুমোদিত তালিকাভুক্ত থাকে ততক্ষণ পর্যন্ত ডিভাইস বাস্তবায়নকারীরা সামগ্রীর কাঠামো নির্ধারণ করতে পারে। উদাহরণ স্বরূপ, Google-এর দ্বারা ডেভেলপ করা সমস্ত বিশেষ সুবিধাপ্রাপ্ত অ্যাপের জন্য Google-এর একটি একক অনুমোদিত তালিকা রয়েছে এবং নিম্নলিখিত সংস্থাকে সুপারিশ করে:

  • ইতিমধ্যেই অ্যান্ড্রয়েড ওপেন সোর্স প্রজেক্ট (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 এ AOSP কমান্ড লাইন টুলটি ব্যবহার করুন। ডিভাইস-নির্দিষ্ট privapp-permissions.xml এর একটি প্রাথমিক সংস্করণ তৈরি করতে:

  1. একটি সিস্টেম ইমেজ তৈরি করুন:
        . build/envsetup.sh
        lunch PRODUCT_NAME
        make -j
  2. একটি privapp-permissions.xml ফাইল তৈরি করতে privapp_permissions.py স্ক্রিপ্টটি চালান যা সমস্ত স্বাক্ষর|অনুমোদিত অনুমতিগুলির তালিকাভুক্ত করার জন্য প্রয়োজনীয়:
    development/tools/privapp_permissions/privapp_permissions.py
    এই টুলটি XML সামগ্রী প্রিন্ট করে যা একক ফাইল হিসাবে ব্যবহার করা যেতে পারে বা একাধিক ফাইলে বিভক্ত করা যেতে পারে /etc/permissions ডিরেক্টরি পাথে। যদি ডিভাইসটি ইতিমধ্যেই /etc/permissions ডিরেক্টরিতে অনুমোদিত তালিকা অন্তর্ভুক্ত করে, তাহলে টুলটি শুধুমাত্র পার্থক্যগুলি প্রিন্ট করে (যেমন অনুপস্থিত স্বাক্ষর|অনুমতিপ্রাপ্ত অনুমতিগুলি আপনাকে অনুমতি তালিকায় যোগ করতে হবে)। এটি নিরীক্ষার উদ্দেশ্যেও দরকারী: যখন অ্যাপটির একটি নতুন সংস্করণ যোগ করা হয়, তখন সরঞ্জামটি প্রয়োজনীয় অতিরিক্ত অনুমতিগুলি সনাক্ত করে৷
  3. উত্পন্ন ফাইলগুলিকে উপযুক্ত /etc/permissions ডিরেক্টরিতে অনুলিপি করুন, যেখানে সিস্টেম বুট করার সময় ফাইলগুলি পড়ে।

অনুমোদিত তালিকা কাস্টমাইজ করা

AOSP-এর মধ্যে একটি অনুমোদিত তালিকা বাস্তবায়ন রয়েছে যা প্রয়োজন অনুযায়ী কাস্টমাইজ করা যেতে পারে। AOSP-এ অন্তর্ভুক্ত অ্যাপগুলির অনুমতিগুলি ইতিমধ্যেই /etc/permissions/privapp-permissions-platform.xml এ অনুমোদিত তালিকাভুক্ত।

ডিফল্টরূপে, privapp_permissions.py স্ক্রিপ্ট আউটপুট তৈরি করে যা স্বয়ংক্রিয়ভাবে একটি বিশেষাধিকারপ্রাপ্ত অ্যাপ্লিকেশন দ্বারা অনুরোধ করা যেকোনো অনুমতি প্রদান করে। যদি এমন অনুমতি থাকে যা অস্বীকার করা উচিত, তাহলে "অনুমতি" ট্যাগের পরিবর্তে "অনুমতি অস্বীকার" ট্যাগ ব্যবহার করতে 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

উপযুক্ত অনুমতি তালিকায় অনুপস্থিত অনুমতিগুলি যোগ করে সমস্ত লঙ্ঘনের সমাধান করতে হবে।

  • অ্যান্ড্রয়েড 8.0 এবং তার নিচের সংস্করণে, প্রভাবিত অ্যাপগুলিকে অনুপস্থিত অনুমতি দেওয়া হয় না যদিও তারা priv-app পাথে থাকে।
  • অ্যান্ড্রয়েড 9 এবং উচ্চতর সংস্করণে, লঙ্ঘন ( সুবিধাপ্রাপ্ত অনুমতিগুলির) মানে ডিভাইসটি বুট হয় না ৷ আপনাকে অবশ্যই সুস্পষ্টভাবে সমস্ত বিশেষাধিকারপ্রাপ্ত অনুমতিগুলিকে অনুমতি দিতে হবে বা অস্বীকার করতে হবে৷

মঞ্জুরি তালিকা কার্যকর করা

অনুমোদনের তালিকা তৈরি হওয়ার পরে, বিল্ড প্রপার্টি ro.control_privapp_permissions=enforce সেট করে রানটাইম এনফোর্সমেন্ট সক্ষম করুন।