In den letzten Jahren habe ich viel mit Containern zu tun. Zuvor habe ich einen großartigen Vortrag von Julien Friedman gesehen, der in ein paar Zeilen Go ein Container-Framework geschrieben hat. Mir wurde plötzlich klar, dass ein Container nur eine Maschine innerhalb eines eingeschränkten Linux-Prozesses ist.
Der Aufbau dieser eingeschränkten Ansicht erfordert viele Aufrufe im Golang-Systemaufrufpaket. Anfangs habe ich nur die oberflächlichen verwendet, aber nach einer Weile wollte ich die nächste Zwiebelschicht abziehen und sehen, was diese Systemaufrufe sind und wie sie funktionieren. Ich werde teilen, was ich in meinem Vortrag bei OSCON gelernt habe.
Wie der Name schon sagt, sind Systemaufrufe Systemaufrufe, mit denen Sie den Zugriff auf den Linux-Kernel aus dem Benutzerbereich anfordern. Der Kernel erledigt einige Arbeiten für Sie, z. B. das Erstellen eines Prozesses, und kehrt dann in den Benutzerbereich zurück.
Es gibt einen gemeinsamen Mechanismus, der dafür sorgt, dass alle Systemaufrufe an den Kernel weitergeleitet werden, der von der libc-Bibliothek verwaltet wird. Der Userspace-Code legt einige Register fest, einschließlich der ID des gewünschten Systemaufrufs und aller Argumente, die er an den Systemaufruf übergeben muss. Es löst eine „Falle“ aus, um die Kontrolle an den Kernel zu übertragen.
Auf diese Weise stellt der User-Space-Code Anforderungen an den Kernel. Linux verfügt außerdem über ein Pseudodateisystem, das es dem Kernel ermöglicht, Informationen an den User-Space weiterzuleiten, und dessen Inhalt wie normale Verzeichnisse und Dateien aussieht.
Das Verzeichnis/proc ist ein gutes Beispiel. Werfen Sie einen Blick hinein und Sie werden jede Menge interessante Informationen über die auf der Maschine ablaufenden Prozesse finden. In einigen Fällen, wie etwa bei Cgroups (Kontrollgruppen), kann der Userspace Parameter konfigurieren, indem er in Dateien unter diesen Pseudodateisystemen schreibt.
Was besonders interessant ist, wenn Sie mit Containern arbeiten, ist, dass /proc des Hosts alle Informationen über den Containerprozess enthält. Dazu gehören Umgebungsvariablen, die ebenfalls im /proc-Pseudodateisystem gespeichert werden, was bedeutet, dass Ihr Host Zugriff auf die Umgebung aller laufenden Container hat. Wenn Sie Geheimnisse wie Anmeldeinformationen oder Datenbankkennwörter über Umgebungsvariablen an den Container übergeben, kann dies Auswirkungen auf die Sicherheit haben.
Viele Programmierer, die reguläre Programme schreiben, haben möglicherweise das Gefühl, dass sie Systemaufrufe nicht sehr oft verwenden. Tatsächlich werden sie jedoch häufig aufgerufen, da alltägliche Aktivitäten wie das Erstellen von Dateien oder das Ändern von Verzeichnissen Linux-Systemaufrufe erfordern.
Sie müssen kein Systemprogrammierer sein, um Systemaufrufe zu genießen!
Über den Autor:
Liz Rice – Liz Rice ist technische Evangelistin und Expertin für Containersicherheit bei Aqua Security. Zuvor war sie Mitbegründerin von Microscaling Systems und entwickelte dessen Echtzeit-Skalierungs-Engine sowie die beliebte Bildmetadaten-Website MicroBadger.com. Sie verfügt über umfangreiche Erfahrung in der Entwicklung, dem Team- und Produktmanagement von Software, die von Netzwerkprotokollen und verteilten Systemen bis hin zu digitalen Technologiebereichen wie VOD, Musik und VoIP reicht.
Das obige ist der detaillierte Inhalt vonTipps für Anfänger zum Erlernen von Linux-Systemaufrufen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!