Окружающие возможности

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

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

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

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

Включение возможностей окружающей среды

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

Например, чтобы включить возможности внешней среды для службы wificond AOSP, файл .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.

Основной патч возможностей окружения 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 было перенесено в:

Проверка

Бионические модульные тесты включают модульные тесты на возможности окружающей среды. Кроме того, использование ключевого слова «capabilities» в инициализации Android для службы и последующая проверка того, что служба получает ожидаемые возможности, позволит протестировать эту функцию во время выполнения.