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.