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

Lista de permisos de permisos privilegiados

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

  • Android 8.1 y versiones anteriores - /system
  • Android 9 y superior: /system, /product, /vendor

A lo largo de esta página, /etc/permissions/priv-app se resuelve en la partition /etc/permissions/priv-app .

Históricamente, los fabricantes de dispositivos tenían poco control sobre qué firmas (permisos privilegiados ) se podían otorgar a las aplicaciones privilegiadas. A partir de Android 8.0, los fabricantes deben otorgar explícitamente permisos privilegiados en los archivos XML de configuración del sistema en el directorio /etc/permissions . A partir de Android 9, los implementadores deben otorgar o denegar explícitamente todos los permisos privilegiados o el dispositivo no se iniciará.

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

Agregar listas de permitidos

Las listas de permisos permitidos para las aplicaciones se pueden enumerar en un solo XML o en varios archivos XML ubicados en el directorio frameworks/base/etc/permissions 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. Los implementadores de dispositivos pueden determinar la estructura del contenido siempre que todas las aplicaciones de /system/priv-app estén en la lista de permitidos. Por ejemplo, Google tiene una única lista blanca para todas las aplicaciones privilegiadas desarrolladas por Google y recomienda la siguiente organización:

  • Los permisos para las aplicaciones que ya están incluidas en el árbol del Proyecto de código abierto de Android (AOSP) se enumeran en /etc/permissions/privapp-permissions-platform.xml .
  • Los permisos para las aplicaciones de Google se enumeran en /etc/permissions/privapp-permissions-google.xml .
  • Para otras aplicaciones, use archivos con el formato: /etc/permissions/privapp-permissions- DEVICE_NAME .xml .

Personalización de listas de permitidos

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

Si hay permisos que se deben denegar, edite el XML para usar una etiqueta de "denegación de permiso" en lugar de una etiqueta de "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 violaciones se informan en el archivo de registro, pero aún se otorgan permisos sin privilegios. Esto mantiene el dispositivo en un estado de funcionamiento mientras 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 permitidas correspondientes.

  • En Android 8.0 y versiones anteriores, las aplicaciones afectadas no obtienen los permisos que faltan, incluso si están en la ruta priv-app privada.
  • En Android 9 y superior, las violaciones (de permisos privilegiados ) significan que el dispositivo no arranca . Debe permitir o denegar explícitamente todos los permisos privilegiados

Hacer cumplir las listas de permitidos

Una vez que las listas de permitidos estén en su lugar, habilite la aplicación del tiempo de ejecución configurando la propiedad de compilación ro.control_privapp_permissions=enforce .