Las apps con privilegios son apps del sistema ubicadas en un directorio priv-app
en un
partición de imagen del sistema. Las particiones que se usan para las versiones de Android son las siguientes:
- Android 9 y versiones posteriores:
/system, /product, /vendor
- Android 8.1 y versiones anteriores:
/system
Históricamente, los fabricantes de dispositivos tenían poco control sobre qué
firma | se podían otorgar permisos con privilegios
con privilegios mínimos. A partir de Android 8.0, los fabricantes pueden otorgar explícitamente
en los archivos XML de configuración del sistema en la
/etc/permissions
. A partir de Android 9, los implementadores pueden
otorgar o rechazar de forma explícita todos los permisos con privilegios. Si no se otorgan permisos con privilegios,
el dispositivo no se inicia.
El archivo privapp-permissions.xml
solo puede otorgar o rechazar
permisos para apps con privilegios en la misma partición. Por ejemplo,
una app en la partición /product
solicita permisos con privilegios
Solo un privapp-permissions.xml
puede aprobar o rechazar la solicitud
en /product
.
Agregar una lista de entidades permitidas
Las listas de entidades permitidas de permisos para apps se pueden enumerar en un solo archivo en formato XML
Archivos en formato XML ubicados en el directorio frameworks/base/etc/permissions
:
/etc/permissions/privapp-permissions-OEM_NAME.xml
/etc/permissions/privapp-permissions-DEVICE_NAME.xml
No se aplica ninguna regla estricta a la organización del contenido. Los implementadores de dispositivos
determinar la estructura del contenido siempre que todas las apps de /system/priv-app
están incluidos en la lista de entidades permitidas. Por ejemplo, Google desarrolló una lista de entidades permitidas única para todas las apps con privilegios.
Recomendamos la siguiente organización:
- Permisos para apps que ya se incluyen en
Proyecto de código abierto de Android (AOSP)
árbol se enumeran en
/etc/permissions/privapp-permissions-platform.xml
. - Para otras apps, usa archivos del formulario,
/etc/permissions/privapp-permissions-DEVICE_NAME.xml
Cómo personalizar una lista de entidades permitidas
AOSP incluye una implementación de lista de entidades permitidas que se puede personalizar según sea necesario.
Si se debe denegar un permiso, edita el XML para usar una etiqueta deny-permission
.
en lugar de una etiqueta permission
. Por 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> ...
Cómo buscar los permisos que faltan
Para encontrar los permisos que faltan cuando inicias un dispositivo nuevo, habilita el modo de registro de transición:
ro.control_privapp_permissions=log
Las infracciones se informan en el archivo de registro. Se otorgan permisos sin privilegios. Esto garantiza que el dispositivo permanezca en funcionamiento y, al mismo tiempo, proporcione la lista de incumplimientos. El formato del mensaje de error es el siguiente:
PackageManager: Privileged permission {PERMISSION_NAME} for package {PACKAGE_NAME} - not in privapp-permissions allowlist
Para abordar todos los incumplimientos, agrega los permisos que faltan a las listas de entidades permitidas correspondientes. Ten en cuenta lo siguiente:
- En Android 9 y versiones posteriores, las infracciones de los permisos con privilegios impiden que el dispositivo empezando. En su lugar, debes permitir o rechazar de forma explícita todos los permisos con privilegios.
- En Android 8.0 y versiones anteriores, los permisos faltantes no se otorgan a las apps afectadas, sin importar
está en la ruta
priv-app
.
Cómo aplicar una lista de entidades permitidas
Después de crear tus listas de entidades permitidas, configura la compilación para habilitar la aplicación forzosa del entorno de ejecución
propiedad ro.control_privapp_permissions=enforce
.
La lista de entidades permitidas solo es obligatoria para los permisos declarados por apps con
package="android"
El ro.control_privapp_permissions
el estado de la propiedad debe cumplir
Sección 9.1 Permisos
en el Documento de definición de compatibilidad (CDD).