На этой странице описывается, как Android обрабатывает проблемы совместимости политик с беспроводными обновлениями платформы (OTA), при которых новые настройки SELinux платформы могут отличаться от старых настроек SELinux поставщика.
Право собственности на объект и маркировка
Владелец должен быть чётко определён для каждого объекта, чтобы политики платформы и поставщика были разделены. Например, если политика поставщика назначает метку /dev/foo
, а политика платформы – метку /dev/foo
в последующем OTA, возникнет неопределённое поведение, например, неожиданный отказ или, что ещё более важно, сбой загрузки. В SELinux это проявляется как конфликт меток. Узел устройства может иметь только одну метку, которая преобразуется в ту, которая была применена последней. В результате:
- Процессы, которым необходим доступ к неудачно примененной метке, теряют доступ к ресурсу.
- Процессы, получающие доступ к файлу, могут прерваться из-за создания неправильного узла устройства.
Конфликты между метками платформы и поставщика могут возникнуть для любого объекта с меткой SELinux, включая свойства, службы, процессы, файлы и сокеты. Чтобы избежать этих проблем, чётко определите владельца этих объектов.
Пространство имен типов/атрибутов
Помимо конфликтов меток, конфликтуют также имена типов и атрибутов SELinux. SELinux не допускает множественных объявлений одних и тех же типов и атрибутов. Политика с дублирующимися объявлениями не компилируется. Во избежание конфликтов имён типов и атрибутов настоятельно рекомендуется начинать все объявления вендоров с префикса vendor_
. Например, вендоры должны использовать type vendor_foo, domain;
вместо type foo, domain;
Право собственности на файл
Предотвращение коллизий файлов представляет собой сложную задачу, поскольку политики платформы и поставщика обычно предусматривают метки для всех файловых систем. В отличие от именования типов, использование пространств имён файлов нецелесообразно, поскольку многие из них создаются ядром. Чтобы предотвратить эти коллизии, следуйте рекомендациям по именованию файловых систем, представленным в этом разделе. Для Android 8.0 эти рекомендации не имеют технического контроля. В будущем эти рекомендации будут контролироваться Vendor Test Suite (VTS).
Система (/система)
Только образ системы должен предоставлять метки для компонентов /system
через file_contexts
, service_contexts
и т. д. Если метки для компонентов /system
добавлены в политику поставщика, обновление OTA только для фреймворка может оказаться невозможным.
Поставщик (/vendor)
Политика SELinux AOSP уже маркирует части раздела vendor
, с которыми взаимодействует платформа, что позволяет создавать правила SELinux для процессов платформы, чтобы они могли взаимодействовать с частями раздела vendor
или получать к ним доступ. Примеры:
/путь поставщика | Метка, предоставленная платформой | Процессы платформы в зависимости от лейбла |
---|---|---|
/vendor(/. * )? | vendor_file | Все клиенты HAL в фреймворке, ueventd и т. д. |
/vendor/framework(/. * )? | vendor_framework_file | dex2oat , appdomain и т. д. |
/vendor/app(/. * )? | vendor_app_file | dex2oat , installd , idmap и т. д. |
/vendor/overlay(/. * ) | vendor_overlay_file | system_server , zygote , idmap и т. д. |
В результате при маркировке дополнительных файлов в разделе vendor
необходимо соблюдать определенные правила (применяемые через neverallows
):
-
vendor_file
должна быть меткой по умолчанию для всех файлов в разделеvendor
. Политика платформы требует этого для доступа к реализациям HAL, проходящим через сервер. - Все новые
exec_types
добавляемые в разделvendor
через политику Vendor, должны иметь атрибутvendor_file_type
. Это обеспечивается с помощью neverallows. - Чтобы избежать конфликтов с будущими обновлениями платформы/фреймворка, не маркируйте файлы, отличные от
exec_types
в разделеvendor
. - Все зависимости библиотек для тех же процессов HAL, которые идентифицированы AOSP, должны быть помечены как
same_process_hal_file.
Procfs (/proc)
Файлы в каталоге /proc
можно пометить только меткой genfscon
. В Android 7.0 как платформа , так и политика поставщика использовали genfscon
для маркировки файлов в procfs
.
Рекомендация: Только политика платформы помечает /proc
. Если процессам поставщика требуется доступ к файлам в /proc
, которые в настоящее время помечены меткой по умолчанию ( proc
), политика поставщика не должна явно помечать их, а вместо этого должна использовать общий тип proc
для добавления правил для доменов поставщика. Это позволяет обновлениям платформы учитывать будущие интерфейсы ядра, предоставляемые через procfs
, и явно помечать их по мере необходимости.
Debugfs (/sys/kernel/debug)
Debugfs
могут быть помечены как в file_contexts
, так и в genfscon
. В версиях от Android 7.0 до Android 10 и платформа, и поставщик помечают debugfs
.
В Android 11 debugfs
недоступен и не монтируется на рабочих устройствах. Производителям устройств следует удалить debugfs
.
Tracefs (/sys/kernel/debug/tracing)
Tracefs
можно помечать как в file_contexts
, так и genfscon
. В Android 7.0 tracefs
помечает только платформа.
Рекомендация: Только платформа может маркировать tracefs
.
Sysfs (/sys)
Файлы в каталоге /sys
могут быть помечены как с помощью file_contexts
, так и с помощью genfscon
. В Android 7.0 и платформа, и поставщик используют genfscon
для маркировки файлов в sysfs
.
Рекомендация: Платформа может маркировать узлы sysfs
, не привязанные к конкретному устройству. В противном случае маркировать файлы может только поставщик.
tmpfs (/dev)
Файлы в каталоге /dev
могут быть помечены в file_contexts
. В Android 7.0 и платформа, и поставщик помечают файлы здесь.
Рекомендация: Поставщик может маркировать только файлы в /dev/vendor
(например, /dev/vendor/foo
, /dev/vendor/socket/bar
).
Rootfs (/)
Файлы в каталоге /
могут быть помечены в file_contexts
. В Android 7.0 и платформа, и поставщик помечают файлы здесь.
Рекомендация: Только система может маркировать файлы в /
.
Данные (/данные)
Данные маркируются с помощью комбинации file_contexts
и seapp_contexts
.
Рекомендация: запретить маркировку поставщиков за пределами /data/vendor
. Только платформа может маркировать другие части /data
.
Версия меток Genfs
Начиная с уровня API вендора 202504, новые метки SELinux, назначенные с помощью genfscon
в system/sepolicy/compat/plat_sepolicy_genfs_ ver .cil
являются необязательными для разделов старых vendor
. Это позволяет в разделах старых vendor
сохранять существующую реализацию SEPolicy. Это управляется переменной Makefile BOARD_GENFS_LABELS_VERSION
, которая хранится в /vendor/etc/selinux/genfs_labels_version.txt
.
Пример:
- На уровне API поставщика 202404 узел
/sys/class/udc
по умолчанию обозначен какsysfs
. - Начиная с уровня API поставщика 202504,
/sys/class/udc
обозначается какsysfs_udc
.
Однако /sys/class/udc
может использоваться разделами vendor
, использующими API уровня 202404, как с меткой sysfs
по умолчанию, так и с меткой, специфичной для поставщика. Безоговорочная маркировка /sys/class/udc
как sysfs_udc
может нарушить совместимость с этими разделами vendor
. Проверяя BOARD_GENFS_LABELS_VERSION
, платформа продолжает использовать предыдущие метки и разрешения для старых разделов vendor
.
BOARD_GENFS_LABELS_VERSION
может быть больше или равно уровню API поставщика. Например, разделы vendor
, использующие уровень API 202404, могут установить значение BOARD_GENFS_LABELS_VERSION
равным 202504, чтобы использовать новые метки, представленные в версии 202504. См. список меток genfs, специфичных для версии 202504 .
При маркировке узлов genfscon
платформа должна учитывать разделы старых vendor
и при необходимости реализовывать резервные механизмы для обеспечения совместимости. Платформа может использовать библиотеки, доступные только платформе, для запроса версии меток genfs.
- В нативной версии используйте
libgenfslabelsversion
. Заголовочный файлlibgenfslabelsversion
genfslabelsversion.h
- На Java используйте
android.os.SELinux.getGenfsLabelsVersion()
.
Платформа-государственная политика
Политика SELinux платформы делится на частную и публичную. Политика платформы-публичности состоит из типов и атрибутов, всегда доступных для уровня API поставщика , выступая в качестве API между платформой и поставщиком. Эта политика предоставляется разработчикам политик поставщиков, позволяя им создавать файлы политик поставщиков, которые в сочетании с частной политикой платформы создают полнофункциональную политику для устройства. Политика платформы-публичности определена в system/sepolicy/public
.
Например, тип vendor_init
, представляющий процесс init в контексте vendor, определен в system/sepolicy/public/vendor_init.te
:
type vendor_init, domain;
Поставщики могут ссылаться на тип vendor_init
для написания пользовательских правил политики:
# Allow vendor_init to set vendor_audio_prop in vendor's init scripts
set_prop(vendor_init, vendor_audio_prop)
Атрибуты совместимости
Политика SELinux — это взаимодействие между исходными и целевыми типами для определённых классов объектов и разрешений. Каждый объект (например, процессы, файлы), на который распространяется политика SELinux, может иметь только один тип, но этот тип может иметь несколько атрибутов.
Политика написана преимущественно на основе существующих типов. Здесь и vendor_init
, и debugfs
являются типами:
allow vendor_init debugfs:dir { mounton };
Это работает, поскольку политика была написана с учётом всех типов. Однако, если политика поставщика и политика платформы используют определённые типы, и метка конкретного объекта изменяется только в одной из этих политик, другая может содержать политику, которая даёт или лишает ранее полагавшийся доступ. Например, предположим, что политика платформы помечает узлы sysfs как sysfs
:
/sys(/.*)? u:object_r:sysfs:s0
Политика поставщика предоставляет доступ к /sys/usb
, помеченному как sysfs
:
allow vendor_init sysfs:chr_file rw_file_perms;
Если политика платформы изменена так, чтобы обозначить /sys/usb
как sysfs_usb
, политика поставщика останется прежней, но vendor_init
потеряет доступ к /sys/usb
из-за отсутствия политики для нового типа sysfs_usb
:
/sys/usb u:object_r:sysfs_usb:s0
Для решения этой проблемы в Android реализована концепция версионированных атрибутов. Во время компиляции система сборки автоматически транслирует открытые типы платформы, используемые в политике поставщика, в эти версионированные атрибуты. Это преобразование осуществляется путём сопоставления файлов, которые связывают версионированный атрибут с одним или несколькими открытыми типами платформы.
Например, предположим, что /sys/usb
помечен как sysfs
в политике платформы 202504, а политика поставщика 202504 предоставляет vendor_init
доступ к /sys/usb
. В этом случае:
- Политика поставщика записывает правило
allow vendor_init sysfs:chr_file rw_file_perms;
, поскольку/sys/usb
помечен какsysfs
в политике платформы 202504. Когда система сборки компилирует политику поставщика, она автоматически транслирует это правило вallow vendor_init _202504 sysfs _202504 :chr_file rw_file_perms;
. Атрибутыvendor_init_202504
иsysfs_202504
соответствуют типамvendor_init
иsysfs
, которые определены платформой. - Система сборки генерирует файл сопоставления идентификаторов
/system/etc/selinux/mapping/202504.cil
. Поскольку иsystem
, и разделыvendor
используют одну и ту же версию202504
, файл сопоставления содержит сопоставления идентификаторов изtype_202504
вtype
. Например,vendor_init_202504
сопоставлено сvendor_init
, аsysfs_202504
— сsysfs
:(typeattributeset sysfs_202504 (sysfs)) (typeattributeset vendor_init_202504 (vendor_init)) ...
При повышении версии с 202504 до 202604 в каталоге system/sepolicy/private/compat/202504/202504.cil
создаётся новый файл сопоставления для разделов vendor
202504, который устанавливается в /system/etc/selinux/mapping/202504.cil
для разделов system
202604 и более новых. Изначально этот файл сопоставления содержит сопоставления идентификаторов, как описано ранее. Если в политику платформы 202604 добавляется новая метка sysfs_usb
для /sys/usb
, файл сопоставления обновляется для сопоставления sysfs_202504
с sysfs_usb
:
(typeattributeset sysfs_202504 (sysfs sysfs_usb)) (typeattributeset vendor_init_202504 (vendor_init)) ...
Это обновление позволяет преобразованному правилу политики поставщика allow vendor_init_202504 sysfs_202504:chr_file rw_file_perms;
автоматически предоставлять доступ vendor_init
к новому типу sysfs_usb
.
Для поддержания совместимости со старыми разделами vendor
при каждом добавлении нового публичного типа этот тип должен быть сопоставлен по крайней мере с одним из версионных атрибутов в файле сопоставления system/sepolicy/private/compat/ ver / ver .cil
или указан в system/sepolicy/private/compat/ ver / ver .ignore.cil
чтобы указать, что в предыдущих версиях поставщика нет соответствующего типа.
Сочетание политики платформы, политики поставщика и файла сопоставления позволяет обновлять систему без обновления политики поставщика. Кроме того, преобразование в версионированные атрибуты происходит автоматически, поэтому политике поставщика не нужно заботиться о версионировании, и открытые типы данных используются как есть.
публичная и публичная политика продукта system_ext
Начиная с Android 11, разделы system_ext
и product
могут экспортировать свои назначенные публичные типы в раздел vendor
. Как и публичная политика платформы, политика vendor использует типы и правила, автоматически транслируемые в версионные атрибуты, например, из type
в type_ ver
, где ver — уровень API вендора для раздела vendor
.
Если разделы system_ext
и product
основаны на одной и той же версии платформы ver , система сборки генерирует базовые файлы сопоставления в system_ext/etc/selinux/mapping/ ver .cil
и product/etc/selinux/mapping/ ver .cil
, которые содержат сопоставления идентификаторов из type
в type_ ver
. Политика поставщика может получить доступ к type
с помощью версионного атрибута type_ ver
.
Если обновляются только разделы system_ext
и product
, например, до ver ver+1 (или более поздней версии), а раздел vendor
остаётся на ver , политика vendor может потерять доступ к типам разделов system_ext
и product
. Во избежание сбоев разделы system_ext
и product
должны предоставлять файлы сопоставления конкретных типов с атрибутами type_ ver
. Каждый партнёр несёт ответственность за поддержку файлов сопоставления, если он поддерживает разделы ver vendor
с system_ext
и product
версии ver+1 (или более поздней).
Чтобы установить файлы сопоставления с разделами system_ext
и product
, разработчикам устройств или поставщикам необходимо:
- Скопируйте сгенерированные файлы базового сопоставления из разделов ver
system_ext
иproduct
в их исходное дерево . - При необходимости внесите изменения в файлы сопоставления.
- Установите файлы сопоставления с разделами
system_ext
иproduct
ver+1 (или более поздней).
Например, предположим, что раздел system_ext
202504 содержит один публичный тип данных с именем foo_type
. Тогда system_ext/etc/selinux/mapping/202504.cil
в разделе system_ext
202504 выглядит следующим образом:
(typeattributeset foo_type_202504 (foo_type)) (expandtypeattribute foo_type_202504 true) (typeattribute foo_type_202504)
Если bar_type
добавлен в system_ext
202604 и bar_type
должен быть сопоставлен с foo_type
для раздела vendor
202504, 202504.cil
можно обновить с (typeattributeset foo_type_202504 (foo_type))
до (typeattributeset foo_type_202504 (foo_type bar_type))
и затем установить в раздел system_ext
202604. Раздел vendor
202504 может продолжать получать доступ к foo_type
и bar_type
раздела system_ext
202604.
Изменения атрибутов для Android 9
Устройства, обновляемые до Android 9, могут использовать следующие атрибуты, однако устройства, запускаемые с Android 9, не должны их использовать.
Атрибуты нарушителя
Android 9 включает следующие атрибуты, связанные с доменом:
-
data_between_core_and_vendor_violators
. Атрибут для всех доменов, нарушающих требование запрета на общий доступ к файлам по пути междуvendor
иcoredomains
. Процессы платформы и поставщика не должны использовать файлы на диске для взаимодействия (нестабильный ABI). Рекомендация:- Код поставщика должен использовать
/data/vendor
. - Система не должна использовать
/data/vendor
.
- Код поставщика должен использовать
-
system_executes_vendor_violators
. Атрибут для всех системных доменов (кроме доменовinit
иshell domains
), которые нарушают требование не выполнять исполняемые файлы вендора. API для выполнения исполняемых файлов вендора нестабилен. Платформа не должна выполнять исполняемые файлы вендора напрямую. Рекомендация:- Такие зависимости платформы от двоичных файлов поставщика должны находиться за HIDL HAL.
ИЛИ
-
coredomains
, которым необходим доступ к исполняемым файлам поставщика, следует переместить в разделvendor
и, таким образом, перестать бытьcoredomain
.
- Такие зависимости платформы от двоичных файлов поставщика должны находиться за HIDL HAL.
Ненадежные атрибуты
Недоверенные приложения, размещающие произвольный код, не должны иметь доступа к службам HwBinder, за исключением тех, которые считаются достаточно безопасными для доступа из таких приложений (см. раздел «Безопасные службы» ниже). Это обусловлено двумя основными причинами:
- Серверы HwBinder не выполняют аутентификацию клиентов, поскольку HIDL в настоящее время не раскрывает информацию об UID вызывающего абонента. Даже если бы HIDL раскрывал такие данные, многие службы HwBinder либо работают на уровне ниже уровня приложений (например, HAL), либо не должны полагаться на идентификацию приложения для авторизации. Таким образом, для обеспечения безопасности по умолчанию предполагается, что каждая служба HwBinder считает всех своих клиентов одинаково авторизованными для выполнения операций, предлагаемых службой.
- Серверы HAL (подмножество служб HwBinder) содержат код с более высокой частотой возникновения проблем безопасности, чем
system/core
компоненты, и имеют доступ к нижним уровням стека (вплоть до аппаратного обеспечения), тем самым увеличивая возможности обхода модели безопасности Android.
Безопасные услуги
Безопасные услуги включают в себя:
-
same_process_hwservice
. Эти службы (по определению) работают в процессе клиента и, следовательно, имеют тот же доступ, что и домен клиента, в котором работает процесс. -
coredomain_hwservice
. Эти сервисы не представляют рисков, связанных с причиной №2. -
hal_configstore_ISurfaceFlingerConfigs
. Эта служба специально разработана для использования любым доменом. -
hal_graphics_allocator_hwservice
. Эти операции также доступны через службуsurfaceflinger
Binder, доступ к которой разрешен приложениям. -
hal_omx_hwservice
. Это HwBinder-версия службыmediacodec
Binder, к которой приложениям разрешён доступ. -
hal_codec2_hwservice
. Это более новая версияhal_omx_hwservice
.
Полезные атрибуты
Все hwservices
не считающиеся безопасными, имеют атрибут untrusted_app_visible_hwservice
. Соответствующие серверы HAL имеют атрибут untrusted_app_visible_halserver
. Устройства с Android 9 НЕ ДОЛЖНЫ использовать ни один из атрибутов untrusted
.
Рекомендация:
- Недоверенные приложения должны вместо этого обращаться к системной службе, которая взаимодействует с HIDL HAL поставщика. Например, приложения могут обращаться к
binderservicedomain
, а затемmediaserver
(который также являетсяbinderservicedomain
) в свою очередь обращается кhal_graphics_allocator
.ИЛИ
- Приложения, которым необходим прямой доступ к HAL-спискам
vendor
должны иметь собственный домен sepolicy, определяемый поставщиком.
Тесты атрибутов файлов
Android 9 включает тесты времени сборки , которые гарантируют, что все файлы в определенных местах имеют соответствующие атрибуты (например, все файлы в sysfs
имеют требуемый атрибут sysfs_type
).
Маркировка контекстов SELinux
Чтобы обеспечить различие между политикой платформы и поставщика, система создает файлы контекста SELinux по-разному, чтобы сохранить их раздельность.
Контексты файлов
В Android 8.0 внесены следующие изменения для file_contexts
:
- Чтобы избежать дополнительных затрат на компиляцию на устройстве во время загрузки,
file_contexts
перестают существовать в двоичном виде. Вместо этого они представляют собой читаемые текстовые файлы с регулярными выражениями, такие как{property, service}_contexts
(как это было до версии 7.0). -
file_contexts
разделены между двумя файлами:-
plat_file_contexts
-
file_context
платформы Android, не имеющий меток, специфичных для устройства, за исключением маркировки частей раздела/vendor
, которые должны быть точно помечены для обеспечения правильного функционирования файлов sepolicy. - Должен находиться в
system
разделе по адресу/system/etc/selinux/plat_file_contexts
на устройстве и загружатьсяinit
при запуске вместе сfile_context
поставщика.
-
-
vendor_file_contexts
- Специфический для устройства
file_context
, созданный путем объединенияfile_contexts
, найденных в каталогах, на которые указываетBOARD_SEPOLICY_DIRS
в файлахBoardconfig.mk
устройства. - Должен быть установлен в
/vendor/etc/selinux/vendor_file_contexts
в разделеvendor
и загружатьсяinit
в начале вместе с платформойfile_context
.
- Специфический для устройства
-
Контексты свойств
В Android 8.0 property_contexts
разделен на два файла:
-
plat_property_contexts
-
property_context
платформы Android, не имеющее меток, специфичных для устройства. - Должен находиться в
system
разделе по адресу/system/etc/selinux/plat_property_contexts
и загружатьсяinit
в начале вместе сproperty_contexts
поставщика.
-
-
vendor_property_contexts
-
property_context
, специфичный для устройства, создается путем объединенияproperty_contexts
найденных в каталогах, на которые указываетBOARD_SEPOLICY_DIRS
в файлахBoardconfig.mk
устройства. - Должен находиться в разделе
vendor
по адресу/vendor/etc/selinux/vendor_property_contexts
и загружатьсяinit
при запуске вместе сproperty_context
платформы.
-
Контексты обслуживания
В Android 8.0 service_contexts
разделен между следующими файлами:
-
plat_service_contexts
-
service_context
, специфичный для платформы Android, дляservicemanager
. Контекстservice_context
не имеет меток, специфичных для устройства. - Должен находиться в
system
разделе по адресу/system/etc/selinux/plat_service_contexts
и загружатьсяservicemanager
при запуске вместе с поставщикомservice_contexts
.
-
-
vendor_service_contexts
-
service_context
, специфичный для устройства, создается путем объединенияservice_contexts
найденных в каталогах, на которые указываетBOARD_SEPOLICY_DIRS
в файлахBoardconfig.mk
устройства. - Должен находиться в разделе
vendor
по адресу/vendor/etc/selinux/vendor_service_contexts
и загружатьсяservicemanager
в начале вместе с платформойservice_contexts
. - Хотя
servicemanager
ищет этот файл во время загрузки, для полностью совместимого устройстваTREBLE
файлvendor_service_contexts
НЕ ДОЛЖЕН существовать. Это связано с тем, что всё взаимодействие между процессамиvendor
иsystem
ДОЛЖНО осуществляться черезhwservicemanager
/hwbinder
.
-
-
plat_hwservice_contexts
- Платформа Android
hwservice_context
дляhwservicemanager
, не имеющая меток, специфичных для устройства. - Должен находиться в
system
разделе по адресу/system/etc/selinux/plat_hwservice_contexts
и загружатьсяhwservicemanager
в начале вместе сvendor_hwservice_contexts
.
- Платформа Android
-
vendor_hwservice_contexts
- Специфический для устройства
hwservice_context
, созданный путем объединенияhwservice_contexts
, найденных в каталогах, на которые указываетBOARD_SEPOLICY_DIRS
в файлахBoardconfig.mk
устройства. - Должен находиться в разделе
vendor
по адресу/vendor/etc/selinux/vendor_hwservice_contexts
и загружатьсяhwservicemanager
в начале вместе сplat_service_contexts
.
- Специфический для устройства
-
vndservice_contexts
-
service_context
, специфичный для устройства, дляvndservicemanager
, созданный путем объединенияvndservice_contexts
, найденных в каталогах, на которые указываетBOARD_SEPOLICY_DIRS
вBoardconfig.mk
устройства. - Этот файл должен находиться в разделе
vendor
по адресу/vendor/etc/selinux/vndservice_contexts
и загружатьсяvndservicemanager
при запуске.
-
Контексты Seaapp
В Android 8.0 seapp_contexts
разделен на два файла:
-
plat_seapp_contexts
- Платформа Android
seapp_context
, не имеющая специфичных для устройства изменений. - Должен находиться в
system
разделе по адресу/system/etc/selinux/plat_seapp_contexts.
- Платформа Android
-
vendor_seapp_contexts
- Специфическое для устройства расширение платформы
seapp_context
, созданное путем объединенияseapp_contexts
, найденных в каталогах, на которые указываетBOARD_SEPOLICY_DIRS
в файлахBoardconfig.mk
устройства. - Должен находиться в разделе
vendor
по адресу/vendor/etc/selinux/vendor_seapp_contexts
.
- Специфическое для устройства расширение платформы
MAC-разрешения
В Android 8.0 файл mac_permissions.xml
разделен на два файла:
- Платформа
mac_permissions.xml
- Файл
mac_permissions.xml
для платформы Android, не имеющий изменений, специфичных для устройства. - Должен находиться в
system
разделе по адресу/system/etc/selinux/.
- Файл
- Неплатформенный
mac_permissions.xml
- Специфическое для устройства расширение для платформы
mac_permissions.xml
, созданное на основеmac_permissions.xml
, найденного в каталогах, на которые указываетBOARD_SEPOLICY_DIRS
в файлахBoardconfig.mk
устройства. - Должен располагаться в разделе
vendor
по адресу/vendor/etc/selinux/.
- Специфическое для устройства расширение для платформы