Umgebungsfähigkeiten

Mithilfe von Funktionen können Linux-Prozesse die meisten Root-Berechtigungen aufgeben und gleichzeitig die Teilmenge der Berechtigungen beibehalten, die sie zur Ausführung ihrer Funktion benötigen. Die ursprüngliche Implementierung von Funktionen machte es für fork+exec-Prozesse unmöglich, Funktionen zu erben, es sei denn, für die ausgeführten Dateien waren Dateifunktionen konfiguriert. Dateifunktionen stellen wiederum ein Sicherheitsrisiko dar, da jeder Prozess, der eine Datei mit Dateifunktionen ausführt, diese Funktionen erhalten kann.

Ambient-Funktionen ermöglichen es von init gestarteten Systemdiensten, Funktionen in ihren .rc Dateien zu konfigurieren, wodurch die Konfiguration in einer einzigen Datei zusammengefasst wird, anstatt die Konfiguration in der Datei fs_config.c aufzuteilen. Das bedeutet, dass Sie für jeden von init gestarteten Dienst die mit dem Dienst verknüpfte .rc Datei verwenden können, um Funktionen für diesen Dienst zu konfigurieren.

Umgebungsfunktionen sind der bevorzugte Mechanismus zum Festlegen von Funktionen für von init gestartete Dienste (bei dieser Methode werden alle Aspekte der Dienstkonfiguration in einer einzigen .rc Datei gespeichert). Wir empfehlen, Umgebungsfunktionen zu verwenden, anstatt Dateisystemfunktionen mithilfe des Abschnitts „caps“ in config.fs Dateien zu konfigurieren.

Wenn Sie Funktionen für Dienste festlegen , die nicht von init gestartet werden , konfigurieren Sie die Dateisystemfunktionen weiterhin mit fs_config.c .

Umgebungsfunktionen aktivieren

Um Umgebungsfunktionen für einen bestimmten Dienst zu aktivieren, verwenden Sie das Schlüsselwort capabilities in init. Einzelheiten zur aktuellen Init-Sprache finden Sie in der Datei „init README.md“ .

Um beispielsweise Ambient-Funktionen für den AOSP-Dienst wificond zu aktivieren, richtet die .rc-Datei für den wificond Dienst die entsprechenden Benutzer und Gruppen ein und weist dem Dienst mithilfe des Schlüsselworts capabilities die angegebenen Funktionen zu:

service wificond /system/bin/wificond
    class main
    user wifi
    group wifi net_raw net_admin
    capabilities NET_RAW NET_ADMIN

Referenzimplementierung

Die Referenzimplementierung ist der gemeinsame Android-Kernel https://android.googlesource.com/kernel/common/

Erforderliche Patches

Erforderliche Patches wurden auf alle relevanten gemeinsamen Android-Kernelzweige zurückportiert.

Der Hauptpatch für Umgebungsfunktionen https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=58319057b7847667f0c9585b9de0e8932b0fdb08 wurde zurückportiert in:

Ein kleiner Sicherheitsupdate https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b7f76ea2ef6739ee484a165ffbac98deb855d3d3 wurde zurückportiert in:

Validierung

Bionische Unit-Tests umfassen Unit-Tests für Umgebungsfähigkeiten. Darüber hinaus würde die Verwendung des Schlüsselworts „capabilities“ in der Android-Initialisierung für einen Dienst und die anschließende Überprüfung, ob der Dienst die erwarteten Funktionen erhält, einen Laufzeittest dieser Funktion ermöglichen.