Возможности спящего режима

Возможности позволяют процессам Linux отказаться от большинства привилегий root, сохранив при этом подмножество привилегий, необходимых для выполнения их функций. В исходной реализации возможностей процессы, созданные с помощью fork+exec, не могли наследовать возможности, если у выполняемых файлов не были настроены возможности файлов. В свою очередь, разрешения файлов представляют угрозу безопасности, поскольку любой процесс, выполняющий файл с разрешениями, может получить эти разрешения.

Окружающие возможности позволяют системным сервисам, запущенным init, настраивать возможности в своих файлах .rc. Это позволяет объединить конфигурацию в одном файле, а не разделять ее в файле fs_config.c. Это означает, что для любого сервиса, запущенного init, можно использовать файл .rc, связанный с сервисом, чтобы настроить его возможности.

Возможности окружения – это предпочтительный механизм для настройки возможностей сервисов, запускаемых init (этот метод позволяет хранить все аспекты конфигурации сервиса в одном файле .rc). Мы рекомендуем использовать возможности ambient вместо настройки возможностей файловой системы с помощью раздела caps в файлах config.fs.

При настройке возможностей для сервисов, не запущенных init, продолжайте настраивать возможности файловой системы с помощью fs_config.c.

Как включить функции спящего режима

Чтобы включить фоновые возможности для определенного сервиса, используйте ключевое слово capabilities в файле init. Подробную информацию о текущих языках инициализации можно найти в файле README.md.

Например, чтобы включить фоновые возможности для сервиса AOSP wificond, в файле.rc для сервиса wificond настраиваются соответствующие пользователь и группы, а также сервису предоставляются указанные возможности с помощью ключевого слова capabilities:

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

Пример реализации

Эталонная реализация – общее ядро Android https://android.googlesource.com/kernel/common/.

Обязательные исправления

Необходимые исправления были перенесены во все соответствующие ветки общего ядра Android.

Основное исправление для ambient capabilities https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=58319057b7847667f0c9585b9de0e8932b0fdb08 было перенесено в:

Небольшое исправление безопасности https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b7f76ea2ef6739ee484a165ffbac98deb855d3d3 было перенесено в следующие версии:

Проверка

Модульное тестирование Bionic включает модульное тестирование для функций Ambient. Кроме того, использование ключевого слова "capabilities" в Android init для сервиса и проверка того, что сервис получает ожидаемые возможности, позволит тестировать эту функцию во время выполнения.