Ayrıcalıklı İzin İzin Listesi

Ayrıcalıklı uygulamalar, sistem görüntüsü bölümündeki priv-app dizininde bulunan sistem uygulamalarıdır. Android sürümleri için kullanılan bölümler şunlardır:

  • Android 9 ve üzeri: /system, /product, /vendor
  • Android 8.1 ve altı: /system

Geçmişte cihaz üreticilerinin hangi imzanın | ayrıcalıklı uygulamalara ayrıcalıklı izinler verilebilir. Android 8.0'dan itibaren üreticiler, /etc/permissions dizinindeki sistem yapılandırması XML dosyalarında açıkça ayrıcalıklı izinler verebilirler. Android 9'dan itibaren uygulayıcılar tüm ayrıcalıklı izinleri açıkça verebilir veya reddedebilir. Ayrıcalıklı izinler verilmezse cihaz önyükleme yapmaz.

privapp-permissions.xml dosyası yalnızca aynı bölümdeki ayrıcalıklı uygulamalara izin verebilir veya reddedebilir. Örneğin, /product bölümündeki bir uygulama ayrıcalıklı izinler isterse, istek yalnızca /product üzerindeki privapp-permissions.xml dosyası tarafından verilebilir veya reddedilebilir.

İzin verilenler listesi ekle

Uygulamalara ilişkin izin verilenler listeleri, tek bir XML dosyasında veya frameworks/base/etc/permissions dizininde bulunan birden çok XML dosyasında listelenebilir:

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

İçeriğin nasıl düzenleneceği konusunda katı bir kural geçerli değildir. Cihaz uygulayıcıları /system/priv-app içindeki tüm uygulamalar izin verilenler listesine eklendiği sürece içerik yapısını belirleyebilir. Örneğin Google, tüm ayrıcalıklı uygulamalar için tek bir izin verilenler listesi geliştirmiştir. Aşağıdaki organizasyonu öneriyoruz:

  • Zaten Android Açık Kaynak Projesi (AOSP) ağacına dahil edilen uygulamaların izinleri /etc/permissions/privapp-permissions-platform.xml dosyasında listelenir.
  • Diğer uygulamalar için /etc/permissions/privapp-permissions- DEVICE_NAME .xml biçimindeki dosyaları kullanın.

İzin verilenler listesini özelleştirme

AOSP, gerektiği gibi özelleştirilebilen bir izin verilenler listesi uygulaması içerir.

Bir iznin reddedilmesi gerekiyorsa XML'i, permission etiketi yerine deny-permission etiketi kullanacak şekilde düzenleyin. Örneğin:

<!-- 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>
    ...

Eksik izinleri bulun

Yeni bir cihazı başlatırken eksik izinleri bulmak için geçiş günlüğü modunu etkinleştirin:

ro.control_privapp_permissions=log

İhlaller günlük dosyasında raporlanır. Ayrıcalıklı olmayan izinler verilir. Bunu yapmak, ihlallerin listesini sağlamaya devam ederken cihazın çalışır durumda kalmasını sağlar. Hata mesajı formatı aşağıdaki gibidir:

PackageManager: Privileged permission {PERMISSION_NAME} for package {PACKAGE_NAME} - not in privapp-permissions allowlist

Tüm ihlaller, eksik izinlerin uygun izin verilenler listesine eklenmesiyle giderilmelidir. Şunu unutmayın:

  • Android 9 ve üzeri, ayrıcalıklı izinlerin ihlali cihazın başlatılmasını engelliyor. Bunun yerine, tüm ayrıcalıklı izinlere açıkça izin vermeniz veya reddetmeniz gerekir.
  • Android 8.0 ve önceki sürümlerde, priv-app yolunda olmalarına rağmen etkilenen uygulamalara eksik izinler verilmemektedir.

İzin verilenler listesini zorunlu kıl

İzin verilenler listelerinizi oluşturduktan sonra ro.control_privapp_permissions=enforce derleme özelliğini ayarlayarak çalışma zamanı yaptırımını etkinleştirin.

İzin verilenler listesine ekleme yalnızca package="android" özelliğine sahip uygulamalar tarafından bildirilen izinler için gereklidir. ro.control_privapp_permissions özellik durumu, Uyumluluk Tanımı Belgesindeki (CDD) Bölüm 9.1 İzinler'e uygun olmalıdır.