Ayrıcalıklı uygulamalar, sistem görüntüsü bölümlerinden birinde özel priv-app
dizininde bulunan sistem uygulamalarıdır. Android sürümleri için kullanılan bölümler şunlardır:
- Android 8.1 ve altı -
/system
- Android 9 ve üstü -
/system, /product, /vendor
Bu sayfa boyunca /etc/permissions/priv-app
partition /etc/permissions/priv-app
çözümlenir.
Tarihsel olarak, cihaz üreticilerinin ayrıcalıklı uygulamalara hangi imza|ayrıcalıklı izinlerin verilebileceği üzerinde çok az kontrolü vardı. Android 8.0'dan başlayarak, üreticilerin /etc/permissions
dizinindeki sistem yapılandırma XML dosyalarında açıkça ayrıcalıklı izinler vermesi gerekir. Android 9'dan itibaren, uygulayıcılar tüm ayrıcalıklı izinleri açıkça vermeli veya reddetmelidir, aksi takdirde cihaz önyükleme yapmaz.
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
üzerinde bulunan bir privapp-permissions.xml
dosyası tarafından verilebilir veya reddedilebilir.
İzin verilenler listesi ekleme
Uygulamalar için izin verilenler listeleri, tek bir XML'de veya frameworks/base/etc/permissions
dizininde bulunan birden çok XML dosyasında aşağıdaki gibi listelenebilir:
-
/etc/permissions/privapp-permissions- OEM_NAME .xml
-
/etc/permissions/privapp-permissions- DEVICE_NAME .xml
İçeriği düzenlemek için 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, Google tarafından geliştirilen tüm ayrıcalıklı uygulamalar için tek bir izin verilenler listesine sahiptir ve aşağıdaki kuruluşu önerir:
- Android Açık Kaynak Projesi (AOSP) ağacına zaten dahil olan uygulamalar için izinler
/etc/permissions/privapp-permissions-platform.xml
içinde listelenir. - Google uygulamalarına ilişkin izinler
/etc/permissions/privapp-permissions-google.xml
içinde listelenmiştir. - Diğer uygulamalar için şu biçimdeki dosyaları kullanın:
/etc/permissions/privapp-permissions- DEVICE_NAME .xml
.
İzin verilenler listelerini özelleştirme
AOSP, gerektiğinde özelleştirilebilen bir izin verilenler listesi uygulaması içerir. AOSP'ye dahil olan uygulamalara ilişkin izinler, /etc/permissions/privapp-permissions-platform.xml
içinde zaten izin verilenler listesine eklenmiştir.
Reddedilmesi gereken izinler varsa, XML'i "izin" etiketi yerine "izin verme" 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 açarken eksik izinleri bulmak için geçiş günlüğü modunu etkinleştirin:
ro.control_privapp_permissions=log
İhlaller günlük dosyasında bildirilir, ancak ayrıcalıklı olmayan izinler yine de verilir. Bu, ihlallerin listesini sağlarken cihazı çalışır durumda tutar. Bu hata mesajı formatıdır:
PackageManager: Privileged permission {PERMISSION_NAME} for package {PACKAGE_NAME} - not in privapp-permissions allowlist
Eksik izinler uygun izin verilenler listelerine eklenerek tüm ihlaller giderilmelidir.
- Android 8.0 ve önceki sürümlerde, etkilenen uygulamalara özel
priv-app
yolunda olsalar bile eksik izinler verilmez. - Android 9 ve sonraki sürümlerde ( ayrıcalıklı izinlerin ihlali), cihazın önyükleme yapmadığı anlamına gelir. Tüm ayrıcalıklı izinlere açıkça izin vermeli veya bunları reddetmelisiniz
İzin verilenler listesini zorunlu kılma
İzin verilenler listeleri oluşturulduktan sonra, ro.control_privapp_permissions=enforce
yapı özelliğini ayarlayarak çalışma zamanı zorlamasını etkinleştirin.