Ayrıcalıklı izin izin verilenler listesi

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

  • Android 9 ve sonraki sürümler: /system, /product, /vendor
  • Android 8.1 ve önceki sürümler: /system

Geçmişte cihaz üreticileri, ayrıcalıklı uygulamalara hangi imza | ayrıcalıklı izinlerin verilebileceği konusunda çok az kontrole sahipti. Android 8.0'den itibaren üreticiler, /etc/permissions dizinindeki sistem yapılandırma XML dosyalarında ayrıcalıklı izinleri açıkça verebilir. 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 başlatılmaz.

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

İzin verilenler listesi ekleme

Uygulamaların izin izin verilenler listeleri tek bir XML dosyasında veya frameworks/base/etc/permissions dizininde bulunan birden fazla XML dosyasında listelenebilir:

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

İçeriğin düzenlenmesi konusunda katı bir kural yoktur. Cihaz uygulayıcıları, /system/priv-app'deki tüm uygulamalar izin verilenler listesine eklenmiş olduğu 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 kuruluşu öneririz:

  • Android Açık Kaynak Projesi (AOSP) ağacına dahil edilmiş uygulamaların izinleri /etc/permissions/privapp-permissions-platform.xml bölümünde 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 şekilde ö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. Örnek:

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

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

ro.control_privapp_permissions=log

İhlaller günlük dosyasında raporlanır. Ayrıcalıklı olmayan izinler verilir. Bu sayede, cihaz çalışır durumda kalır ve ihlallerin listesi sağlanır. Hata mesajı biçimi şu şekildedir:

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

Eksik izinler uygun izin listelerine eklenerek tüm ihlaller giderilmelidir. Aşağıdaki durumlarda:

  • Android 9 ve sonraki sürümlerde ayrıcalıklı izin ihlalleri cihazın başlatılmasını engeller. Bunun yerine, tüm ayrıcalıklı izinlere açık bir şekilde izin vermeniz veya bunları reddetmeniz gerekir.
  • Android 8.0 ve önceki sürümlerde, priv-app yolunda olmasına rağmen etkilenen uygulamalara eksik izinler verilmez.

İzin verilenler listesini zorunlu kılma

İzin verilenler listelerinizi oluşturduktan sonra, ro.control_privapp_permissions=enforce derleme mülkünü ayarlayarak çalışma zamanında yaptırımı etkinleştirin.

Yalnızca package="android" içeren uygulamalar tarafından beyan edilen izinler için izin verilenler listesine ekleme gereklidir. ro.control_privapp_permissions mülk durumu, Uyumluluk Tanımlama Belgesi'ndeki (CDD) 9.1 Bölüm İzinler'e uygun olmalıdır.