Umgebungsfunktionen

Mithilfe von Funktionen können Linux-Prozesse die meisten Root-Berechtigungen aufheben, während Die Teilmenge der Berechtigungen, die zum Ausführen ihrer Funktion erforderlich sind, wird beibehalten. Die ursprüngliche Implementierung von Funktionen machte es unmöglich, einen Fork zu erstellen. Prozesse, um Funktionen zu erben, es sei denn, die ausgeführten Dateien enthielten Funktionen konfiguriert. Dateifunktionen stellen ein Sicherheitsrisiko dar da jeder Prozess, der eine Datei mit Dateifunktionen ausführt, diese Funktionen nutzen können.

Mit Ambient-Funktionen können Systemdienste, die von init gestartet werden, die Konfiguration .rc-Dateien, wodurch die Konfiguration anstatt die Konfiguration in der Datei aufzuteilen, fs_config.c-Datei. Das bedeutet, dass für jeden Service, der von init haben, können Sie die mit dem Dienst verknüpfte Datei .rc für folgende Aktionen verwenden: Funktionen für diesen Dienst konfigurieren.

Ambient-Funktionen werden am besten zum Einstellen von Funktionen verwendet. für Dienste, die mit init gestartet werden. Bei dieser Methode bleiben alle Aspekte des Dienstes Konfiguration in einer einzelnen .rc-Datei). Wir empfehlen die Verwendung des Inaktivmodus Funktionen anstelle von Datei konfigurieren Systemfunktionen mithilfe des Abschnitts „Caps“ in config.fs-Dateien.

Wenn Sie Funktionen für Dienste festlegen, die nicht über die Initialisierungen gestartet werden, gehen Sie so vor: die Dateisystemfunktionen weiter zu konfigurieren, fs_config.c

Inaktivfunktionen aktivieren

Um Inaktivfunktionen für einen bestimmten Dienst zu aktivieren, verwenden Sie den capabilities Keyword in init. Für die aktuelle Initialisierungs-Sprache finden Sie in der init README.md.

Um beispielsweise Umgebungsfunktionen für den AOSP-Dienst zu aktivieren, wificond, die .rc-Datei für den Dienst wificond ein entsprechendes und teilt dem Dienst die angegebenen Funktionen mithilfe der Keyword für 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 zu allen relevanten allgemeinen Android-Kerneln zurückportiert. Zweige.

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

Kleine Sicherheitsmaßnahme: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b7f76ea2ef6739ee484a165ffbac98deb855d3d3 wurde zurückportiert in:

Zertifizierungsstufe

Bionisch Einheitentests umfassen Einheitentests für Umgebungsfunktionen. Darüber hinaus können Sie die „Fähigkeiten“ einen Suchbegriff in Android init für einen Dienst ein. dass der Dienst die erwarteten Funktionen erhält, sind Laufzeittests für diese Funktion.