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 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'dan itibaren üreticiler, /etc/permissions
dizinindeki sistem yapılandırması 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ümde ayrıcalıklı uygulamalar için izin verebilir veya izni reddedebilir. Örneğin, /product
bölümündeki bir uygulama ayrıcalıklı izinler isterse istek yalnızca /product
bölümündeki bir /product
dosyası tarafından verilebilir veya reddedilebilir.privapp-permissions.xml
İzin verilenler listesi ekleme
Uygulamalar için izin verilenler listeleri tek bir XML dosyasında veya /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 nasıl düzenleneceğiyle ilgili katı bir kural yoktur. 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 öneririz:
- Android Açık Kaynak Projesi (AOSP) ağacına zaten dahil edilmiş uygulamaların izinleri
/etc/permissions/privapp-permissions-platform.xml
bölümünde listelenir. - Diğer uygulamalar için şu biçimde dosyalar kullanın:
/etc/permissions/privapp-permissions-DEVICE_NAME.xml
.
İzin verilenler listesini özelleştirme
AOSP, gerektiği gibi özelleştirilebilen bir izin verilenler listesi uygulaması içerir.
Bir iznin reddedilmesi gerekiyorsa XML'yi 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 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ına bildirilir. Ayrıcalıklı olmayan izinler verilir. Bu sayede, cihaz çalışır durumda kalırken ihlal listesi de sağlanır. Hata mesajı biçimi şu şekildedir:
PackageManager: Privileged permission {PERMISSION_NAME} for package {PACKAGE_NAME} - not in privapp-permissions allowlist
Tüm ihlaller, eksik izinlerin uygun izin verilenler listelerine eklenmesiyle giderilmelidir. Şunları unutmayın:
- Android 9 ve sonraki sürümlerde, ayrıcalıklı izinlerin ihlali cihazın başlatılmasını engeller. Bunun yerine, tüm ayrıcalıklı izinlere açıkça izin vermeniz veya bunları reddetmeniz gerekir.
- Android 8.0 ve önceki sürümlerde,
priv-app
yolunda olmalarına rağmen eksik izinler etkilenen uygulamalara verilmez.
İzin verilenler listesini zorunlu kılma
İzin verilenler listelerinizi oluşturduktan sonra, build özelliğini ro.control_privapp_permissions=enforce
olarak ayarlayarak çalışma zamanı zorunluluğunu etkinleştirin.
İzin verilenler listesine ekleme yalnızca package="android"
ile belirtilen uygulamalar tarafından bildirilen izinler için gereklidir. ro.control_privapp_permissions
özellik durumu, Uyumluluk Tanımı Belgesi'ndeki (CDD) Bölüm 9.1 İzinler'e
uygun olmalıdır.