Umgebungsfähigkeiten

Capabilitys ermöglichen es Linux-Prozessen, die meisten Root-ähnlichen Privilegien aufzugeben, während die Teilmenge der Privilegien beibehalten wird, die sie benötigen, um ihre Funktion auszuführen. Die ursprüngliche Implementierung von Capabilities machte es Fork+Exec'd-Prozessen unmöglich, Capabilities zu erben, es sei denn, für die ausgeführten Dateien waren File Capabilities konfiguriert. Dateifähigkeiten wiederum stellen ein Sicherheitsrisiko dar, da jeder Prozess, der eine Datei mit Dateifähigkeiten ausführt, in der Lage sein wird, diese Fähigkeiten zu erlangen.

Umgebungsfunktionen ermöglichen es Systemdiensten, die von init gestartet werden, Funktionen in ihren .rc Dateien zu konfigurieren, wodurch die Konfiguration in eine einzige Datei gebracht wird, anstatt die Konfiguration in der Datei fs_config.c . Das bedeutet, dass Sie für jeden von init gestarteten Dienst die mit dem Dienst .rc -Datei verwenden können, um Funktionen für diesen Dienst zu konfigurieren.

Umgebungsfunktionen sind der bevorzugte Mechanismus zum Festlegen von Funktionen für Dienste, die von init gestartet werden (diese Methode hält alle Aspekte für die Dienstkonfiguration in einer einzigen .rc -Datei). Wir empfehlen, Umgebungsfunktionen zu verwenden, anstatt Dateisystemfunktionen mithilfe des caps-Abschnitts in den config.fs Dateien zu konfigurieren.

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

Umgebungsfunktionen aktivieren

Um Ambient-Fähigkeiten für einen bestimmten Dienst zu aktivieren, verwenden Sie das capabilities Schlüsselwort in init. Einzelheiten zur aktuellen Init-Sprache finden Sie in der init README.md .

Um beispielsweise Ambient-Fähigkeiten für den AOSP-Dienst wificond zu aktivieren, richtet die .rc-Datei für den wificond -Dienst den entsprechenden Benutzer und die entsprechenden Gruppen ein und weist dem Dienst die angegebenen Fähigkeiten mit dem Schlüsselwort capabilities :

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 allgemeine Android-Kernel https://android.googlesource.com/kernel/common/

Erforderliche Patches

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

Der Patch für die Hauptumgebungsfähigkeiten https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=58319057b7847667f0c9585b9de0e8932b0fdb08 wurde zurückportiert in:

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

Validierung

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