Funktionen für den Inaktivmodus

Mithilfe von Berechtigungen können Linux-Prozesse die meisten Root-ähnlichen Berechtigungen aufheben und gleichzeitig die Berechtigungen beibehalten, die sie für die Ausführung ihrer Funktion benötigen. Bei der ursprünglichen Implementierung von Berechtigungen war es für Prozesse, die durch „fork+exec“ erstellt wurden, nicht möglich, Berechtigungen zu übernehmen, es sei denn, für die ausgeführten Dateien waren Dateiberechtigungen konfiguriert. Dateiberechtigungen stellen wiederum ein Sicherheitsrisiko dar, da jeder Prozess, der eine Datei mit Dateiberechtigungen ausführt, diese erlangen kann.

Mit Umgebungsfunktionen können von init gestartete Systemdienste Funktionen in ihren .rc-Dateien konfigurieren. So wird die Konfiguration in einer einzigen Datei zusammengefasst, anstatt sie in der fs_config.c-Datei aufzuteilen. Das bedeutet, dass Sie für jeden Dienst, der von init gestartet wird, die mit dem Dienst verknüpfte .rc-Datei verwenden können, um Funktionen für diesen Dienst zu konfigurieren.

Ambient-Funktionen sind der bevorzugte Mechanismus zum Festlegen von Funktionen für Dienste, die von init gestartet werden. Bei dieser Methode werden alle Aspekte der Dienstkonfiguration in einer einzigen .rc-Datei gespeichert. Wir empfehlen, die Umgebungsfunktionen zu verwenden, anstatt die Dateisystemfunktionen in config.fs-Dateien über den Abschnitt „caps“ zu konfigurieren.

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

Inaktivfunktionen aktivieren

Wenn Sie die Umgebungsfunktionen für einen bestimmten Dienst aktivieren möchten, verwenden Sie das Schlüsselwort capabilities in init. Weitere Informationen zur aktuellen Sprache für „init“ finden Sie in der README.md-Datei für „init“.

Wenn Sie beispielsweise die Umgebungsfunktionen für den AOSP-Dienst wificond aktivieren möchten, werden in der .rc-Datei für den Dienst wificond die entsprechenden Nutzer und Gruppen eingerichtet und dem Dienst die angegebenen Funktionen mit dem Keyword capabilities zugewiesen:

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

Erforderliche Patches

Die erforderlichen Patches wurden in alle relevanten Android Common Kernel-Branches zurückportiert.

Der Haupt-Patch für die Umgebungsfunktionen https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=58319057b7847667f0c9585b9de0e8932b0fdb08 wurde in folgenden Versionen zurückportiert:

Eine kleine Sicherheitskorrektur https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b7f76ea2ef6739ee484a165ffbac98deb855d3d3 wurde in folgenden Versionen zurückportiert:

Zertifizierungsstufe

Bionic-Unittests umfassen Unittests für Umgebungsfunktionen. Darüber hinaus können Sie die Laufzeittests dieser Funktion durchführen, indem Sie das Keyword „capabilities“ in Android init für einen Dienst verwenden und dann prüfen, ob der Dienst die erwarteten Funktionen erhält.