Ayrıcalıklı İzin İzin Verilenler Listesi

İmtiyazlı uygulamalar bir yer almaktadır sistem uygulamaları vardır priv-app sistem görüntüsü bölümleri birinde dizindeki. Android sürümleri için kullanılan bölümler şunlardır:

  • Robot 8.1 ve daha düşük - /system
  • Android 9 ve üstü - /system, /product, /vendor

Bu sayfada boyunca /etc/permissions/priv-app için giderir partition /etc/permissions/priv-app .

Ayrıcalıklı izinler ayrıcalıklı uygulamalar verilecek olabilir | Tarihsel olarak, cihaz üreticileri imza olarak çok az kontrol vardı. Android 8.0 başlayarak, üreticiler açıkça sistem yapılandırma XML dosyalarında ayrıcalıklı izinleri vermelisiniz /etc/permissions dizininde. 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ı sadece verebilir veya aynı bölüme ayrıcalıklı uygulamaların izinlerini inkar edemez. Bir uygulama Örneğin, /product bölümü ayrıcalıklı izinler, isteği yalnızca verilebilir veya bir tarafından reddedildi privapp-permissions.xml da var dosyanın /product .

İzin verilenler listesi ekleme

Uygulamalar için İzin allowlists tek XML veya yer birden XML dosyalarında listelenebilir frameworks/base/etc/permissions aşağıdaki gibi dizinde:

  • /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 tüm uygulamalar uzun gibi içerik yapısını belirlemek /system/priv-app allowlisted edilir. Ö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:

  • Zaten Android Açık Kaynak Projesi (AOSP) ağacının içerdiği uygulamalar için izinler listelenmiştir /etc/permissions/privapp-permissions-platform.xml .
  • Google uygulamaları için izinler listelenir /etc/permissions/privapp-permissions-google.xml .
  • Diğer uygulamalar, formun kullanım dosyaları için: /etc/permissions/privapp-permissions- DEVICE_NAME .xml .

İzin verilenler listesi oluşturuluyor

Tüm sistem görüntü üzerinde kullanılabilir uygulamalar için otomatik olarak bir AllowList oluşturmak için de AOSP komut satırı aracını kullanın development/tools/privapp_permissions/privapp_permissions.py . Cihaza özgü bir başlangıç sürümü oluşturmak için privapp-permissions.xml :

  1. Bir sistem görüntüsü oluşturma:
        . build/envsetup.sh
        lunch PRODUCT_NAME
        make -j
  2. Run privapp_permissions.py bir oluşturmak için komut dosyası privapp-permissions.xml : ayrıcalıklı izinler allowlisted gereken | tüm imza listeleri bu dosyayı
    development/tools/privapp_permissions/privapp_permissions.py
    birden fazla dosya içine tek bir dosya olarak da kullanılabilir Bu araç baskılar XML içerik veya bölünmüş içinde /etc/permissions dizin yolu. Cihaz zaten allowlists içeriyorsa /etc/permissions dizinleri, araç yalnızca (| sen AllowList eklemeniz gereken ayrıcalıklı izinler eksik imza gibi) farklılıkları yazdırır. Bu, denetim amaçları için de yararlıdır: Uygulamanın yeni bir sürümü eklendiğinde, araç gereken ek izinleri algılar.
  3. Uygun için oluşturulan dosyaları kopyalayın /etc/permissions Sistem açılışındaki dosyaları okur dizine.

İzin verilenler listelerini özelleştirme

AOSP, gerektiğinde özelleştirilebilen bir izin verilenler listesi uygulaması içerir. AOSP dahil uygulamalar için izinleri zaten allowlisted edilir /etc/permissions/privapp-permissions-platform.xml .

Varsayılan olarak, privapp_permissions.py script otomatik ayrıcalıklı uygulamanın istediği herhangi izni verir çıktı üretir. 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 sistemlerde etkilenen uygulamalar onlar bile eksik izinleri olmasa priv-app yolu.
  • Android 9 ve cihaz anlamına (ayrıcalıklı izinler) daha yüksek, ihlallerin üzerine çizme değil. Açıkça ya izin veya tüm ayrıcalıklı izinler inkar gerekir

İzin verilenler listesini zorunlu kılma

Allowlists yerlerini aldıktan sonra, inşa mülkiyet ayarlayarak çalışma zamanı uygulanmasını sağlayacak ro.control_privapp_permissions=enforce .