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

Оптимизируйте свои подборки Сохраняйте и классифицируйте контент в соответствии со своими настройками.

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

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

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

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

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

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

Патч основных возможностей окружения 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 init для службы, а затем проверка того, что служба получает ожидаемые возможности, позволит протестировать эту функцию во время выполнения.