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:
- android-3.18: <ph type="x-smartling-placeholder">
- Android 4.1: <ph type="x-smartling-placeholder">
Kleine Sicherheitsmaßnahme: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b7f76ea2ef6739ee484a165ffbac98deb855d3d3 wurde zurückportiert in:
- android-3.18: <ph type="x-smartling-placeholder">
- Android 4.1: <ph type="x-smartling-placeholder">
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.