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.