Hinzufügen oder Entfernen der Linux-Funktionen in Kubernetes SecurityContext

Hinzufugen Oder Entfernen Der Linux Funktionen In Kubernetes Securitycontext



Es kann schwierig sein, den Grad an Berechtigungen zu verwalten, die jedem Pod und Container in einem Kubernetes-Container bereitgestellt werden. Wir können die Kubernetes SecurityContext-Funktionen verwenden, um die Linux-Funktionen zum Pod und Container hinzuzufügen oder zu löschen, um die Sicherheit des Containers zu erhöhen. Dieser Artikel konzentriert sich auf die Verwendung von securityContext zum Implementieren eines einfachen Beispiels zum Hinzufügen und Löschen von Funktionen. Die Konfiguration einer YAML-Datei zum Löschen aller Funktionen und Hinzufügen nur einer Funktion zu einem Container wird im Beispielbeispiel bereitgestellt. In diesem Artikel werden die Befehle proc und capsh verwendet, um die Fähigkeiten des Containers anzuzeigen.

Schritt 1: Starten Sie den Minikube-Server







Starten Sie zunächst den Minikube-Server, damit Sie Ihre Anwendung ausführen und die kubectl-Anweisungen verwenden können. Sie können Ihre Knoten, Pods und sogar Cluster mithilfe des Minikube-Servers in der Kubernetes-Umgebung bereitstellen. Der folgende Befehl muss verwendet werden, um den Minikube im aktiven Modus zu halten:



> minikube start



Dadurch wird der Minikube-Server eingeschaltet und die Kubernetes-Umgebung ist einsatzbereit.





Schritt 2: Erstellen Sie eine Kubernetes-YAML-Datei



Erstellen Sie im zweiten Schritt eine YAML-Datei, um einen Pod bereitzustellen.

Befolgen Sie die Schritte zum Erstellen einer Yaml-Datei mit Nano:

  • Wechseln Sie zu dem Verzeichnispfad, in dem Sie die Datei erstellen oder eine vorhandene Datei ändern möchten.
  • Geben Sie den nano-Befehl gefolgt vom Dateinamen ein.

Führen Sie den folgenden Nano-Befehl aus. Es erstellt eine YAML-Konfigurationsdatei mit dem Namen „nano podsample.yaml“.

> nano podsample.yaml

Fahren wir mit dem nächsten Schritt fort, der Ihnen helfen soll, eine podsample.yaml-Datei zu konfigurieren.

Schritt 3: Konfigurieren Sie die YAML-Datei

Wir fügen das capsh-Tool im vorherigen Schritt hinzu, damit wir die Fähigkeiten unseres Containers sehen können.

Beachten Sie, dass keiner dieser Parameter für einen securityContext-Abschnitt für diesen Container konfiguriert ist. Daher sind sie alle auf Systemstandardwerte gesetzt. Bedenken Sie, dass dieser Container als Standardbenutzer fungiert, der in der Dockerfile bereitgestellt wird, aus der er erstellt wird, wenn in Kubernetes kein Benutzer dafür definiert ist. Bei vielen Containern ist dieser Standardbenutzer der Root.

Schritt 4: Erstellen Sie einen Pod

Lassen Sie uns in diesem Schritt podsample.yaml mit dem folgenden angehängten Befehl erstellen:

> kubectl gelten -f podsample.yaml

Schritt 5: Auf Fähigkeiten prüfen

Im vorherigen Schritt wurde ein Pod erstellt und ausgeführt.

Jetzt, da wir eine Shell darin haben, können wir capsh verwenden, um ihre Fähigkeiten mit dem folgenden Befehl zu überprüfen:

> $kubectl Exekutive - -stdin - -tty Kappen - - Asche

Mit dem Befehl capsh ist es möglich, die Standardkapazitäten des Containers anzuzeigen, die wie folgt aufgelistet sind:

Wir können aus der gegebenen Ausgabe erkennen, dass der Container viele Standardfunktionen hat, die dem Container zur Laufzeit gegeben werden.

Schritt 6: Lass fallen Einzel Fähigkeit Y im Kubernetes-Sicherheitskontext

In diesem Schritt verwerfen wir die einzelne Fähigkeit des Containers.

Lassen Sie uns die yaml-Datei mit dem folgenden Befehl konfigurieren:

> nano dropod.yaml

Gehen Sie danach zur Konfiguration der droppod.yaml-Datei mit dem folgenden angegebenen Befehl:

> kubectl gelten -f droppod.yaml

Schritt 7 : Konfigurieren, um die einzelne Funktion in der YAML-Datei hinzuzufügen

Öffnen Sie in diesem Schritt die YAML-Datei (dropped.yaml), die in Schritt 6 erstellt wurde. Stellen Sie dann den Container so ein, dass er keinen Zugriff mehr auf die CAP_MKNOD-Funktion hat, wodurch die Möglichkeit zum Erstellen der neuen Dateisystemknoten entfernt wird.

Die konfigurierte Datei sieht wie folgt aus:

Schritt 8 : Auf Fähigkeiten prüfen

Die YAML-Datei ist so konfiguriert, dass die CAP_MKNOD-Funktion gelöscht wird.

Führen Sie in diesem Schritt die Datei dropcaps.yaml aus und führen Sie sie aus, um die Fähigkeiten des Containers mit dem folgenden Befehl zu überprüfen:

> $kubectl Exekutive - -stdin - -tty Dropcaps - - Asche

Die Kapazitäten können durch Ausführen der Dropcaps-Datei überprüft werden:

> # capsh - -print

Wir können beobachten, dass dieser Pod die CAP_MKNOD-Fähigkeit im Vergleich zum ersten Pod fallen gelassen hat.

Schritt 9 : Löschen Sie alle Funktionen in Kubernetes SecurityContext

Da Kubernetes eine einzelne Funktion löschen kann, kann es auch alle Funktionen über securityContext löschen. Löschen Sie in diesem Schritt alle Funktionen des Containers, indem Sie den angegebenen Befehl implizieren:

> nano samplenocap.yaml

Konfigurieren Sie danach die Datei samplenocap.yaml mit dem folgenden Befehl:

> kubectl erstellen -f samplenocap.yaml

Lassen Sie uns nun zum nächsten Schritt übergehen, um alle Kapazitäten in unseren SecurityContext-Einstellungen zu löschen.

Schritt 10: Konfigurieren Sie alle Funktionen in der YAML-Datei

Öffnen Sie in diesem Schritt die YAML-Datei, die in Schritt 9 erstellt wurde. Konfigurieren Sie dann innerhalb von „container.securityContext“ und löschen Sie alle Funktionen des Containers.

Die konfigurierte Datei sieht wie folgt aus:

Schritt elf : Auf Fähigkeiten prüfen

Führen Sie nocaps in capsh aus, um die Informationen zu den Fähigkeiten anzuzeigen. Verwenden Sie in diesem Schritt den folgenden Befehl und zeigen Sie alle Funktionen des Containers an:

> kubectl Exekutive - -stdin - -tty nocaps - - Asche

Die Kapazitäten können in der folgenden Abbildung überprüft werden, indem die yaml-Datei samplenocaps in capsh ausgeführt wird:

> # capsh - -print

Die vorherige Ausgabe zeigt, dass das aktuelle = '' und das Begrenzungsset = '' jetzt leer sind. Die Fähigkeiten werden erfolgreich gelöscht.

Schritt 1 2 : Bash installieren

Installieren Sie in diesem Schritt Bash über apk, da einige Systemfunktionen nicht funktionieren, wenn wir überhaupt keine Fähigkeiten haben. Obwohl unser Container als Root arbeitet, schlägt die Installation des Bash-Pakets fehl.

> # apk bash hinzufügen

Schritt 1 3 : Überprüfen Sie die Informationen zu den Fähigkeiten

Es gibt mehrere Möglichkeiten, die Fähigkeiten unseres Containers anzuzeigen, z. B. die Verwendung der Befehle capsh und proc. In diesem Schritt zeigen wir die Containerkapazitäten mit dem Befehl proc an und proc zeigt Kapazitäten als Bitmap an. Es ist zwar nicht ganz so lesbar wie das Ergebnis von capsh, aber jedes hier definierte Bit steht für eine bestimmte Fähigkeit.

> # cd /proc/1/

Hier können wir sehen, dass dieser bestimmte Container keine aktivierten Funktionen hat; alle diese Werte sind Null.

Schritt 1 4 : Hinzufügen einer einzelnen Funktion in Kubernetes SecurityContext

In den vorherigen Schritten haben wir eine einzelne Funktion, nämlich CAP_MKNOD, und alle Funktionen gelöscht. Aber in diesem Schritt können wir die Fähigkeiten wieder hinzufügen.

Führen Sie den folgenden Befehl aus, um die yAML-Datei zu erstellen:

> nano sampleadd.yaml

Konfigurieren Sie danach die Datei sampleadd.yaml.

> kubectl erstellen -f sampleadd.yaml

Lassen Sie uns nun die Datei sampleadd.yaml ausprobieren und eine einzelne Kapazität in unseren securityContext-Einstellungen hinzufügen.

Schritt 1 5 : Konfigurieren Sie die Einzelfunktion in der YAML-Datei

Lassen Sie uns nun die Datei konfigurieren, indem wir die Fähigkeit in spec.container.securityContext zu Capabilities.add [„MKNOD“] hinzufügen.

Die Funktion wird in der YAML-Datei angezeigt.

Schritt 16 : Auf Fähigkeiten prüfen

Führen Sie in diesem Schritt die addcaps aus, um die Funktionen mit dem folgenden Befehl zu überprüfen:

> kubectl Exekutive - -stdin - -tty addcaps - - als

Die zusätzliche Kapazität ist in der folgenden Ausgabe zu sehen:

aktuell = cap_mknod+ep

Begrenzungssatz = cap_mknod

> # capsh - -print

Fazit

Anhand des implementierten Beispiels haben Sie zunächst die Standardfähigkeiten des Containers kennengelernt, die zur Laufzeit zugewiesen werden, die mit dem Befehl capsh angezeigt wird. Als Nächstes haben Sie gelernt, eine einzelne Funktion in einem Container namens CAP_MKNOD abzulegen. Dann haben Sie auch gelernt, wie Sie alle Funktionen des Containers mit der Konfiguration //drop: –all löschen. Dann haben wir zwei Möglichkeiten verwendet, um die Fähigkeiten von Containern anzuzeigen – mit den Befehlen capsh und proc.