Возможности позволяют процессам Linux отказываться от большинства привилегий, аналогичных правам root, сохраняя при этом подмножество привилегий, необходимых для выполнения их функций. Первоначальная реализация возможностей делала невозможным наследование возможностей процессами, запускаемыми через fork+exec, если для выполняемых файлов не были настроены файловые возможности. Файловые возможности, в свою очередь, представляют собой угрозу безопасности, поскольку любой процесс, выполняющий файл с файловыми возможностями, может получить эти возможности.
Возможности Ambient позволяют системным службам, запускаемым init, настраивать свои возможности в файлах .rc , объединяя конфигурацию в одном файле вместо разделения конфигурации в файле fs_config.c . Это означает, что для любой службы, запускаемой init, вы можете использовать связанный с этой службой файл .rc для настройки возможностей этой службы.
Ambient capabilities — это предпочтительный механизм для настройки возможностей служб, запускаемых init (этот метод позволяет хранить все аспекты конфигурации службы в одном файле .rc ). Мы рекомендуем использовать Ambient capabilities вместо настройки возможностей файловой системы с помощью раздела caps в файлах config.fs .
При настройке возможностей служб, не запускаемых init , продолжайте настройку возможностей файловой системы с помощью fs_config.c .
Включить возможности фоновой обработки
Чтобы включить встроенные возможности для определенной службы, используйте ключевое слово capabilities в методе init. Подробную информацию о языке инициализации см. в файле README.md, посвященном методу init .
Например, чтобы включить возможности обработки окружающего трафика для службы 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 Common Core : https://android.googlesource.com/kernel/common/
Необходимые исправления
Необходимые исправления были перенесены во все соответствующие ветки общего ядра Android.
Основной патч для обеспечения совместимости с окружающими средами https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=58319057b7847667f0c9585b9de0e8932b0fdb08 был перенесен в следующую ветку:
- android-3.18:
- android-4.1:
Небольшое исправление безопасности https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b7f76ea2ef6739ee484a165ffbac98deb855d3d3 было перенесено в репозиторий:
- android-3.18:
- android-4.1:
Проверка
В состав модульных тестов Bionic входят тесты на проверку возможностей окружающей среды. Кроме того, использование ключевого слова "capabilities" в методе init Android для службы и последующая проверка того, что служба получает ожидаемые возможности, позволит проводить тестирование этой функции во время выполнения.