Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Lista de permisos de permisos privilegiados

Aplicaciones privilegiadas son aplicaciones del sistema que se encuentran en un priv-app del directorio en una de las imágenes parciales del sistema. Las particiones utilizadas para las versiones de Android son

  • Android 8.1 y menor - /system
  • Android 9 o superior - Los /system, /product, /vendor

A través de esta página, /etc/permissions/priv-app resuelve a partition /etc/permissions/priv-app .

Históricamente, los fabricantes de dispositivos tenían poco control sobre lo que la firma | permisos privilegiados podían concederse a aplicaciones privilegiadas. A partir de Android 8.0, los fabricantes deben conceder explícitamente permisos privilegiados en los archivos XML de configuración del sistema en el /etc/permissions directorio. A partir de Android 9, los implementadores deben otorgar o denegar explícitamente todos los permisos privilegiados o el dispositivo no arrancará.

El privapp-permissions.xml archivo sólo puede conceder o denegar permisos para aplicaciones privilegiadas en la misma partición. Por ejemplo, si una aplicación en la /product partición solicita permisos privilegiados, la solicitud sólo puede ser concedido o denegado por un privapp-permissions.xml archivo que también está en /product .

Agregar listas de permisos

Allowlists de permisos para aplicaciones se pueden enumerar en una sola XML o en varios archivos XML ubicados en el frameworks/base/etc/permissions directorio de la siguiente manera:

  • /etc/permissions/privapp-permissions- OEM_NAME .xml
  • /etc/permissions/privapp-permissions- DEVICE_NAME .xml

No existe una regla estricta para organizar el contenido. Ejecutores de dispositivos pueden determinar la estructura del contenido, siempre que todas las aplicaciones de /system/priv-app se allowlisted. Por ejemplo, Google tiene una única lista de permisos para todas las aplicaciones privilegiadas desarrolladas por Google y recomienda la siguiente organización:

  • Los permisos para aplicaciones que ya están incluidos en el árbol de Android Open Source Project (AOSP) se enumeran en /etc/permissions/privapp-permissions-platform.xml .
  • Los permisos para aplicaciones de Google se enumeran en /etc/permissions/privapp-permissions-google.xml .
  • Para otras aplicaciones, archivos de uso de la forma: /etc/permissions/privapp-permissions- DEVICE_NAME .xml .

Generando listas de permitidos

Para generar automáticamente un AllowList para todas las aplicaciones disponibles en la imagen del sistema, utilice la herramienta de línea de comandos PSE al development/tools/privapp_permissions/privapp_permissions.py . Para generar una versión inicial de específica del dispositivo privapp-permissions.xml :

  1. Construir una imagen del sistema:
        . build/envsetup.sh
        lunch PRODUCT_NAME
        make -j
  2. Ejecutar el privapp_permissions.py script para generar un privapp-permissions.xml archivo que muestra todas firma | permisos privilegiados requiere para ser allowlisted:
    development/tools/privapp_permissions/privapp_permissions.py
    Este contenido XML impresiones herramienta que se puede utilizar ya sea como un solo archivo, o dividido en varios archivos en el /etc/permissions ruta del directorio. Si el dispositivo ya incluye allowlists en los /etc/permissions directorios, la herramienta sólo imprime las diferencias (como la falta de firma | permisos privilegiados que hay que añadir a la AllowList). Esto también es útil para fines de auditoría: cuando se agrega una nueva versión de la aplicación, la herramienta detecta los permisos adicionales necesarios.
  3. Copiar los archivos generados con la apropiada /etc/permissions de directorio, donde el sistema lee los archivos durante el arranque.

Personalizar listas de permisos

AOSP incluye una implementación de lista de permisos que se puede personalizar según sea necesario. Los permisos para aplicaciones incluidas en AOSP ya están en allowlisted /etc/permissions/privapp-permissions-platform.xml .

Por defecto, el privapp_permissions.py script genera de salida que automáticamente concede ningún tipo de permiso solicitado por una aplicación privilegiada. Si hay permisos que deben denegarse, edite el XML para usar una etiqueta "denegar-permiso" en lugar de una etiqueta "permiso". Ejemplo:

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

Encontrar permisos faltantes

Para encontrar los permisos que faltan al abrir un nuevo dispositivo, habilite el modo de registro de transición:

ro.control_privapp_permissions=log

Las infracciones se informan en el archivo de registro, pero aún se otorgan permisos sin privilegios. Esto mantiene el dispositivo en un estado de funcionamiento al tiempo que proporciona la lista de infracciones. Este es el formato del mensaje de error:

PackageManager: Privileged permission {PERMISSION_NAME} for package {PACKAGE_NAME} - not in privapp-permissions allowlist

Todas las infracciones deben abordarse agregando los permisos que faltan a las listas de permisos correspondientes.

  • En Android 8.0 y más bajo, las aplicaciones afectadas no se conceden los permisos que faltan, incluso si están en el priv-app camino.
  • En Android 9 y superiores, violaciónes (de permisos privilegiados) significa que el dispositivo no arranca. Debe explícitamente permitir o denegar todos los permisos privilegiados

Hacer cumplir las listas de permisos

Después allowlists están en su lugar, permitir la aplicación de tiempo de ejecución mediante el establecimiento de las característica de la estructura ro.control_privapp_permissions=enforce .