Na tej stronie opisujemy, jak Android radzi sobie z problemami ze zgodnością zasad podczas aktualizacji platformy OTA, gdy nowe ustawienia SELinux platformy mogą różnić się od starych ustawień SELinux dostawcy.
Własność obiektów i ich oznaczanie
Własność każdego obiektu musi być jasno określona, aby zachować rozdzielenie zasad platformy i zasad dostawcy. Jeśli na przykład zasady dostawcy oznaczają /dev/foo, a zasady platformy oznaczają /dev/foo w kolejnej aktualizacji OTA, wystąpi nieokreślone zachowanie, takie jak nieoczekiwane odrzucenie lub, co ważniejsze, błąd rozruchu. W przypadku SELinux objawia się to jako kolizja etykiet. Węzeł urządzenia może mieć tylko jedną etykietę, która jest ostatnią zastosowaną etykietą.
W rezultacie:
- Procesy, które potrzebują dostępu do etykiety, której nie udało się zastosować, tracą dostęp do zasobu.
- Procesy, które uzyskują dostęp do pliku, mogą ulec awarii, ponieważ utworzono nieprawidłowy węzeł urządzenia.
Kolizje między etykietami platformy i dostawcy mogą wystąpić w przypadku dowolnego obiektu, który ma etykietę SELinux, w tym właściwości, usług, procesów, plików i gniazd. Aby uniknąć tych problemów, wyraźnie określ własność tych obiektów.
Przestrzeń nazw typu lub atrybutu
Oprócz kolizji etykiet mogą też wystąpić kolizje nazw typów i atrybutów SELinux. SELinux nie zezwala na wiele deklaracji tych samych typów i atrybutów. Zasady z powtarzającymi się deklaracjami nie zostaną skompilowane. Aby uniknąć kolizji nazw typów i atrybutów, zalecamy, aby wszystkie deklaracje dostawców zaczynały się od prefiksu vendor_. Na przykład sprzedawcy powinni używać znacznika type vendor_foo, domain; zamiast type foo, domain;.
Własność pliku
Zapobieganie kolizjom w przypadku plików jest trudne, ponieważ zasady platformy i dostawcy zwykle udostępniają etykiety dla wszystkich systemów plików. W przeciwieństwie do nazewnictwa typów, przestrzenie nazw plików nie są praktyczne, ponieważ wiele z nich jest tworzonych przez jądro. Aby zapobiec takim kolizjom, postępuj zgodnie z wskazówkami dotyczącymi nazewnictwa systemów plików podanymi w tej sekcji. W przypadku Androida 8.0 są to zalecenia bez egzekwowania technicznego. W przyszłości te rekomendacje będą egzekwowane przez pakiet testów dostawcy (VTS).
System (/system)
Tylko obraz systemu musi zawierać etykiety dla komponentów /system–file_contexts, service_contexts itp. Jeśli etykiety dla komponentów /system zostaną dodane w zasadach dostawcy, aktualizacja OTA obejmująca tylko platformę może być niemożliwa.
Dostawca (/vendor)
Zasady SELinux w AOSP już oznaczają części partycji vendor, z którymi platforma wchodzi w interakcję, co umożliwia pisanie reguł SELinux dla procesów platformy, aby mogły one komunikować się z częściami partycji vendor lub uzyskiwać do nich dostęp. Przykłady:
| /vendor path | Etykieta dostarczona przez platformę | Procesy platformy w zależności od etykiety |
|---|---|---|
/vendor(/.*)?
|
vendor_file
|
Wszyscy klienci HAL w ramach, ueventd itp.
|
/vendor/framework(/.*)?
|
vendor_framework_file
|
dex2oat, appdomain itp.
|
/vendor/app(/.*)?
|
vendor_app_file
|
dex2oat, installd, idmap itp.
|
/vendor/overlay(/.*)
|
vendor_overlay_file
|
system_server, zygote, idmap itp.
|
W związku z tym podczas etykietowania dodatkowych plików w neverallows partycji należy przestrzegać określonych reguł (egzekwowanych za pomocą neverallows):vendor
vendor_filemusi być domyślną etykietą wszystkich plików w partycjivendor. Zasada platformy wymaga tego, aby uzyskać dostęp do implementacji HAL przekazywania.- Wszystkie nowe
exec_typesdodane wvendorpartycji za pomocą zasad dostawcy muszą mieć atrybutvendor_file_type. Jest to egzekwowane za pomocą reguł neverallow. - Aby uniknąć konfliktów z przyszłymi aktualizacjami platformy lub struktury, nie oznaczaj plików innych niż
exec_typesw partycjivendor. - Wszystkie zależności biblioteki w przypadku interfejsów HAL w tym samym procesie zidentyfikowanych przez AOSP muszą być oznaczone jako
same_process_hal_file..
Procfs (/proc)
Pliki w /proc można oznaczać tylko etykietą genfscon. W Androidzie 7.0 zarówno zasady platformy, jak i zasady dostawcy używały genfscon do oznaczania plików w procfs.
Zalecenie: tylko etykiety zasad platformy /proc.
Jeśli procesy dostawcy wymagają dostępu do plików w /proc, które są obecnie oznaczone domyślną etykietą (proc), zasady dostawcy nie powinny ich wyraźnie oznaczać, ale zamiast tego powinny używać ogólnego typu proc do dodawania reguł dla domen dostawcy. Dzięki temu aktualizacje platformy mogą uwzględniać przyszłe interfejsy jądra udostępniane przez procfs i w razie potrzeby wyraźnie je oznaczać.
Debugfs (/sys/kernel/debug)
Debugfs może być oznaczona w file_contexts i genfscon. W Androidzie 7.0–10 zarówno etykieta platformy, jak i etykieta dostawcy.debugfs
W Androidzie 11 debugfs nie można uzyskać dostępu ani zamontować na urządzeniach produkcyjnych. Producenci urządzeń powinni usunąć debugfs.
Tracefs (/sys/kernel/debug/tracing)
Tracefs może być oznaczona w file_contexts i genfscon. W Androidzie 7.0 tylko etykiety platformytracefs.
Rekomendacja: tylko platforma może oznaczać tracefs.
Sysfs (/sys)
Pliki w /sys mogą być oznaczane etykietami za pomocą file_contexts i genfscon. W Androidzie 7.0 zarówno platforma, jak i dostawca używają genfscon do oznaczania plików w sysfs.
Rekomendacja: platforma może oznaczać sysfswęzły, które nie są specyficzne dla urządzenia. W przeciwnym razie tylko dostawca może oznaczać pliki.
tmpfs (/dev)
Pliki w folderze /dev mogą być oznaczone etykietami w usłudze file_contexts. W Androidzie 7.0 zarówno platforma, jak i dostawca mają tutaj pliki etykiet.
Zalecenie: dostawca może oznaczać tylko pliki w /dev/vendor (np. /dev/vendor/foo, /dev/vendor/socket/bar).
Rootfs (/)
Pliki w folderze / mogą być oznaczone etykietami w usłudze file_contexts. W Androidzie 7.0 znajdują się tu pliki etykiet platformy i dostawcy.
Zalecenie: tylko system może oznaczać pliki w /.
Dane (/data)
Dane są oznaczane etykietami za pomocą kombinacji file_contexts i seapp_contexts.
Rekomendacja: nie zezwalaj na etykietowanie przez dostawcę poza
/data/vendor. Tylko platforma może oznaczać inne części/data.
Wersja etykiet Genfs
Począwszy od poziomu interfejsu API dostawcy 202504, nowsze etykiety SELinux przypisywane za pomocą genfscon w system/sepolicy/compat/plat_sepolicy_genfs_ver.cil są opcjonalne w przypadku starszych partycji vendor. Dzięki temu starsze partycjevendor mogą zachować dotychczasową implementację SEPolicy.
Jest to kontrolowane przez zmienną pliku Makefile BOARD_GENFS_LABELS_VERSION, która jest przechowywana w /vendor/etc/selinux/genfs_labels_version.txt.
Przykład:
-
W interfejsie API dostawcy na poziomie 202404 węzeł
/sys/class/udcjest domyślnie oznaczony etykietąsysfs. -
Od poziomu interfejsu API dostawcy 202504 parametr
/sys/class/udcjest oznaczony jakosysfs_udc.
/sys/class/udc może być jednak używane przez vendor
partycje korzystające z interfejsu API na poziomie 202404, z domyślną etykietą sysfs
lub etykietą dostawcy. Bezwarunkowe oznaczanie /sys/class/udc jako sysfs_udc może spowodować utratę zgodności z tymi partycjami vendor. Jeśli zaznaczysz pole wyboru BOARD_GENFS_LABELS_VERSION, platforma będzie nadal używać poprzednich etykiet i uprawnień w przypadku starszych partycji vendor.
BOARD_GENFS_LABELS_VERSION może być równa lub większa niż poziom interfejsu API dostawcy. Na przykład vendor partycje korzystające z interfejsu API na poziomie 202404 mogą ustawić BOARD_GENFS_LABELS_VERSION na 202504, aby zastosować nowe etykiety wprowadzone w 202504 r. Zobacz listę
etykiet genfs dotyczących kodu 202504.
Podczas etykietowania węzłów genfscon platforma musi uwzględniać starsze partycje vendor i w razie potrzeby wdrażać mechanizmy rezerwowe zapewniające zgodność. Platforma może używać bibliotek dostępnych tylko na platformie do wysyłania zapytań o wersję etykiet genfs.
-
W przypadku reklam natywnych użyj parametru
libgenfslabelsversion. Plik nagłówkowylibgenfslabelsversionznajdziesz wgenfslabelsversion.h. -
W przypadku Javy użyj
android.os.SELinux.getGenfsLabelsVersion().
Polityka publiczna platformy
Polityka SELinux platformy jest podzielona na część prywatną i publiczną. Zasady publiczne platformy składają się z typów i atrybutów, które są zawsze dostępne na poziomie interfejsu API dostawcy, pełniąc funkcję interfejsu API między platformą a dostawcą. Ta zasada jest udostępniana autorom zasad dostawców, aby umożliwić im tworzenie plików zasad dostawców, które w połączeniu z zasadami prywatnymi platformy tworzą w pełni funkcjonalne zasady dotyczące urządzenia. Zasady platformy są zdefiniowane w system/sepolicy/public.
Na przykład typ vendor_init, reprezentujący proces inicjowania w kontekście dostawcy, jest zdefiniowany w system/sepolicy/public/vendor_init.te:
type vendor_init, domain;
Dostawcy mogą użyć typu vendor_init, aby napisać niestandardowe reguły zasad:
# Allow vendor_init to set vendor_audio_prop in vendor's init scripts
set_prop(vendor_init, vendor_audio_prop)Atrybuty zgodności
Zasady SELinux to interakcja między typami źródłowymi i docelowymi w przypadku określonych klas obiektów i uprawnień. Każdy obiekt (np. procesy, pliki) objęty zasadami SELinux może mieć tylko 1 typ, ale ten typ może mieć wiele atrybutów.
Zasady są w większości sformułowane w odniesieniu do istniejących typów. W tym przypadku zarówno vendor_init, jak i debugfs są typami:
allow vendor_init debugfs:dir { mounton };
Działa to dlatego, że zasady zostały opracowane z uwzględnieniem wszystkich typów. Jeśli jednak zasady dostawcy i zasady platformy używają określonych typów, a etykieta konkretnego obiektu zmieni się tylko w jednych z tych zasad, w drugich może znajdować się zasada, która wcześniej zyskała lub utraciła dostęp. Załóżmy na przykład, że etykiety zasad platformy oznaczają węzły sysfs jako sysfs:
/sys(/.*)? u:object_r:sysfs:s0
Zasady dostawcy zapewniają dostęp do /sys/usb oznaczonego jakosysfs:
allow vendor_init sysfs:chr_file rw_file_perms;
Jeśli zasady platformy zostaną zmienione tak, aby oznaczać /sys/usb jako sysfs_usb, zasady dostawcy pozostaną bez zmian, ale vendor_init utraci dostęp do /sys/usb z powodu braku zasad dotyczących nowego typu sysfs_usb:
/sys/usb u:object_r:sysfs_usb:s0
Aby rozwiązać ten problem, Android wprowadza koncepcję atrybutów z określoną wersją. Podczas kompilacji system kompilacji automatycznie tłumaczy publiczne typy platformy używane w zasadach dostawcy na te atrybuty z określoną wersją. To tłumaczenie jest możliwe dzięki plikom mapowania, które łączą atrybut z wersją z co najmniej 1 publicznym typem z platformy.
Załóżmy na przykład, że w zasadach platformy 202504 element /sys/usb jest oznaczony etykietą sysfs, a zasady dostawcy 202504 przyznają elementowi vendor_init dostęp do elementu /sys/usb. W takim przypadku:
-
Zasady dostawcy tworzą regułę
allow vendor_init sysfs:chr_file rw_file_perms;, ponieważ/sys/usbjest oznaczony jakosysfsw zasadach platformy 202504. Gdy system kompilacji kompiluje zasady dostawcy, automatycznie tłumaczy regułę naallow vendor_init_202504 sysfs_202504:chr_file rw_file_perms;. Atrybutyvendor_init_202504isysfs_202504odpowiadają typomvendor_initisysfs, które są typami zdefiniowanymi przez platformę. -
System kompilacji generuje plik mapowania tożsamości
/system/etc/selinux/mapping/202504.cil. Ponieważ partycjesystemivendorkorzystają z tej samej wersji202504, plik mapowania zawiera mapowania tożsamości ztype_202504natype. Na przykład:vendor_init_202504jest mapowany navendor_init, asysfs_202504jest mapowany nasysfs:(typeattributeset sysfs_202504 (sysfs)) (typeattributeset vendor_init_202504 (vendor_init)) ...
Gdy wersja zostanie zmieniona z 202504 na 202604, w folderze system/sepolicy/private/compat/202504/202504.cil zostanie utworzony nowy plik mapowania dla partycji 202504
vendor, który zostanie zainstalowany w folderze /system/etc/selinux/mapping/202504.cil na partycjach 202604
lub nowszych system. Początkowo ten plik mapowania zawiera mapowania tożsamości, jak opisano wcześniej. Jeśli do zasad platformy 202604 zostanie dodana nowa etykieta sysfs_usb
dla /sys/usb, plik mapowania zostanie zaktualizowany, aby zmapować sysfs_202504 na sysfs_usb:
(typeattributeset sysfs_202504 (sysfs sysfs_usb)) (typeattributeset vendor_init_202504 (vendor_init)) ...
Ta aktualizacja umożliwia przekonwertowanej regule zasad dostawcy allow
vendor_init_202504 sysfs_202504:chr_file rw_file_perms; automatyczne przyznawanie vendor_init dostępu do nowego typu sysfs_usb.
Aby zachować zgodność ze starszymi partycjami vendor, za każdym razem, gdy dodawany jest nowy typ publiczny, musi on być mapowany na co najmniej jeden z atrybutów z określoną wersją w pliku mapowania system/sepolicy/private/compat/ver/ver.cil lub musi być wymieniony w sekcji system/sepolicy/private/compat/ver/ver.ignore.cil, aby wskazać, że w poprzednich wersjach dostawcy nie ma pasującego typu.
Połączenie zasad platformy, zasad dostawcy i pliku mapowania umożliwia aktualizację systemu bez aktualizowania zasad dostawcy. Konwersja na atrybuty z określoną wersją odbywa się automatycznie, więc zasady sprzedawcy nie muszą uwzględniać wersji. Można nadal używać typów publicznych w niezmienionej postaci.
system_ext public and product public policy
Od Androida 11 partycje system_ext i product mogą eksportować wyznaczone typy publiczne do partycji vendor. Podobnie jak w przypadku zasad publicznych platformy, zasady dostawcy korzystają z typów i reguł automatycznie tłumaczonych na atrybuty z określoną wersją, np. z type na type_ver, gdzie ver to poziom interfejsu API dostawcy w przypadku partycji vendor.
Gdy partycje system_ext i product są oparte na tej samej wersji platformyver, system kompilacji generuje podstawowe pliki mapowania do system_ext/etc/selinux/mapping/ver.cil i product/etc/selinux/mapping/ver.cil, które zawierają mapowania tożsamości z type na type_ver.
Zasady dostawcy mogą uzyskać dostęp do type za pomocą atrybutu z określoną wersją
type_ver.
Jeśli zaktualizowane zostaną tylko partycje system_ext i product, np. z ver na ver+1 (lub nowszą), a partycja vendor pozostanie na poziomie ver, zasady dostawcy mogą utracić dostęp do typów partycji system_ext i product. Aby zapobiec przerwaniu, partycje system_ext i product powinny udostępniać pliki mapowania z konkretnych typów na atrybuty type_ver. Każdy partner jest odpowiedzialny za utrzymywanie plików mapowania, jeśli obsługuje partycję ver vendor z ver+1 (lub nowszą) system_ext i partycje product.
Aby zainstalować pliki mapowania na partycjach system_ext i product, producenci urządzeń lub dostawcy powinni:
- Skopiuj wygenerowane podstawowe pliki mapowania z partycji ver,
system_extiproductdo drzewa źródłowego. - W razie potrzeby zmień pliki mapowania.
-
Zainstaluj pliki mapowania na partycjach ver+1 (lub nowszych)
system_extiproduct.
Załóżmy na przykład, że partycja 202504 system_ext ma jeden typ publiczny o nazwie foo_type. W takim przypadku partycja 202504 system_ext wygląda tak:system_ext/etc/selinux/mapping/202504.cil
(typeattributeset foo_type_202504 (foo_type)) (expandtypeattribute foo_type_202504 true) (typeattribute foo_type_202504)
Jeśli do 202604 system_ext zostanie dodany element bar_type, a element bar_type powinien być mapowany na foo_type w przypadku partycji 202504 vendor, element 202504.cil można zaktualizować z (typeattributeset foo_type_202504 (foo_type)) na (typeattributeset foo_type_202504 (foo_type bar_type)), a następnie zainstalować w partycji 202604 system_ext. Partycja 202504
vendor może nadal uzyskiwać dostęp do foo_type i bar_type partycji 202604
system_ext.
Zmiany atrybutów w Androidzie 9
Urządzenia, które zostaną zaktualizowane do Androida 9, mogą używać tych atrybutów, ale urządzenia z Androidem 9 nie mogą.
Atrybuty naruszającego
Android 9 zawiera te atrybuty związane z domeną:
data_between_core_and_vendor_violators. Atrybut wszystkich domen, które naruszają wymaganie dotyczące nieudostępniania plików według ścieżki międzyvendoracoredomains. Procesy platformy i dostawcy nie powinny używać plików na dysku do komunikacji (niestabilny interfejs ABI). Rekomendacja:- Kod dostawcy powinien używać
/data/vendor. - System nie powinien używać
/data/vendor.
- Kod dostawcy powinien używać
system_executes_vendor_violators. Atrybut dla wszystkich domen systemowych (z wyjątkieminitishell domains) naruszających wymaganie dotyczące niewykonywania plików binarnych dostawcy. Wykonywanie binarnych plików dostawcy ma niestabilny interfejs API. Platforma nie powinna bezpośrednio wykonywać plików binarnych dostawcy. Rekomendacja:- Takie zależności platformy od plików binarnych dostawcy muszą być ukryte za interfejsami HIDL HAL.
LUB
coredomains, które potrzebują dostępu do plików binarnych dostawcy, powinny zostać przeniesione do partycjivendori tym samym przestać byćcoredomain.
- Takie zależności platformy od plików binarnych dostawcy muszą być ukryte za interfejsami HIDL HAL.
Niezaufane atrybuty
Niezaufane aplikacje, które hostują dowolny kod, nie powinny mieć dostępu do usług HwBinder, z wyjątkiem tych, które są uważane za wystarczająco bezpieczne, aby można było z nich korzystać w takich aplikacjach (patrz bezpieczne usługi poniżej). Główne powody to:
- Serwery HwBinder nie przeprowadzają uwierzytelniania klienta, ponieważ HIDL nie udostępnia obecnie informacji o identyfikatorze UID wywołującego. Nawet jeśli HIDL udostępniałby takie dane, wiele usług HwBinder działa na poziomie niższym niż aplikacje (np. HAL) lub nie może polegać na tożsamości aplikacji w celu autoryzacji. Dlatego dla bezpieczeństwa domyślnym założeniem jest to, że każda usługa HwBinder traktuje wszystkich klientów jako równie uprawnionych do wykonywania operacji oferowanych przez usługę.
- Serwery HAL (podzbiór usług HwBinder) zawierają kod, w którym występuje więcej problemów z bezpieczeństwem niż w
system/core. Mają też dostęp do niższych warstw stosu (aż do sprzętu), co zwiększa możliwości obejścia modelu zabezpieczeń Androida.
Usługi związane z sejfami
Bezpieczne usługi obejmują:
same_process_hwservice. Te usługi (z definicji) działają w procesie klienta, a tym samym mają taki sam dostęp jak domena klienta, w której działa proces.coredomain_hwservice. Te usługi nie stwarzają zagrożeń związanych z przyczyną nr 2.hal_configstore_ISurfaceFlingerConfigs. Ta usługa jest przeznaczona do użytku w dowolnej domenie.hal_graphics_allocator_hwservice. Te operacje są też dostępne w usłudzesurfaceflingerBinder, do której aplikacje mają dostęp.hal_omx_hwservice. Jest to wersja usługi Binder w HwBinder, do której aplikacje mają dostęp.mediacodechal_codec2_hwservice. To nowsza wersja usługihal_omx_hwservice.
Atrybuty, których można używać
Wszystkie hwservices, które nie są uważane za bezpieczne, mają atrybut untrusted_app_visible_hwservice. Odpowiednie serwery HAL mają atrybut untrusted_app_visible_halserver. Urządzenia z Androidem 9 NIE MOGĄ używać atrybutu untrusted.
Rekomendacja:
- Niezaufane aplikacje powinny komunikować się z usługą systemową, która komunikuje się z interfejsem HAL HIDL dostawcy. Na przykład aplikacje mogą komunikować się z
binderservicedomain, a potem zmediaserver(czylibinderservicedomain), które z kolei komunikuje się zhal_graphics_allocator.LUB
- Aplikacje, które potrzebują bezpośredniego dostępu do
vendorHAL, powinny mieć własną domenę sepolicy zdefiniowaną przez dostawcę.
Testy atrybutów plików
Android 9 zawiera testy czasu kompilacji, które sprawdzają, czy wszystkie pliki w określonych lokalizacjach mają odpowiednie atrybuty (np. czy wszystkie pliki w sysfs mają wymagany atrybut sysfs_type).
Oznaczanie kontekstów SELinux
Aby rozróżnić zasady SELinux platformy i dostawcy, system tworzy pliki kontekstu SELinux w inny sposób, aby je rozdzielić.
Konteksty plików
W Androidzie 8.0 wprowadzono te zmiany dotyczące file_contexts:
- Aby uniknąć dodatkowych obciążeń związanych z kompilacją na urządzeniu podczas uruchamiania,
file_contextsnie będą już istniały w formie binarnej. Zamiast tego są to czytelne pliki tekstowe z wyrażeniami regularnymi, np.{property, service}_contexts(tak jak w wersjach wcześniejszych niż 7.0). file_contextssą podzielone na 2 pliki:plat_file_contexts- Platforma Android
file_context, która nie ma etykiet specyficznych dla urządzenia, z wyjątkiem etykietowania części partycji/vendor, które musi być precyzyjne, aby zapewnić prawidłowe działanie plików sepolicy. - Musi znajdować się w partycji
systemna urządzeniu/system/etc/selinux/plat_file_contextsi być wczytywana przezinitna początku wraz zfile_contextdostawcy.
- Platforma Android
vendor_file_contexts- Specyficzne dla urządzenia
file_contextutworzone przez połączeniefile_contextsznalezionych w katalogach wskazanych przezBOARD_SEPOLICY_DIRSw plikachBoardconfig.mkurządzenia. - Musi być zainstalowany w
/vendor/etc/selinux/vendor_file_contextsna partycjivendori ładowany przezinitna początku wraz z platformąfile_context.
- Specyficzne dla urządzenia
Konteksty usługi
W Androidzie 8.0 property_contexts jest podzielony na 2 pliki:
plat_property_contexts- platformy Android
property_context, która nie ma etykiet przypisanych do konkretnych urządzeń. - Musi znajdować się w partycji
systemw/system/etc/selinux/plat_property_contextsi być wczytywana przezinitna początku wraz zproperty_contexts.
- platformy Android
vendor_property_contexts- Specyficzne dla urządzenia
property_context, które powstają przez połączenieproperty_contextsznalezionych w katalogach wskazywanych przezBOARD_SEPOLICY_DIRSw plikachBoardconfig.mkurządzenia. - Musi znajdować się w partycji
vendorw/vendor/etc/selinux/vendor_property_contextsi być wczytywana przezinitna początku wraz z platformąproperty_context.
- Specyficzne dla urządzenia
Konteksty usług
W Androidzie 8.0 service_contexts jest podzielony na te pliki:
plat_service_contextsservice_contextdla platformy Androidservicemanager.service_contextnie ma etykiet przypisanych do konkretnych urządzeń.- Musi znajdować się w
systempartycji w/system/etc/selinux/plat_service_contextsi być wczytywana przezservicemanagerna początku wraz zservice_contexts.
vendor_service_contextsservice_context– tworzone przez połączenieservice_contexts– znajdujące się w katalogach wskazywanych przezBOARD_SEPOLICY_DIRS– w plikachBoardconfig.mk– urządzenia.- Musi znajdować się w partycji
vendorw/vendor/etc/selinux/vendor_service_contextsi być wczytywana przezservicemanagerna początku wraz z platformąservice_contexts. - Chociaż
servicemanagerszuka tego pliku podczas uruchamiania, w przypadku w pełni zgodnego urządzeniaTREBLEplikvendor_service_contextsNIE MOŻE istnieć. Dzieje się tak, ponieważ wszystkie interakcje między procesamivendorisystemMUSZĄ przechodzić przezhwservicemanager/hwbinder.
plat_hwservice_contexts- platformy Android
hwservice_context, którahwservicemanagernie ma etykiet specyficznych dla urządzenia. - Musi znajdować się w partycji
systemw lokalizacji/system/etc/selinux/plat_hwservice_contextsi być wczytywany przezhwservicemanagerna początku razem zvendor_hwservice_contexts.
- platformy Android
vendor_hwservice_contextshwservice_context– tworzone przez połączeniehwservice_contexts– znajdujące się w katalogach wskazywanych przezBOARD_SEPOLICY_DIRS– w plikachBoardconfig.mk– urządzenia.- Musi znajdować się w partycji
vendorpod adresem/vendor/etc/selinux/vendor_hwservice_contextsi być wczytywany przezhwservicemanagerna początku wraz zplat_service_contexts.
vndservice_contextsservice_contextspecyficzne dla urządzenia, które sąvndservicemanagertworzone przez połączenievndservice_contextsznalezionych w katalogach wskazywanych przezBOARD_SEPOLICY_DIRSwBoardconfig.mkurządzenia.- Ten plik musi znajdować się w partycji
vendorw lokalizacji/vendor/etc/selinux/vndservice_contextsi być wczytywany przezvndservicemanagerna początku.
Konteksty Seapp
W Androidzie 8.0 seapp_contexts jest podzielony na 2 pliki:
plat_seapp_contexts- platformy Android
seapp_context, która nie ma zmian specyficznych dla urządzenia. - Musi znajdować się w partycji
systemw/system/etc/selinux/plat_seapp_contexts.
- platformy Android
vendor_seapp_contexts- Rozszerzenie platformy
seapp_contextspecyficzne dla urządzenia, utworzone przez połączenieseapp_contextsznalezionych w katalogach, na które wskazująBOARD_SEPOLICY_DIRSw plikachBoardconfig.mkurządzenia. - Musi znajdować się w partycji
vendorw/vendor/etc/selinux/vendor_seapp_contexts.
- Rozszerzenie platformy
Uprawnienia MAC
W Androidzie 8.0 mac_permissions.xml jest podzielony na 2 pliki:
- Platforma
mac_permissions.xml- platformy Android
mac_permissions.xml, która nie ma zmian specyficznych dla urządzenia. - Musi znajdować się w partycji
systemw/system/etc/selinux/.
- platformy Android
- Non-Platform
mac_permissions.xml- Rozszerzenie platformy specyficzne dla urządzenia
mac_permissions.xmlutworzone na podstawiemac_permissions.xmlznalezionych w katalogach wskazywanych przezBOARD_SEPOLICY_DIRSw plikachBoardconfig.mkurządzenia. - Musi znajdować się w partycji
vendorw/vendor/etc/selinux/.
- Rozszerzenie platformy specyficzne dla urządzenia