Definición de la política de SELinux para el servicio del sistema Android: cómo configurar?
Anteriormente había escrito un daemon independiente para acceder a un dispositivo personalizado (/ dev / mydev0). En cuanto a la fuente de AOSP, pensé que necesitaba políticas de configuración en los siguientes archivos para que funcione:
Nuevo archivo device.te que contiene:
- Android - implementar startForeground para un servicio?
- La mejor manera de determinar la aplicación actual (en ejecución) actual (utilizando un servicio?)
- Android: Multithreading-Bluetooth SPP / RFCOMM-Cómo mantener activo mi BluetoothSocket y OutputStream al cambiar Actividades
- Actualizar MusicPlayer SeekBar en servicio
- Android Asynctask vs Runnable vs timertask vs Servicio
type mydev_device, dev_type;
Nuevo archivo mydevsrvc.te que contiene
# service flash_recovery in init.rc type mydevsrvc_type, domain; type mydevsrvc_type_exec, exec_type, file_type; init_daemon_domain(mydevsrvc_type) allow mydevsrvc_type mydev_device:chr_file rw_file_perms;
Editado file_contexts para agregar:
/dev/mydev[0-9]* u:object_r:mydev_device:s0
Editado service_contexts para agregar:
mydevsrvc u:object_r:mydevsrvc_type:s0
Y comenzó el daemon editando init.flo.rc para incluir estas líneas:
service mydevsrvc /system/bin/mydevsrvc class main user system group system seclabel u:r:mydevsrvc_type:s0 oneshot
Ahora, necesito tener acceso al dispositivo en aplicaciones android, así que debo cambiar el daemon en un servicio del sistema del androide.
Puedo arrancar el servicio (hilo) usando BOOT_COMPLETED intento como explicado en una pregunta previa
No puedo averiguar cómo configurar las políticas SELinux para que este servicio java también pueda acceder al archivo dev.
[Actualizar] He seguido usando daemon privilegiado para este propósito. Mi servicio java se conecta a daemon a través de sockets. No tengo una solución mejor.
- ¿Cómo inicio un servicio que se define en un paquete diferente?
- El servicio androide deja de funcionar después de que la aplicación no esté en uso por un tiempo
- PARTIAL_WAKE_LOCK vs SCREEN_DIM_WAKE_LOCK en el subproceso de descarga
- StopSelf () vs stopSelf (int) vs stopService (Intención)
- Android - Iniciar un servicio con información adicional a través de put / getExtra
- El servicio de fondo necesita enviar la ubicación del GPS en el servidor
- Quiero publicar actualizaciones de ubicación cada 15 minutos al servidor incluso cuando la aplicación no se está ejecutando en primer plano
- Llamar el método de clase de actividad de la clase de servicio
A continuación se muestra un breve resumen de los pasos necesarios para implementar SELinux en su dispositivo Android:
Agregue el soporte de SELinux en el kernel y la configuración. Conceda cada servicio (proceso o daemon) iniciado desde init en su propio dominio. Identifique estos servicios: Revisando el archivo init..rc y encontrando todos los servicios. Examinar advertencias de la forma init: ¡Advertencia! El nombre del servicio necesita un dominio SELinux definido; ¡por favor, arregla! En salida dmesg. Comprobación de ps -Z | Grep init para ver qué servicios se ejecutan en el dominio init. Etiquete todos los nuevos procesos, controladores, sockets, etc. Todos los objetos deben estar etiquetados correctamente para asegurar que interactúan correctamente con las políticas que aplica. Consulte las etiquetas utilizadas en AOSP para ver los ejemplos a seguir en la creación de nombre de etiqueta. Instituir políticas de seguridad que cubran todas las etiquetas y restrinjan los permisos a su mínimo absoluto. Lo ideal es que los OEM empiecen con las políticas de AOSP y luego se basen en ellas para sus propias personalizaciones.
Para más https://source.android.com/security/selinux/implement.html