GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Unveränderliches Linux mit Silverblue:Meine liebste Superkraft

Ich bin erst kürzlich, aber engagiert zu Silverblue konvertiert, das ich auf meinem Haupt-Laptop zu Hause ausführe und das ich bei Fälligkeit auf meinem Arbeits-Laptop installieren werde ein Hardware-Upgrade in wenigen Monaten. Ich habe einen Artikel über Silverblue bei Enable Sysadmin geschrieben und am Wochenende den Laptop, den eines meiner Kinder hat, ebenfalls dorthin verschoben. In Bezug auf Benutzerfreundlichkeit, Look und Feel ist Silverblue im Grunde eine Version von Fedora. Es gibt jedoch einen wesentlichen Unterschied, nämlich dass das Betriebssystem schreibgeschützt gemountet wird, was bedeutet, dass es unveränderlich ist.

Was bedeutet "unveränderlich"? Es bedeutet, dass es nicht geändert werden kann. Genauer gesagt bedeutet dies im Softwarekontext im Allgemeinen, dass etwas während der Laufzeit nicht geändert werden kann.

Wichtiger Exkurs:Ständige Unveränderlichkeit

Als ich diesen letzten Satz schrieb, wurde mir klar, dass er ein wenig irreführend sein könnte. Viele Programmiersprachen haben das Konzept von "Konstanten". Eine Konstante ist eine Variable (oder ein Satz oder eine Datenstruktur), die nicht ist Variable. Sie können einer Konstante einen Wert zuweisen und im Allgemeinen davon ausgehen, dass sie sich nicht ändert. Aber – und das hängt von der verwendeten Sprache ab – es kann sein, dass die Konstante nicht ist unveränderlich.

Diese Aussage scheint gegen den gesunden Menschenverstand zu verstoßen; Um fair zu sein, werden die Ausdrücke "Programmiersprache" und "gesunder Menschenverstand" meiner Erfahrung nach selten positiv im selben Satz verwendet. Aber so sind manche Sprachen eben konzipiert. Das Fazit lautet:Wenn Sie eine Variable haben, die unveränderlich sein soll, überprüfen Sie die Syntax der von Ihnen verwendeten Programmiersprache und ergreifen Sie alle erforderlichen Schritte, um diese Unveränderlichkeit bei Bedarf aufrechtzuerhalten.

Unveränderlichkeit des Betriebssystems

Im Fall von Silverblue ist es das Betriebssystem, das unveränderlich ist. Sie installieren Anwendungen in Containern (dazu später mehr) mit Flatpak und nicht auf dem Root-Dateisystem. Dies bedeutet nicht nur, dass die Installation von Anwendungen vom Kerndateisystem isoliert ist, sondern auch, dass die Möglichkeit bösartiger Anwendungen, Ihr System zu kompromittieren, erheblich reduziert wird. Es ist nicht unmöglich – wir versuchen im Allgemeinen, das Wort „unmöglich“ zu vermeiden, wenn wir Angriffe oder Sicherheitslücken beschreiben –, aber das Risiko ist deutlich geringer.

Wie aktualisierst du dann dein System? Nun, Sie erstellen ein neues Boot-Image, das alle erforderlichen aktualisierten Pakete enthält, und wenn Sie bereit sind, booten Sie damit. Silverblue bietet dafür einfache Tools:Es ist wohl weniger mühsam als die Standardmethode zur Aktualisierung Ihres Systems. Dieser Ansatz macht es auch einfach, verschiedene Versionen eines Betriebssystems oder Installationen mit unterschiedlichen Paketsätzen zu warten. Wenn Sie eine Anwendung in einer bestimmten Umgebung testen müssen, booten Sie in das Image, das diese Umgebung widerspiegelt, und führen den Test durch. Eine andere Umgebung? Ein weiteres Bild.

Wir interessieren uns jedoch mehr für die Sicherheitseigenschaften, die uns diese Situation bietet. Es ist nicht nur schwierig, das Kernbetriebssystem als Standardbenutzer zu kompromittieren (wie bei vielen Sicherheitsproblemen, sobald Sie sudo oder Root-Zugriff wird die Situation erheblich verschlechtert), aber Sie arbeiten immer in einer bekannten Umgebung. Kennbarkeit ist eine sehr wünschenswerte Eigenschaft für die Sicherheit, da Sie eine bekannte Konfiguration testen, überwachen und forensische Analysen durchführen können. Aus Sicherheitssicht (ganz zu schweigen von den anderen Vorteilen, die es bietet) ist Unveränderlichkeit definitiv ein Vorteil in einem Betriebssystem.

Container-Unveränderlichkeit

Hier ist nicht der Ort, um Container (auch bekannt als „Linux-Container“ oder, heutzutage seltener oder genauer, „Docker-Container“) im Detail zu beschreiben, aber sie sind im Grunde Sammlungen von Software, die Sie als Images erstellen und dann ausführen Workloads auf einem Hostserver (manchmal auch als „Pod“ bezeichnet). Eines der großartigen Dinge an Containern ist, dass sie im Allgemeinen schnell aus einem Image erstellt (bereitgestellt und ausgeführt) werden können, und ein weiterer, dass das Format dieses Images – das Verpackungsformat – genau definiert ist, sodass es einfach zu erstellen ist die Bilder selbst.

Aus unserer Sicht ist das Tolle an Containern jedoch, dass Sie sie unveränderlich verwenden können. Tatsächlich werden sie im Allgemeinen so verwendet:Die Verwendung veränderlicher Container wird im Allgemeinen als Anti-Pattern angesehen. Die standardmäßige (und „richtige“) Methode zur Verwendung von Containern besteht darin, jede Anwendungskomponente und die erforderlichen Abhängigkeiten in einem klar definierten (und hoffentlich kleinen) Container zu bündeln und diesen dann nach Bedarf bereitzustellen. Die Art und Weise, wie Container gestaltet sind, bedeutet nicht, dass Sie nicht können Software innerhalb des laufenden Containers ändern, aber die Art und Weise, wie sie ausgeführt wird, hält Sie davon ab; was gut ist, da Sie es definitiv nicht sollten.

Denken Sie daran, dass unveränderliche Software eine bessere Erkennbarkeit bietet und Ihre Widerstandsfähigkeit gegenüber Laufzeitkompromittierungen verbessert. Angesichts dessen, wie leicht Container sind, sollten Sie Ihre Anwendung stattdessen so gestalten, dass Sie die Containerinstanz bei Bedarf einfach beenden und durch eine Instanz aus einem aktualisierten Image ersetzen können.

Diese Überlegung bringt uns zu zwei der Gründe, warum Sie Container niemals mit Root-Rechten ausführen sollten. Erstens besteht die Versuchung für legitime Benutzer, dieses Privileg zu nutzen, um Software in einem laufenden Container zu aktualisieren, was die Kenntnis verringert und möglicherweise unerwartetes Verhalten einführt. Zweitens gibt es viel mehr Möglichkeiten für Kompromittierungen, wenn ein böswilliger Akteur – menschlich oder automatisiert – die zugrunde liegende Software im Container ändern kann.

Doppelte Unveränderlichkeit mit Silverblue

Ich habe oben erwähnt, dass Silverblue Anwendungen in Containern ausführt. Diese Tatsache bedeutet, dass Ihnen beim Ausführen von Anwendungen auf einem Silverblue-System standardmäßig zwei Sicherheitsebenen zur Verfügung stehen:die Unveränderlichkeit des Betriebssystems und die Unveränderlichkeit des Containers.

Als Sicherheitsmann befürworte ich Tiefenverteidigung, und dies ist ein klassisches Beispiel für diese Eigenschaft. Ich mag auch die Tatsache, dass ich viel einfacher steuern kann, was ich ausführe – und welche Versionen – als wenn ich ein Standardbetriebssystem hätte.

Dieser Artikel wurde ursprünglich auf Alice, Eve and Bob – einem Sicherheitsblog – veröffentlicht.


Linux
  1. Überwachen Sie Ihr Linux-System in Ihrem Terminal mit procps-ng

  2. Verbessern Sie die Linux-Systemleistung mit noatime

  3. Spielen Linux-Distributionen bei Containern noch eine Rolle?

  4. Befehl zum Herunterfahren von Linux (mit Beispielen)

  5. Planen von Systemaufgaben mit Cron unter Linux

So überwachen Sie ein Linux-System mit dem Glances-Befehl

So retten Sie Ihr Windows- oder Linux-System mit Rescatux

Linux-Verfügbarkeitsbefehl mit Beispielen

Erste Schritte mit dem Linux-Betriebssystem

Finden Sie Informationen zur Linux-Systemhardware mit Hwinfo

So zeigen Sie Linux-Systemstatistiken mit Saidar an