Das ist Ihnen sicher auch schon passiert: Sie versuchen, einen Behälter für den persönlichen Gebrauch zusammenzubauen und möchten ihn sicherer machen, indem Sie unprivilegierte Container Und plötzlich findet man sich in einem Labyrinth von Berechtigungsfehlern gefangen. Es ist frustrierend, stundenlang Ordner im Benutzerverzeichnis zu konfigurieren, nur um dann festzustellen, dass der Container nicht darauf zugreifen kann oder dass die resultierenden Dateien auf dem Host beschädigt sind. unmöglich zu managen weil sie einem Phantombenutzer gehören.
Tatsächlich hat die Containerisierung zwar die Softwarebereitstellung beschleunigt, aber gleichzeitig erhebliche Risiken mit sich gebracht. Laut aktuellen Daten enthalten die meisten Produktionsimages [unklar – möglicherweise „unklar“ oder „unklar“]. Kritische SchwachstellenDas macht Sicherheit zu einem unverzichtbaren Grundpfeiler. Es geht nicht nur darum, Hackerangriffe zu verhindern, sondern auch darum, zu verstehen, wie das System funktioniert. Prozessisolation damit unsere Infrastruktur nicht zu einem Sieb wird.
Das Ökosystem der Containersicherheit verstehen
Um bei Berechtigungen nicht länger raten zu müssen, müssen wir zunächst wissen, was wir schützen. Die Architektur eines Containers ist in mehrere kritische Schichten unterteilt. Zunächst haben wir die Bild des ContainersDas ist die ursprüngliche Vorlage; wenn diese angreifbar ist, sind alle von Ihnen bereitgestellten Instanzen unsicher. Deshalb ist es unerlässlich, sie zu verwenden. Trusted Base-Bilder und halten Sie sie auf dem neuesten Stand.
Dann die Laufzeitdie als Vermittler zwischen dem Host-Betriebssystem und der Anwendung fungiert. Wenn die Laufzeitumgebung veraltet ist, besteht das Risiko eines Containerflucht steigt dramatisch an. Hinzu kommt die Orchestrierung, beispielsweise mit Kubernetes, wo die rollenbasierte Zugriffskontrolle (RBAC) Sie stellt die einzige wirkliche Barriere gegen unberechtigten Zugriff auf die Management-API dar.
Wir können das nicht vergessen Host-BetriebssystemGelingt es einem Angreifer, den Host-Kernel zu kompromittieren, besitzt er die Kontrolle über die gesamte Domäne. Die Empfehlung ist daher eindeutig: Verwenden Sie einen minimales Betriebssystem um die Angriffsfläche zu verringern. Schließlich ist das Netzwerk der häufigste Einfallspunkt; fast 30 % der Sicherheitsverletzungen erfolgen aufgrund von Verbindungsfehlern, daher die Netzwerksegmentierung und TLS/SSL-Verschlüsselung seine obligatorien
Die Probleme mit Berechtigungen und dem Root-Benutzer
Das typische Problem für Hobbyisten ist der Workflow mit Volumes. Man erstellt einen Ordner, bindet ihn ein und dann – zack! – tritt ein Fehler auf. Zugriff verweigertDies geschieht, weil viele Container standardmäßig als Root gestartet werden. Wenn Sie versuchen, dies zu erzwingen, … UID und GID bei 0 Um die IDs an den Host-Benutzer anzupassen, schaffen Sie eine gefährliche Verbindung. Wenn der Container die Konfiguration dieser IDs nicht zulässt, werden Sie einen ganzen Nachmittag damit verbringen, herauszufinden, welcher interne Benutzer die Anwendung für eine bestimmte Aktion verwendet. chown Handbuch.
Die effiziente Lösung besteht darin, die Prinzip der geringsten PrivilegienSie sollten nur dann etwas als Root ausführen, wenn es unbedingt erforderlich ist. Um das Problem von Container-erstellten Dateien zu lösen, die Sie auf dem Host nicht löschen können, ist es unerlässlich, die Dockerfile wie folgt zu konfigurieren: USER, das Definieren eines Benutzers ohne Berechtigungen vor dem Start der Anwendung.
Wenn Sie Podman verwenden, ist das Konzept von wurzellose Container Es ist nativ und sehr hilfreich, setzt aber voraus, dass man versteht, wie Host-Benutzer Container-Benutzern zugeordnet werden. Um zu verhindern, dass Berechtigungen außer Kontrolle geraten, sollte die Anwendung idealerweise so konzipiert sein, dass sie in bestimmte Routen schreibt und dass… Volumenkartierung Dabei wird die tatsächliche Benutzerkennung (UID) des Benutzers berücksichtigt, der den Prozess startet.
Strategien zum Aufbau gepanzerter Images
Wenn Sie aufhören wollen zu leiden, müssen Sie Ihre Bildsprache ändern. Eine brutal effektive Technik ist... mehrstufige AufbautenIm Prinzip verwendet man ein umfangreiches Image mit allen Build-Tools, um die Binärdatei zu generieren, und kopiert dann nur diese Datei in ein endgültiges Image. extrem leicht.
Sie können mithilfe des Bildes sogar noch einen Schritt weiter gehen. kratzenDadurch entsteht ein Container, der absolut nichts enthält: keine Shell, keinen Paketmanager, nur Ihre Anwendung. Dies macht es einem Angreifer praktisch unmöglich, schädliche Befehle auszuführen, selbst wenn er Zugriff darauf erlangt. Es gibt keinen Befehlsinterpreter. zur Verfügung.
Eine weitere Sicherheitsmaßnahme besteht darin, das Image jeder Binärdatei mit Berechtigungen zu bereinigen. setuid oder setgidDiese Berechtigungen ermöglichen es, eine Datei mit den Rechten des Dateibesitzers und nicht des Benutzers, der sie startet, auszuführen, was eine Art Schnelllaufstelle für... RechteausweitungEin einfacher Befehl zum Suchen und Entfernen dieser Teile während der Image-Erstellung kann Ihnen viel Ärger ersparen.
Die Gefahren des privilegierten Modus und die Fähigkeiten von Linux
Manchmal, aus Verzweiflung darüber, ein Berechtigungsproblem nicht lösen zu können, erliegen wir der Versuchung, die Flagge zu verwenden. -privilegiertVergiss das. Der privilegierte Modus hebt die Isolation des Containers auf und gewährt dir vollen Zugriff auf die Geräte des Hosts. Das ist, als würdest du einem Fremden die Schlüssel zu deinem Haus geben, nur weil er nicht wusste, wie man das Gartentor öffnet.
Stattdessen solltest du mit dem spielen Linux-FunktionenDocker weist standardmäßig Berechtigungen zu (z. B. CAP_CHOWN oder CAP_NET_RAW). Wenn Ihre Anwendung keine tiefgreifenden Netzwerkmanipulationen benötigt, ist die beste Vorgehensweise folgende: unnötige Fähigkeiten eliminieren und fügen Sie nur diejenigen hinzu, die unbedingt erforderlich sind von --cap-add.
Für diejenigen, die anspruchsvollere Umgebungen managen, gibt es Autorisierungs-Plugins wie beispielsweise opa-docker-authz. Diese ermöglichen das Abfangen von Aufrufen der Docker-Daemon-API und das Blockieren jeglicher Versuche, einen Container im privilegierten Modus zu starten, wodurch sichergestellt wird, dass niemand, auch nicht versehentlich, den Zugriff auf den Host offen lässt.
Umweltoptimierung und -pflege
Lassen Sie sich bei der Verwendung von Alpine Linux nicht von der 5-MB-Imagegröße abschrecken, falls dadurch Kompatibilitätsprobleme mit den Bibliotheken entstehen. Manchmal ist ein etwas größeres Debian-Image vorzuziehen. stabilisiert und bekannt vom Team. Entscheidend ist die Umsetzung eines Schwachstellenscan Automatisierte CI/CD-Pipeline zur Erkennung von CVEs, bevor das Image in die Produktion gelangt.
Bezüglich des Speichers verhindert es, dass die Anwendung in das Stammdateisystem schreibt. Konfigurieren Sie die schreibgeschütztes Dateisystem (rootfs) und definiert spezifische Datenträger nur für die Daten, die dauerhaft gespeichert werden müssen. Dies ist nicht nur sicherer, sondern erzwingt auch eine sauberere Architektur. NachlasslosErleichterung der horizontalen Skalierung.
Für geplante Prozesse sollten Cronjobs nicht innerhalb des Website-Containers ausgeführt werden. Die goldene Regel lautet: ein Prozess pro ContainerDie sauberste Methode ist, das Image Ihrer App zu verwenden, um einen kurzlebigen Container zu starten, der die Aufgabe ausführt und sich anschließend selbst zerstört, oder den Cronjob vom Host aus zu verwalten, indem Sie die Container-Engine mit Befehlen aufrufen.
Containersicherheit ist ein fortlaufender Prozess, der die Abschaffung des Root-Zugriffs, die Einschränkung der Kernel-Funktionen und das Entfernen unnötiger Tools aus Container-Images umfasst. Durch die Kombination von eingeschränkten Benutzerrechten mit Laufzeithärtung und kontinuierlicher Überwachung wird eine Umgebung geschaffen, in der die Funktionalität die Integrität des Hostsystems nicht beeinträchtigt.
Leidenschaftlicher Autor über die Welt der Bytes und der Technologie im Allgemeinen. Ich liebe es, mein Wissen durch Schreiben zu teilen, und genau das werde ich in diesem Blog tun und Ihnen die interessantesten Dinge über Gadgets, Software, Hardware, technologische Trends und mehr zeigen. Mein Ziel ist es, Ihnen dabei zu helfen, sich auf einfache und unterhaltsame Weise in der digitalen Welt zurechtzufinden.

