বিশেষ অনুমতি সাদাতালিকা

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

  • Android 9 ও তার পরের যেকোনও ভার্সন: /system, /product, /vendor
  • Android 8.1 ও তার আগের যেকোনও ভার্সন: /system

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

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

অ্যালাউ লিস্ট যোগ করুন

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

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

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

  • Android ওপেন সোর্স প্রজেক্ট (AOSP) ট্রি-তে আগে থেকেই অন্তর্ভুক্ত অ্যাপের অনুমতি /etc/permissions/privapp-permissions-platform.xml-এ তালিকাভুক্ত করা আছে।
  • অন্যান্য অ্যাপের জন্য, এই ধরনের ফাইল ব্যবহার করুন, /etc/permissions/privapp-permissions-DEVICE_NAME.xml.

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

AOSP-তে একটি অনুমোদিত তালিকা প্রয়োগ করা হয় যা প্রয়োজন অনুযায়ী কাস্টমাইজ করা যায়।

কোনও অনুমতি বাতিল করতে হলে, 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

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

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

অ্যালাউলিস্ট প্রয়োগ করা

আপনি অনুমতি তালিকা তৈরি করার পরে, বিল্ড প্রপার্টি ro.control_privapp_permissions=enforce সেট করে রানটাইম এনফোর্সমেন্ট চালু করুন।

শুধুমাত্র package="android"-এর মাধ্যমে অ্যাপের ঘোষণা করা অনুমতির জন্য অনুমতি তালিকায় যোগ করা প্রয়োজন। ro.control_privapp_permissions প্রপার্টির অবস্থা অবশ্যই বিভাগ ৯.১ অনুমতি Compatibility Definition Document (CDD)-এ মেনে চলতে হবে।