Возможности позволяют процессам 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 был перенесен в:
- андроид-3.18:
- андроид-4.1:
Небольшое исправление безопасности https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b7f76ea2ef6739ee484a165ffbac98deb855d3d3 было перенесено в:
- андроид-3.18:
- андроид-4.1:
Валидация
Бионические модульные тесты включают в себя модульные тесты на возможности окружающей среды. Кроме того, использование ключевого слова «capabilities» в инициализации Android для службы и последующая проверка того, что служба получает ожидаемые возможности, позволит протестировать эту функцию во время выполнения.