Capacidades ambientales

Las capacidades permiten que los procesos de Linux eliminen la mayoría de los privilegios de raíz, mientras que y retienen el subconjunto de privilegios que necesitan para cumplir su función. La implementación original de las capacidades impidió que la ejecución de fork+exec para heredar capacidades, a menos que los archivos en ejecución tuvieran capacidades configuradas. A su vez, las funciones de archivos presentan un riesgo de seguridad ya que cualquier proceso que ejecute un archivo con capacidades de archivo puede esas capacidades.

Las capacidades ambiente permiten que los servicios del sistema iniciados por init se configuren en sus archivos .rc, lo que permite que la configuración un solo archivo, en lugar de dividir la configuración en el archivo fs_config.c. Esto significa que, para cualquier servicio que inicie init, puedes usar el archivo .rc asociado con el servicio para configurar capacidades para ese servicio.

Las capacidades ambientales son el mecanismo preferido para establecer capacidades para los servicios lanzados por init (este método mantiene todos los aspectos configuración en un solo archivo .rc). Recomendamos usar modo en lugar de configurando el archivo del sistema con la sección de límites en archivos config.fs.

Cuando configuras capacidades para servicios no iniciados por init, sigue configurando las capacidades del sistema de archivos fs_config.c

Cómo habilitar las funciones de ambiente

Para habilitar las capacidades ambientales para un servicio determinado, usa el Palabra clave capabilities en el valor init. Para el idioma init actual consulta la página init README.md.

Por ejemplo, para habilitar las capacidades ambiente para el servicio del AOSP. wificond, el Archivo.rc para el servicio wificond, configura la usuario y grupos, y le da al servicio las capacidades especificadas usando el Palabra clave capabilities:

service wificond /system/bin/wificond
    class main
    user wifi
    group wifi net_raw net_admin
    capabilities NET_RAW NET_ADMIN

Implementación de referencia

La implementación de referencia es el kernel común de Android: https://android.googlesource.com/kernel/common/.

Parches necesarios

Se trasladaron los parches necesarios a todos los kernel comunes de Android relevantes. ramas.

Parche principal de capacidades ambientales: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=58319057b7847667f0c9585b9de0e8932b0fdb08 se trasladaron a una versión anterior en:

Una pequeña solución de seguridad: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b7f76ea2ef6739ee484a165ffbac98deb855d3d3 se trasladaron a una versión anterior en:

Validación

Biónico las pruebas de unidades incluyen pruebas de unidades para las capacidades de ambiente. Más allá de eso, usar las “capacidades” en el init de Android de un servicio y, luego, comprobar que el servicio obtiene las capacidades esperadas permitirían realizar pruebas en el tiempo de ejecución de esta función.