Umgebungsfähigkeiten

Mithilfe von Funktionen können Linux-Prozesse die meisten root-ähnlichen Berechtigungen löschen, während die Teilmenge der Berechtigungen beibehalten wird, die sie zur Ausführung ihrer Funktion benötigen. Die ursprüngliche Implementierung von Funktionen machte es fork + exec'd-Prozessen 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 nutzen kann.

.rc von Umgebungsfunktionen können von init gestartete Systemdienste Funktionen in ihren .rc Dateien konfigurieren und die Konfiguration in eine einzelne Datei zusammenfassen, anstatt die Konfiguration in der Datei fs_config.c . Dies bedeutet, dass Sie für jeden von init gestarteten Dienst die dem Dienst zugeordnete .rc Datei verwenden können, um die Funktionen für diesen Dienst zu konfigurieren.

Umgebungsfunktionen sind der bevorzugte Mechanismus zum Festlegen von Funktionen für von init gestartete Dienste (diese Methode speichert alle Aspekte für die Dienstkonfiguration in einer einzigen .rc Datei). Wir empfehlen, Umgebungsfunktionen zu verwenden, anstatt die Dateisystemfunktionen mithilfe des Abschnitts "Kappen" in config.fs Dateien " config.fs .

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

Umgebungsfunktionen aktivieren

Um Umgebungs Fähigkeiten für einen bestimmten Dienst zu aktivieren, verwenden Sie die capabilities Schlüsselwort in init. Aktuelle Details zur Init-Sprache finden Sie in der init README.md .

Zum Beispiel Umgebungs Fähigkeiten für den AOSP Dienst zu aktivieren wificond , die RC - wificond capabilities Datei für die wificond Service - Sets auf den entsprechenden Benutzer und Gruppen und bietet den Service der angegebenen Fähigkeiten , um die Verwendung von capabilities Stichwort:

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 allgemeinen Android-Kernel-Zweige zurückportiert.

Der Haupt-Patch für Umgebungsfunktionen https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=58319057b7847667f0c9585b9de0e8932b0fdb08 wurde 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 Komponententests umfassen Komponententests für Umgebungsfähigkeiten. Darüber hinaus würde die Verwendung des Schlüsselworts "Funktionen" in Android init für einen Dienst und die anschließende Überprüfung, ob der Dienst die erwarteten Funktionen erhält, das Testen dieser Funktion zur Laufzeit ermöglichen.