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

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 , /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. 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 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 formdaki dosyaları kullanın: /etc/permissions/privapp-permissions- DEVICE_NAME .xml .

İzin verilenler listesi oluşturuluyor

Sistem görüntüsünde bulunan tüm uygulamalar için otomatik olarak bir izin verilenler listesi oluşturmak için development/tools/privapp_permissions/privapp_permissions.py adresindeki AOSP komut satırı aracını development/tools/privapp_permissions/privapp_permissions.py . Cihaza özel privapp-permissions.xml ilk sürümünü oluşturmak için:

  1. Bir sistem görüntüsü oluşturun:
        . build/envsetup.sh
        lunch PRODUCT_NAME
        make -j
  2. privapp-permissions.xml listesine alınması gereken tüm imza|ayrıcalıklı izinleri listeleyen bir privapp-permissions.xml dosyası oluşturmak için privapp_permissions.py komut dosyasını çalıştırın:
    development/tools/privapp_permissions/privapp_permissions.py
    Bu araç, tek bir dosya olarak kullanılabilen veya /etc/permissions dizin yolu. Aygıt /etc/permissions dizinlerinde zaten /etc/permissions verilenler listeleri içeriyorsa, araç yalnızca farklılıkları yazdırır (örneğin, izin verilenler listesine eklemeniz gereken eksik imza|ayrıcalıklı izinler gibi). Bu, denetim amaçları için de yararlıdır: Uygulamanın yeni bir sürümü eklendiğinde, araç gerekli ek izinleri algılar.
  3. Oluşturulan dosyaları, sistemin önyükleme sırasında dosyaları okuduğu uygun /etc/permissions dizinine kopyalayın.

İ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 /etc/permissions/privapp-permissions-platform.xml .

Varsayılan olarak, privapp_permissions.py komut dosyası, ayrıcalıklı bir uygulama tarafından istenen tüm izinleri otomatik olarak veren çıktı oluşturur. Reddedilmesi gereken izinler varsa, XML'i "izin" etiketi yerine "izin verme" etiketi kullanacak şekilde düzenleyin. Misal:

<!-- 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.