Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.
Se usó la API de Cloud Translation para traducir esta página.
Switch to English

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 imágenes del sistema. Las particiones utilizadas para las versiones de Android son

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

En toda esta página, /etc/permissions/priv-app resuelve en la partition /etc/permissions/priv-app .

Históricamente, los fabricantes de dispositivos tenían poco control sobre qué firma | permisos privilegiados se podían otorgar a aplicaciones privilegiadas. A partir de Android 8.0, los fabricantes deben otorgar permisos privilegiados explícitamente 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 arrancará.

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 /vendor solicita permisos privilegiados, la solicitud solo puede ser otorgada o denegada por un archivo privapp-permissions.xml que también esté en /vendor .

Agregar listas de permisos

Las listas de permisos de permisos para aplicaciones se pueden enumerar en un solo XML o en varios archivos XML ubicados en el directorio frameworks/base/etc/permissions 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 permitidas. 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 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 .

Generando listas de permitidos

Para generar automáticamente una lista de permisos para todas las aplicaciones disponibles en la imagen del sistema, use la herramienta de línea de comandos AOSP en development/tools/privapp_permissions/privapp_permissions.py . Para generar una versión inicial de privapp-permissions.xml específico del dispositivo:

  1. Cree una imagen del sistema:
        . build/envsetup.sh
        lunch PRODUCT_NAME
        make -j
  2. Ejecute el script privapp_permissions.py para generar un archivo privapp-permissions.xml que enumere todas las firmas | permisos privilegiados necesarios para estar en la lista de permisos:
    development/tools/privapp_permissions/privapp_permissions.py
    Esta herramienta imprime contenido XML que se puede usar como un solo archivo o dividir en varios archivos en el /etc/permissions ruta del directorio. Si el dispositivo ya incluye listas de /etc/permissions directorios /etc/permissions , la herramienta solo imprime las diferencias (como la firma faltante | permisos privilegiados que necesita agregar a la lista de permisos). 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. Copie los archivos generados en el directorio /etc/permissions , 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 las aplicaciones incluidas en AOSP ya están listados en /etc/permissions/privapp-permissions-platform.xml .

De forma predeterminada, el script privapp_permissions.py genera una salida que otorga automáticamente cualquier permiso solicitado por una aplicación privilegiada. Si hay permisos que se deben denegar, edite el XML para usar una etiqueta "denegar-permiso" en lugar de una etiqueta "permiso". Ejemplo:

<!--
    This XML file declares which signature|privileged permissions should be
    granted 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 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 mientras proporciona la lista de violaciones. 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 faltantes a las listas de permisos correspondientes.

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

Hacer cumplir las listas de permisos

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