Auf dieser Seite wird beschrieben, wie Android mit Problemen bei der Richtlinienkompatibilität bei Over-the-Air-Updates (OTA) der Plattform umgeht, bei denen sich neue SELinux-Einstellungen der Plattform von alten SELinux-Einstellungen des Anbieters unterscheiden können.
Eigentümerschaft und Kennzeichnung von Objekten
Das Eigentum muss für jedes Objekt klar definiert sein, damit die Plattform- und Anbieterrichtlinien getrennt bleiben. Wenn beispielsweise die Anbieterrichtlinie mit /dev/foo und die Plattformrichtlinie mit /dev/foo in einem nachfolgenden OTA gekennzeichnet sind, kann es zu undefiniertem Verhalten wie einer unerwarteten Ablehnung oder, noch schlimmer, einem Boot-Fehler kommen. Bei SELinux äußert sich dies als Labeling-Konflikt. Der Geräteknoten kann nur ein Label haben, das auf das zuletzt angewendete Label verweist.
Daraus ergeben sich folgende Konsequenzen:
- Prozesse, die Zugriff benötigen auf das Label, das nicht angewendet wurde, verlieren den Zugriff auf die Ressource.
- Prozesse, die auf die Datei zugreifen, funktionieren möglicherweise nicht mehr, weil der falsche Geräteknoten erstellt wurde.
Kollisionen zwischen Plattform- und Anbieterlabels können für jedes Objekt mit einem SELinux-Label auftreten, einschließlich Eigenschaften, Dienste, Prozesse, Dateien und Sockets. Um diese Probleme zu vermeiden, müssen Sie die Inhaberschaft dieser Objekte klar definieren.
Namespaces für Typen/Attribute
Neben Label-Konflikten können auch SELinux-Typ- und Attributnamen kollidieren. SELinux lässt keine Mehrfachdeklarationen derselben Typen und Attribute zu. Eine Richtlinie mit doppelten Deklarationen kann nicht kompiliert werden. Um Kollisionen von Typ- und Attributnamen zu vermeiden, wird dringend empfohlen, alle Anbieterdeklarationen mit dem Präfix vendor_ zu beginnen. Verwenden Sie beispielsweise type vendor_foo, domain; anstelle von type foo, domain;.
Dateieigentümer
Kollisionen für Dateien zu verhindern, ist schwierig, da sowohl die Plattform- als auch die Anbieterrichtlinien in der Regel Labels für alle Dateisysteme enthalten. Im Gegensatz zur Typbenennung ist die Namespace-Zuweisung von Dateien nicht praktikabel, da viele von ihnen vom Kernel erstellt werden. Um diese Konflikte zu vermeiden, sollten Sie die Namensrichtlinien für Dateisysteme in diesem Abschnitt beachten. Bei Android 8.0 handelt es sich um Empfehlungen ohne technische Durchsetzung. Künftig werden diese Empfehlungen von der Vendor Test Suite (VTS) durchgesetzt.
System (/system)
Nur das Systemimage muss Labels für /system-Komponenten über file_contexts, service_contexts usw. bereitstellen. Wenn Labels für /system-Komponenten in der Anbieterrichtlinie hinzugefügt werden, ist ein reines Framework-OTA-Update möglicherweise nicht möglich.
Anbieter (/vendor)
Die AOSP-SELinux-Richtlinie kennzeichnet bereits Teile der Partition vendor, mit denen die Plattform interagiert. Dadurch können SELinux-Regeln für Plattformprozesse geschrieben werden, damit diese mit Teilen der Partition vendor kommunizieren oder darauf zugreifen können. Beispiele:
| /vendor-Pfad | Von der Plattform bereitgestelltes Label | Plattformprozesse je nach Label |
|---|---|---|
/vendor(/.*)?
|
vendor_file
|
Alle HAL-Clients im Framework, ueventd usw.
|
/vendor/framework(/.*)?
|
vendor_framework_file
|
dex2oat, appdomain usw.
|
/vendor/app(/.*)?
|
vendor_app_file
|
dex2oat, installd, idmap usw.
|
/vendor/overlay(/.*)
|
vendor_overlay_file
|
system_server, zygote, idmap usw.
|
Daher müssen beim Kennzeichnen zusätzlicher Dateien in der Partition vendor bestimmte Regeln eingehalten werden, die durch neverallows erzwungen werden:
vendor_filemuss das Standardlabel für alle Dateien in der Partitionvendorsein. Gemäß der Plattformrichtlinie ist dies erforderlich, um auf Passthrough-HAL-Implementierungen zuzugreifen.- Alle neuen
exec_types, die in dervendor-Partition über die Händlerrichtlinie hinzugefügt werden, müssen das Attributvendor_file_typehaben. Dies wird durch „neverallows“ erzwungen. - Um Konflikte mit zukünftigen Plattform-/Framework-Updates zu vermeiden, sollten Sie Dateien, die nicht
exec_typessind, nicht in der Partitionvendorkennzeichnen. - Alle Bibliotheksabhängigkeiten für AOSP-identifizierte HALs im selben Prozess müssen als
same_process_hal_file.gekennzeichnet sein.
Procfs (/proc)
Dateien in /proc dürfen nur mit dem Label genfscon gekennzeichnet werden. In Android 7.0 wurde sowohl in der Plattformrichtlinie als auch in der Anbieterrichtlinie genfscon verwendet, um Dateien in procfs zu kennzeichnen.
Empfehlung:Nur Labels für Plattformrichtlinien /proc.
Wenn für Anbieterprozesse Zugriff auf Dateien in /proc erforderlich ist, die derzeit mit dem Standardlabel (proc) gekennzeichnet sind, sollten sie in der Anbieterrichtlinie nicht explizit gekennzeichnet werden. Stattdessen sollte der generische Typ proc verwendet werden, um Regeln für Anbieterdomains hinzuzufügen. So können die Plattformupdates zukünftige Kernelschnittstellen berücksichtigen, die über procfs verfügbar gemacht werden, und sie bei Bedarf explizit kennzeichnen.
Debugfs (/sys/kernel/debug)
Debugfs kann sowohl in file_contexts als auch in genfscon gekennzeichnet werden. Unter Android 7.0 bis Android 10 sind sowohl das Plattform- als auch das Anbieterlabel
debugfs.
Unter Android 11 kann auf debugfs auf Produktionsgeräten nicht zugegriffen oder es kann nicht darauf zugegriffen werden. Gerätehersteller sollten debugfs entfernen.
Tracefs (/sys/kernel/debug/tracing)
Tracefs kann sowohl in file_contexts als auch in genfscon gekennzeichnet werden. In Android 7.0 sind nur die Plattformlabels tracefs verfügbar.
Empfehlung:Nur die Plattform darf tracefs kennzeichnen.
Sysfs (/sys)
Dateien in /sys können sowohl mit file_contexts als auch mit genfscon gekennzeichnet werden. In Android 7.0 verwenden sowohl die Plattform als auch der Anbieter genfscon, um Dateien in sysfs zu kennzeichnen.
Empfehlung:Die Plattform kann sysfs-Knoten kennzeichnen, die nicht gerätespezifisch sind. Andernfalls darf nur der Anbieter Dateien kennzeichnen.
tmpfs (/dev)
Dateien in /dev können in file_contexts mit Labels versehen werden. In Android 7.0 werden sowohl die Plattform- als auch die Anbieterlabeldateien hier gespeichert.
Empfehlung:Der Anbieter darf nur Dateien in /dev/vendor kennzeichnen (z. B. /dev/vendor/foo, /dev/vendor/socket/bar).
Rootfs (/)
Dateien in / können in file_contexts mit Labels versehen werden. In Android 7.0 sind hier sowohl Plattform- als auch Anbieterlabeldateien enthalten.
Empfehlung:Nur das System darf Dateien in / labeln.
Daten (/data)
Die Daten werden durch eine Kombination aus file_contexts und seapp_contexts gekennzeichnet.
Empfehlung:Untersagen Sie die Anbieterkennzeichnung außerhalb von /data/vendor. Nur die Plattform darf andere Teile von /data kennzeichnen.
Genfs Labels-Version
Ab Anbieter‑API‑Level 202504 sind neuere SELinux-Labels, die mit genfscon in system/sepolicy/compat/plat_sepolicy_genfs_ver.cil zugewiesen werden, für ältere vendor-Partitionen optional. Dadurch können ältere vendor-Partitionen ihre vorhandene SEPolicy-Implementierung beibehalten.
Dies wird durch die Makefile-Variable BOARD_GENFS_LABELS_VERSION gesteuert, die in /vendor/etc/selinux/genfs_labels_version.txt gespeichert ist.
Beispiel:
-
Im Anbieter‑API‑Level 202404 wird der Knoten
/sys/class/udcstandardmäßig mitsysfsgekennzeichnet. -
Ab Anbieter‑API‑Level 202504 wird
/sys/class/udcmitsysfs_udcgekennzeichnet.
/sys/class/udc wird jedoch möglicherweise von vendor-Partitionen mit API‑Level 202404 verwendet, entweder mit dem Standardlabel sysfs oder einem anbieterspezifischen Label. Wenn /sys/class/udc bedingungslos als sysfs_udc gekennzeichnet wird, kann die Kompatibilität mit diesen vendor-Partitionen beeinträchtigt werden. Wenn Sie BOARD_GENFS_LABELS_VERSION aktivieren, verwendet die Plattform weiterhin die vorherigen Labels und Berechtigungen für die älteren vendor-Partitionen.
BOARD_GENFS_LABELS_VERSION kann größer oder gleich der Vendor API-Ebene sein. Beispiel: vendor-Partitionen mit API‑Level 202404 können BOARD_GENFS_LABELS_VERSION auf 202504 festlegen, um neue Labels zu übernehmen, die in 202504 eingeführt wurden.
Liste der genfs-Labels für 202504
Beim Labeln von genfscon-Knoten muss die Plattform ältere vendor-Partitionen berücksichtigen und bei Bedarf Fallback-Mechanismen für die Kompatibilität implementieren. Die Plattform kann plattformspezifische Bibliotheken verwenden, um die Version der GenFS-Labels abzufragen.
-
Verwenden Sie auf nativen Geräten
libgenfslabelsversion. Die Headerdatei fürlibgenfslabelsversionfinden Sie untergenfslabelsversion.h. -
Verwenden Sie in Java
android.os.SELinux.getGenfsLabelsVersion().
Öffentliche Richtlinie für die Plattform
Die SELinux-Richtlinie der Plattform ist in private und öffentliche Richtlinien unterteilt. Die plattformöffentliche Richtlinie besteht aus Typen und Attributen, die immer für ein Anbieter‑API‑Level verfügbar sind und als API zwischen Plattform und Anbieter fungieren. Diese Richtlinie wird Anbietern zur Verfügung gestellt, damit sie Anbieterrichtliniendateien erstellen können. In Kombination mit der plattforminternen Richtlinie ergibt sich daraus eine voll funktionsfähige Richtlinie für ein Gerät. Die öffentlich zugängliche Plattformrichtlinie ist in system/sepolicy/public definiert.
Ein Typ vendor_init, der den Initialisierungsprozess im Kontext des Anbieters darstellt, wird beispielsweise unter system/sepolicy/public/vendor_init.te definiert:
type vendor_init, domain;
Anbieter können den Typ vendor_init verwenden, um benutzerdefinierte Richtlinienregeln zu schreiben:
# Allow vendor_init to set vendor_audio_prop in vendor's init scripts
set_prop(vendor_init, vendor_audio_prop)Kompatibilitätsattribute
Die SELinux-Richtlinie ist eine Interaktion zwischen Quell- und Zieltypen für bestimmte Objektklassen und Berechtigungen. Jedes Objekt (z. B. Prozesse, Dateien), das von der SELinux-Richtlinie betroffen ist, kann nur einen Typ haben, dieser Typ kann jedoch mehrere Attribute haben.
Die Richtlinie ist hauptsächlich in Bezug auf vorhandene Typen formuliert. Hier sind sowohl vendor_init als auch debugfs Typen:
allow vendor_init debugfs:dir { mounton };
Das funktioniert, weil die Richtlinie mit Kenntnis aller Typen geschrieben wurde. Wenn in der Richtlinie des Anbieters und der Plattformrichtlinie jedoch bestimmte Typen verwendet werden und sich das Label eines bestimmten Objekts nur in einer dieser Richtlinien ändert, kann es sein, dass die andere Richtlinie eine Richtlinie enthält, die zuvor auf den Zugriff angewiesen war, der jetzt gewährt oder entzogen wurde. Angenommen, die Plattformrichtlinie kennzeichnet sysfs-Knoten als sysfs:
/sys(/.*)? u:object_r:sysfs:s0
Die Anbieterrichtlinie gewährt Zugriff auf /sys/usb mit dem Label sysfs:
allow vendor_init sysfs:chr_file rw_file_perms;
Wenn die Plattformrichtlinie so geändert wird, dass /sys/usb als sysfs_usb gekennzeichnet wird, bleibt die Anbieterrichtlinie unverändert. vendor_init verliert jedoch den Zugriff auf /sys/usb, da keine Richtlinie für den neuen Typ sysfs_usb vorhanden ist:
/sys/usb u:object_r:sysfs_usb:s0
Um dieses Problem zu beheben, führt Android das Konzept der versionierten Attribute ein. Zur Kompilierzeit übersetzt das Build-System automatisch öffentliche Plattformtypen, die in der Anbieterrichtlinie verwendet werden, in diese versionsbezogenen Attribute. Diese Übersetzung wird durch Zuordnungsdateien ermöglicht, die ein versionsbezogenes Attribut mit einem oder mehreren öffentlichen Typen der Plattform verknüpfen.
Angenommen, /sys/usb ist in der Plattformrichtlinie 202504 als sysfs gekennzeichnet und die Händlerrichtlinie 202504 gewährt vendor_init Zugriff auf /sys/usb. Gehen Sie in diesem Fall wie folgt vor:
-
In der Anbieterrichtlinie wird die Regel
allow vendor_init sysfs:chr_file rw_file_perms;geschrieben, da/sys/usbin der Plattformrichtlinie 202504 alssysfsgekennzeichnet ist. Wenn das Build-System die Anbieterrichtlinie kompiliert, wird die Regel automatisch inallow vendor_init_202504 sysfs_202504:chr_file rw_file_perms;übersetzt. Die Attributevendor_init_202504undsysfs_202504entsprechen den Typenvendor_initundsysfs, die von der Plattform definiert werden. -
Das Build-System generiert eine Datei für die Identitätszuweisung
/system/etc/selinux/mapping/202504.cil. Da sowohl die Partitionensystemals auchvendordieselbe202504-Version verwenden, enthält die Zuordnungsdatei Identitätszuordnungen vontype_202504zutype. Beispiel:vendor_init_202504wirdvendor_initundsysfs_202504wirdsysfszugeordnet:(typeattributeset sysfs_202504 (sysfs)) (typeattributeset vendor_init_202504 (vendor_init)) ...
Wenn die Version von 202504 auf 202604 aktualisiert wird, wird unter system/sepolicy/private/compat/202504/202504.cil eine neue Zuordnungsdatei für 202504-vendor-Partitionen erstellt, die für die 202604- oder neueren system-Partitionen in /system/etc/selinux/mapping/202504.cil installiert wird. Anfangs enthält diese Zuordnungsdatei Identitätszuordnungen, wie oben beschrieben. Wenn der Plattformrichtlinie 202604 ein neues Label sysfs_usb für /sys/usb hinzugefügt wird, wird die Zuordnungsdatei aktualisiert, um sysfs_202504 sysfs_usb zuzuordnen:
(typeattributeset sysfs_202504 (sysfs sysfs_usb)) (typeattributeset vendor_init_202504 (vendor_init)) ...
Durch diese Aktualisierung wird der Zugriff auf den neuen Typ sysfs_usb automatisch für die konvertierte Händlerrichtlinienregel allow
vendor_init_202504 sysfs_202504:chr_file rw_file_perms; gewährt.vendor_init
Um die Kompatibilität mit älteren vendor-Partitionen aufrechtzuerhalten, muss jeder neue öffentliche Typ mindestens einem der versionierten Attribute in der Zuordnungsdatei system/sepolicy/private/compat/ver/ver.cil zugeordnet werden oder unter system/sepolicy/private/compat/ver/ver.ignore.cil aufgeführt sein, um anzugeben, dass es in den vorherigen Anbieterversionen keinen passenden Typ gibt.
Durch die Kombination aus Plattformrichtlinie, Anbieterrichtlinie und Zuordnungsdatei kann das System aktualisiert werden, ohne dass die Anbieterrichtlinie aktualisiert werden muss. Die Umwandlung in die versionierten Attribute erfolgt automatisch. Die Anbieterrichtlinie muss sich also nicht um die Versionierung kümmern, sondern kann die öffentlichen Typen unverändert verwenden.
Richtlinie für öffentliche und produktbezogene APIs vom Typ „system_ext“
Ab Android 11 dürfen die Partitionen system_ext und product ihre zugewiesenen öffentlichen Typen in die Partition vendor exportieren. Wie bei der öffentlichen Richtlinie der Plattform werden in der Anbieterrichtlinie Typen und Regeln verwendet, die automatisch in die versionierten Attribute übersetzt werden, z. B. von type in type_ver, wobei ver das Anbieter-API-Level der vendor-Partition ist.
Wenn die Partitionen system_ext und product auf derselben Plattformversion ver basieren, generiert das Build-System Basiszordnungsdateien für system_ext/etc/selinux/mapping/ver.cil und product/etc/selinux/mapping/ver.cil, die Identitätszuordnungen von type zu type_ver enthalten.
Die Anbieterrichtlinie kann mit dem versionsverwalteten Attribut type_ver auf type zugreifen.
Wenn nur die Partitionen system_ext und product aktualisiert werden, z. B. von ver auf ver+1 (oder später), während die Partition vendor auf ver bleibt, verliert die Anbieterrichtlinie möglicherweise den Zugriff auf die Typen der Partitionen system_ext und product. Damit keine Fehler auftreten, sollten die Partitionen system_ext und product Zuordnungsdateien von konkreten Typen zu type_ver-Attributen bereitstellen. Jeder Partner ist für die Verwaltung der Zuordnungsdateien verantwortlich, wenn er die ver-vendor-Partition mit ver+1 (oder höher) system_ext- und product-Partitionen unterstützt.
Um Zuordnungsdateien in den Partitionen system_ext und product zu installieren, müssen Gerätehersteller oder ‑anbieter Folgendes tun:
- Kopieren Sie die generierten Basiskartierungsdateien aus den Partitionen ver,
system_extundproductin den Quellbaum. - Passen Sie die Zuordnungsdateien nach Bedarf an.
-
Installieren Sie die Zuordnungsdateien auf ver+1 (oder höher)
system_ext- undproduct-Partitionen.
Angenommen, die Partition 202504 system_ext hat einen öffentlichen Typ namens foo_type. Dann sieht system_ext/etc/selinux/mapping/202504.cil in der Partition 202504 system_ext so aus:
(typeattributeset foo_type_202504 (foo_type)) (expandtypeattribute foo_type_202504 true) (typeattribute foo_type_202504)
Wenn bar_type der Partition 202604 system_ext hinzugefügt wird und bar_type für die Partition 202504 vendor der Partition foo_type zugeordnet werden soll, kann 202504.cil von (typeattributeset foo_type_202504 (foo_type)) zu (typeattributeset foo_type_202504 (foo_type bar_type)) aktualisiert und dann in der Partition 202604 system_ext installiert werden. Die Partition 202504vendor kann weiterhin auf die foo_type und bar_type der Partition 202604system_ext zugreifen.
Attributänderungen für Android 9
Geräte, die auf Android 9 aktualisiert werden, können die folgenden Attribute verwenden. Geräte, die mit Android 9 auf den Markt kommen, dürfen sie jedoch nicht verwenden.
Attribute von Rechtsverletzern
Android 9 umfasst die folgenden domainbezogenen Attribute:
data_between_core_and_vendor_violators. Attribute für alle Domains, die gegen die Anforderung verstoßen, Dateien nicht über den Pfad zwischenvendorundcoredomainsfreizugeben. Plattform- und Anbieterprozesse sollten nicht über Dateien auf der Festplatte kommunizieren (instabile ABI). Empfehlung:- Der Anbietercode sollte
/data/vendorverwenden. - Das System sollte
/data/vendornicht verwenden.
- Der Anbietercode sollte
system_executes_vendor_violators-Attribute für alle Systemdomains (außerinitundshell domains), die gegen die Anforderung verstoßen, keine Anbieterbinärdateien auszuführen. Die Ausführung von Anbieter-Binärdateien hat eine instabile API. Die Plattform sollte keine Anbieterbinärdateien direkt ausführen. Empfehlung:- Solche Plattformabhängigkeiten von Anbieter-Binärdateien müssen hinter HIDL-HALs liegen.
ODER
coredomains, die Zugriff auf Anbieterbinärdateien benötigen, sollten in dievendor-Partition verschoben werden und somit nicht mehrcoredomainsein.
- Solche Plattformabhängigkeiten von Anbieter-Binärdateien müssen hinter HIDL-HALs liegen.
Nicht vertrauenswürdige Attribute
Nicht vertrauenswürdige Apps, die beliebigen Code hosten, sollten keinen Zugriff auf HwBinder-Dienste haben, mit Ausnahme der Dienste, die als ausreichend sicher für den Zugriff durch solche Apps gelten (siehe unten). Dafür gibt es zwei Hauptgründe:
- HwBinder-Server führen keine Clientauthentifizierung durch, da HIDL derzeit keine Informationen zur UID des Aufrufers bereitstellt. Selbst wenn HIDL solche Daten bereitstellen würde, werden viele HwBinder-Dienste entweder auf einer Ebene unter der von Apps (z. B. HALs) ausgeführt oder dürfen sich bei der Autorisierung nicht auf die App-Identität verlassen. Daher wird standardmäßig davon ausgegangen, dass jeder HwBinder-Dienst alle seine Clients als gleichberechtigt für die Ausführung von Vorgängen behandelt, die vom Dienst angeboten werden.
- HAL-Server (eine Teilmenge von HwBinder-Diensten) enthalten Code mit einer höheren Häufigkeit von Sicherheitsproblemen als
system/core-Komponenten und haben Zugriff auf die unteren Ebenen des Stacks (bis hin zur Hardware). Dadurch wird die Wahrscheinlichkeit erhöht, dass das Android-Sicherheitsmodell umgangen wird.
Sichere Dienste
Zu den sicheren Diensten gehören:
same_process_hwservice. Diese Dienste werden (per Definition) im Prozess des Clients ausgeführt und haben daher denselben Zugriff wie die Clientdomain, in der der Prozess ausgeführt wird.coredomain_hwservice. Diese Dienste bergen keine Risiken, die mit Grund 2 zusammenhängen.hal_configstore_ISurfaceFlingerConfigs. Dieser Dienst ist speziell für die Verwendung durch jede Domain konzipiert.hal_graphics_allocator_hwservice. Diese Vorgänge werden auch vomsurfaceflinger-Bindungsdienst angeboten, auf den Apps zugreifen dürfen.hal_omx_hwservice: Dies ist eine HwBinder-Version des Binder-Dienstesmediacodec, auf den Apps zugreifen dürfen.hal_codec2_hwservice. Dies ist eine neuere Version vonhal_omx_hwservice.
Verwendbare Attribute
Alle hwservices, die nicht als sicher gelten, haben das Attribut untrusted_app_visible_hwservice. Die entsprechenden HAL-Server haben das Attribut untrusted_app_visible_halserver. Geräte, die mit Android 9 auf den Markt kommen, DÜRFEN KEINES der untrusted-Attribute verwenden.
Empfehlung:
- Nicht vertrauenswürdige Apps sollten stattdessen mit einem Systemdienst kommunizieren, der mit dem Vendor-HIDL-HAL kommuniziert. Apps können beispielsweise mit
binderservicedomainkommunizieren.mediaserver(einebinderservicedomain) kommuniziert dann mithal_graphics_allocator.ODER
- Apps, die direkten Zugriff auf
vendor-HALs benötigen, sollten eine eigene anbieterspezifische sepolicy-Domain haben.
Tests von Dateiattributen
Android 9 enthält Build-Zeit-Tests, mit denen sichergestellt wird, dass alle Dateien an bestimmten Speicherorten die entsprechenden Attribute haben (z. B. alle Dateien in sysfs das erforderliche Attribut sysfs_type).
SELinux-Kontexte kennzeichnen
Um die Unterscheidung zwischen Plattform- und Anbieter-SELinux-Richtlinien zu unterstützen, werden SELinux-Kontextdateien vom System unterschiedlich erstellt, damit sie getrennt bleiben.
Dateikontexte
Unter Android 8.0 wurden die folgenden Änderungen für file_contexts eingeführt:
- Um zusätzlichen Kompilierungsaufwand auf dem Gerät während des Bootens zu vermeiden, sind
file_contextsnicht mehr in binärer Form vorhanden. Stattdessen sind sie lesbare Textdateien mit regulären Ausdrücken, z. B.{property, service}_contexts(wie vor Version 7.0). - Die
file_contextssind auf zwei Dateien aufgeteilt:plat_file_contexts- Android-Plattform
file_contextohne gerätespezifische Labels, mit Ausnahme von Teilen der/vendor-Partition, die genau gekennzeichnet werden müssen, damit die sepolicy-Dateien ordnungsgemäß funktionieren. - Muss sich auf der
system-Partition unter/system/etc/selinux/plat_file_contextsauf dem Gerät befinden und zu Beginn voninitzusammen mit dem Anbieter-file_contextgeladen werden.
- Android-Plattform
vendor_file_contexts- Gerätespezifische
file_context, die durch Kombinieren vonfile_contextsaus den Verzeichnissen, auf die vonBOARD_SEPOLICY_DIRSin denBoardconfig.mk-Dateien des Geräts verwiesen wird, erstellt werden. - Muss unter
/vendor/etc/selinux/vendor_file_contextsauf der Partitionvendorinstalliert und zu Beginn zusammen mit der Plattformfile_contextvoninitgeladen werden.
- Gerätespezifische
Property-Kontexte
In Android 8.0 wird die property_contexts in zwei Dateien aufgeteilt:
plat_property_contexts- Android-Plattform
property_contextohne gerätespezifische Labels. - Muss sich auf der Partition
systemunter/system/etc/selinux/plat_property_contextsbefinden und zu Beginn zusammen mit dem Anbieter-property_contextsvoninitgeladen werden.
- Android-Plattform
vendor_property_contexts- Gerätespezifische
property_context, die durch Kombinieren vonproperty_contextsin den Verzeichnissen erstellt werden, auf die vonBOARD_SEPOLICY_DIRSin denBoardconfig.mk-Dateien des Geräts verwiesen wird. - Muss sich in der Partition
vendorunter/vendor/etc/selinux/vendor_property_contextsbefinden und zu Beginn zusammen mit der Plattformproperty_contextvoninitgeladen werden.
- Gerätespezifische
Dienstkontexte
In Android 8.0 wird die service_contexts auf die folgenden Dateien aufgeteilt:
plat_service_contexts- Android-plattformspezifische
service_contextfür dieservicemanager. Dasservice_contexthat keine gerätespezifischen Labels. - Muss sich auf der Partition
systemunter/system/etc/selinux/plat_service_contextsbefinden und zu Beginn zusammen mit dem Anbieter-service_contextsvonservicemanagergeladen werden.
- Android-plattformspezifische
vendor_service_contexts- Gerätespezifische
service_context, die durch Kombinieren vonservice_contextsin den Verzeichnissen erstellt werden, auf die in denBOARD_SEPOLICY_DIRS-Dateien des Geräts verwiesen wird.Boardconfig.mk - Muss sich in der Partition
vendorunter/vendor/etc/selinux/vendor_service_contextsbefinden und zu Beginn zusammen mit der Plattformservice_contextsvonservicemanagergeladen werden. servicemanagersucht zwar beim Booten nach dieser Datei, aber für ein vollständig kompatiblesTREBLE-Gerät darfvendor_service_contextsNICHT vorhanden sein. Das liegt daran, dass alle Interaktionen zwischenvendor- undsystem-Prozessen überhwservicemanager/hwbindererfolgen MÜSSEN.
- Gerätespezifische
plat_hwservice_contexts- Android-Plattform
hwservice_contextfürhwservicemanagerohne gerätespezifische Labels. - Muss sich in der Partition
systemunter/system/etc/selinux/plat_hwservice_contextsbefinden und zu Beginn zusammen mitvendor_hwservice_contextsvonhwservicemanagergeladen werden.
- Android-Plattform
vendor_hwservice_contexts- Gerätespezifische
hwservice_context, die durch Kombinieren vonhwservice_contextsin den Verzeichnissen erstellt werden, auf die in denBOARD_SEPOLICY_DIRS-Dateien des Geräts verwiesen wird.Boardconfig.mk - Muss sich in der Partition
vendorunter/vendor/etc/selinux/vendor_hwservice_contextsbefinden und zu Beginn zusammen mitplat_service_contextsvonhwservicemanagergeladen werden.
- Gerätespezifische
vndservice_contexts- Gerätespezifische
service_contextfür dievndservicemanager, die durch Kombinieren vonvndservice_contextsin den Verzeichnissen, auf die vonBOARD_SEPOLICY_DIRSimBoardconfig.mkdes Geräts verwiesen wird, erstellt wird. - Diese Datei muss sich in der Partition
vendorunter/vendor/etc/selinux/vndservice_contextsbefinden und beim Start vonvndservicemanagergeladen werden.
- Gerätespezifische
Seapp-Kontexte
In Android 8.0 wird die seapp_contexts in zwei Dateien aufgeteilt:
plat_seapp_contexts- Android-Plattform
seapp_contextohne gerätespezifische Änderungen. - Muss sich in der
system-Partition unter/system/etc/selinux/plat_seapp_contexts.befinden.
- Android-Plattform
vendor_seapp_contexts- Gerätespezifische Erweiterung der Plattform
seapp_context, die durch Kombination vonseapp_contextsin den Verzeichnissen erstellt wird, auf die in denBoardconfig.mk-Dateien des Geräts durchBOARD_SEPOLICY_DIRSverwiesen wird. - Muss sich in der
vendor-Partition unter/vendor/etc/selinux/vendor_seapp_contextsbefinden.
- Gerätespezifische Erweiterung der Plattform
MAC-Berechtigungen
In Android 8.0 wird die mac_permissions.xml in zwei Dateien aufgeteilt:
- Bahnsteig
mac_permissions.xml- Android-Plattform
mac_permissions.xmlohne gerätespezifische Änderungen. - Muss sich in der
system-Partition unter/system/etc/selinux/.befinden.
- Android-Plattform
- Nicht auf der Plattform
mac_permissions.xml- Gerätespezifische Erweiterung der Plattform
mac_permissions.xml, die ausmac_permissions.xmlerstellt wurde und sich in den Verzeichnissen befindet, auf die vonBOARD_SEPOLICY_DIRSin denBoardconfig.mk-Dateien des Geräts verwiesen wird. - Muss sich in der
vendor-Partition unter/vendor/etc/selinux/.befinden.
- Gerätespezifische Erweiterung der Plattform