7.3 Compartir contenidos entre perfiles de forma controlada
En entornos de alta seguridad como GrapheneOS, la segregación de datos entre perfiles de usuario (personal, trabajo o aplicaciones aisladas) es esencial para minimizar fugas de información y preservar la privacidad. A continuación se describe en detalle cómo habilitar canales seguros de compartición de contenidos entre perfiles, manteniendo un control estricto sobre permisos, tipos de datos y contexto de uso.
7.3.1 Principios y fundamentos
Antes de implementar cualquier mecanismo de compartición es importante asentar los siguientes conceptos:
- Separación estricta: Cada perfil dispone de su propio sandbox de aplicaciones, datos y permisos.
- Contexto controlado: Solo los flujos de datos previstos por el administrador o política DPC (Device Policy Controller) deben estar habilitados.
- Mínimo privilegio: Conceder únicamente los permisos indispensables y limitar el alcance de la compartición a los datos necesarios.
- Registro y auditoría: Mantener trazabilidad de cada acción de compartición para auditorías futuras y detección de anomalías.
7.3.2 Mecanismos de compartición disponibles
-
Intents cruzados de perfil (Cross-Profile Intents)
GrapheneOS hereda de Android la capacidad de lanzar intents que crucen el umbral entre perfiles. Para garantizar la seguridad:
- Registrar filtros de intent en AndroidManifest con atributo
android:splitName
y etiquetaandroid:exported=false
donde proceda. - Configurar el DPC para permitir únicamente acciones concretas (por ejemplo
Intent.ACTION_SEND
con tipo MIME específico). - Validar en tiempo de ejecución el remitente mediante
getCallingUid()
y comprobaciones de firma de la aplicación.
- Registrar filtros de intent en AndroidManifest con atributo
-
Carpetas compartidas y proveedores de contenido (Content Providers)
Crear un proveedor de contenido personalizado con URI controladas:
- Definir
en AndroidManifest. - Establecer permisos
readPermission
ywritePermission
asociados a cada perfil. - Implementar
UriMatcher
para discriminar rutas de acceso según perfil solicitante.
- Definir
-
Portapapeles entre perfiles
El portapapeles en GrapheneOS ofrece opciones para copiar y pegar entre perfiles con prompt de confirmación:
- Habilitar en Ajustes ➔ Privacidad ➔ Portapapeles ➔ “Permitir solicitudes entre perfiles”.
- Limitar tipos de datos aceptados (texto plano, imágenes) desde el nivel de política DPC.
- Registrar cada operación, mostrando al usuario final el origen y destino antes de pegar.
-
Notificaciones ponderadas
Algunas aplicaciones requieren compartir notificaciones o acciones directas de un perfil a otro. Configure:
- Channels de notificación con atributo
setCrossProfileBehavior()
. - Permisos de respuesta remota (
PendingIntent.FLAG_MUTABLE
vsFLAG_IMMUTABLE
).
- Channels de notificación con atributo
7.3.3 Configuración avanzada y ejemplos prácticos
Un administrador DPC puede definir políticas más finas mediante DevicePolicyManager:
Política | Descripción | Control aplicado |
setCrossProfileCalendarPackages() | Permite compartir eventos de calendario entre perfiles. | Lista blanca de apps y tipos de evento. |
addCrossProfileIntentFilter() | Registra filtros de intent específicos que atraviesan perfiles. | Especificación de acciones, categorías y tipos MIME. |
setCrossProfileDataSharingPolicy() | Define si se permite copiar/pegar o transferencia de archivos adjuntos. | Deshabilitado, Solo lectura o Total. |
Ejemplo de código (en el módulo DPC):
DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE) ComponentName adminComponent = new ComponentName(context, MyDeviceAdminReceiver.class) // Permitir envío de imágenes entre perfiles IntentFilter filter = new IntentFilter(Intent.ACTION_SEND) filter.addDataType(image/) dpm.addCrossProfileIntentFilter(adminComponent, filter, DevicePolicyManager.FLAG_MANAGED_CAN_FORWARD)
7.3.4 Mejores prácticas y consejos
- Auditar periódicamente las políticas DPC y filtros de intent para eliminar reglas obsoletas.
- Aplicar cifrado de archivos sensibles incluso en rutas compartidas.
- Revisar logs de auditoría (logcat con permisos adecuados) y establecer alertas en caso de accesos inesperados.
- Educar al usuario final para que comprenda los mensajes de confirmación al compartir entre perfiles.
Conclusión
Compartir contenido entre perfiles en GrapheneOS requiere un enfoque meticuloso y basado en políticas claras. Al combinar intents cruzados, proveedores de contenido, configuraciones de portapapeles y notificaciones ponderadas con un Device Policy Controller bien configurado, podemos ofrecer al usuario una experiencia fluida sin comprometer la robustez de la seguridad y privacidad inherente al sistema.
Profundizando sobre: 7.3 Compartir contenidos entre perfiles de forma controlada
-
GrapheneOS Official Documentation
Sección “Sandboxed Work Profiles” y “Secure File Sharing” para configurar y controlar el intercambio de contenidos entre perfiles.
-
Manual de Perfiles en GrapheneOS
Guía paso a paso sobre creación, aislamiento y políticas de compartición de archivos entre perfiles.
-
Wiki de GrapheneOS en GitHub: Secure File Sharing
Explicaciones detalladas y ejemplos de configuración de Intents y URIs compartidos de forma controlada.
-
Android Security Internals (Nikolay Elenkov)
Capítulos sobre arquitectura multiusuario de Android, gestión de permisos y aislamiento de perfiles.
-
Documentación de Android Enterprise
API de Device Policy Manager para políticas de perfiles, control de intercambio de datos y restricciones.
-
Serie de videos “GrapheneOS Sandboxed Profiles”
Demostraciones prácticas de uso, configuración de carpetas compartidas y transferencia segura entre perfiles.
-
Foro oficial de GrapheneOS
Hilos de discusión y casos reales sobre cómo usuarios implementan el intercambio controlado de contenido.
Deja una respuesta