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

Erkundung des neuen Podman-Geheimbefehls

Wir alle haben mit sensiblen Informationen zu tun, wenn wir mit Computersystemen arbeiten. Systemadministratoren verschieben SSH-Schlüssel und Webentwickler müssen sich um API-Token kümmern. Das Problem mit sensiblen Informationen ist, dass sie sensibel sind , was bedeutet, dass es eine Sicherheitskatastrophe verursachen könnte, wenn es irgendwie in die falschen Hände geraten würde. Container sind keine Ausnahme von diesem Problem – Benutzer müssen vertrauliche Informationen in Containern verwenden und gleichzeitig die vertraulichen Informationen sicher aufbewahren.

[ Vielleicht gefällt Ihnen auch die Lektüre: Rootless-Container mit Podman ]

Warum Geheimnisse?

Was ist, wenn jemand eine Datenbank in einem Container ausführen muss und die Anmeldedaten für die Datenbank in einen Container eingefügt werden müssen? Dies kann auf mehrere Arten erfolgen. Sie könnten beim Ausführen des Containers einfach eine Datei erstellen und die Anmeldedaten dort speichern. Dies ist jedoch gefährlich. Wenn der Container in das Image exportiert wird, werden die Anmeldeinformationen ebenfalls exportiert. Jeder, der die Kontrolle über das Bild hat, könnte auf die Datenbank zugreifen. Eine weitere Möglichkeit besteht darin, die Zugangsdaten über die CLI weiterzugeben, aber das erfordert jedes Mal die Eingabe der Daten, was mühsam sein kann.

Was wäre, wenn es eine Methode zur zentralen Verwaltung sensibler Informationen gäbe?

Der neue Befehl, podman secret , ist eine Reihe von Unterbefehlen und Optionen, die vertrauliche Informationen auf benutzerfreundliche und sichere Weise verwalten. Es ermöglicht Benutzern, vertrauliche Inhalte innerhalb eines Containers problemlos zu verwenden, verhindert jedoch, dass sie irgendwo außerhalb des Containers landen, z. B. in einer Bildregistrierung. Wir haben eine ganze Reihe von Unterbefehlen für podman secret implementiert :create , rm , ls , und inspect , um Geheimnisse zu erstellen und zu manipulieren, sowie ein --secret Flag zum Einfügen eines Geheimnisses in einen Container.

Wie wird es verwendet?

Beim podman secret create ausgeführt wird, erwartet Podman eine Datei mit den zu speichernden Daten.

$ echo "secretdata" > secretfile
$ podman secret create secretname secretfile
e17465c9772b38f336fc4cbac

Die podman secret inspect Der Befehl zeigt nicht die gespeicherten Daten an, sondern nur Metadaten zum Geheimnis.

$ podman secret inspect secretname
[
    {
        "ID": "e17465c9772b38f336fc4cbac",
        "CreatedAt": "2021-02-12T09:05:49.661504248-05:00",
        "UpdatedAt": "2021-02-12T09:05:49.661504248-05:00",
        "Spec": {
            "Name": "secretname",
            "Driver": {
                "Name": "file",
                "Options": null
            }
        }
    }
]

Natürlich können Sie Ihre Geheimnisse auch auflisten und entfernen.

$ podman secret ls
ID                         NAME        DRIVER      CREATED       UPDATED       
e17465c9772b38f336fc4cbac  secretname  file        1 second ago  1 second ago  

$ podman secret rm secretname
e17465c9772b38f336fc4cbac

Um das Geheimnis zu verwenden und auf die geheimen Daten zuzugreifen, kann ein Container erstellt oder mit einem --secret ausgeführt werden Flagge. Innerhalb des Containers kann auf die geheimen Daten in einer Datei unter /run/secrets/secretname zugegriffen werden . Sie können den --secret verwenden mehrmals markieren, um dem Container zahlreiche Geheimnisse hinzuzufügen.

$ podman run --secret secretname --name foo alpine cat /run/secrets/secretname
secretdata

Secrets werden nicht an ein Image übergeben oder mit einem podman commit exportiert oder ein podman export Befehl. Dadurch wird verhindert, dass vertrauliche Informationen versehentlich an ein öffentliches Register übertragen oder an die falsche Person weitergegeben werden.

$ podman commit foo secrimg
Getting image source signatures
Copying blob 1119ff37d4a9 skipped: already exists  
Copying blob 3dd965b4468a done  
Copying config 263fcafb79 done  
Writing manifest to image destination
Storing signatures
263fcafb790dfdf6a7312953d3600ff9d990a664ec341ded7d0a6dfa1e71bb5d

$ podman run secrimg cat /run/secrets/mysecret
cat: can't open '/run/secrets/mysecret': No such file or directory

Wie funktioniert es?

Wenn ein Benutzer den --secret verwendet Flag, Podman ruft die geheimen Daten ab und speichert sie auf einem tmpfs . Anschließend wird die Datei unter /run/secrets/secretname in den Container gemountet . Von dort aus kann das Geheimnis wie gewohnt innerhalb des Containers verwendet werden, egal ob es sich um Datenbankschlüssel oder TLS-Zertifikate handelt.

Secrets existieren nur auf dem Computer des Secret-Erstellers oder in einem Container, wenn dieser zur Ausführung bereit ist. Geheimnisse sind speziell darauf ausgelegt, nicht existiert in Bildern:Ein podman commit wird weder das Geheimnis in das Bild übertragen noch ein podman export . Wenn jemand ein Image aus einem Container mit einem Geheimnis erstellen würde, dann führen Sie einen Container aus diesem Image aus, die Datei unter /run/secret/mysecret würde es nicht geben. Dadurch wird verhindert, dass geheime Daten versehentlich in eine Registry übertragen werden, wodurch verhindert wird, dass vertrauliche, kompromittierende Informationen irgendwo vorhanden sind, wo sie nicht sein sollten.

Zukunftsarbeit

Im Moment übernimmt diese Lösung die Aufgabe, Geheimnisse zu verwalten. Der einzige implementierte Treiber zum Speichern der sensiblen Informationen ist derzeit jedoch ein Dateitreiber, was bedeutet, dass die Daten auf der Festplatte in unverschlüsselten Dateien gespeichert werden, die vom Container-Host kontrolliert werden. Wir planen weitere Verbesserungen, wie die Implementierung einer Verschlüsselung oder die Verwendung anderer Treiber. Wir möchten auch geheime Umgebungsvariablen unterstützen, bei denen es sich um Umgebungsvariablen handelt, die innerhalb des Containers festgelegt, aber nicht im Image aufgezeichnet werden. Die Beteiligung der Community an diesen Aufgaben wird dankbar angenommen.

[ Erste Schritte mit Containern? Schauen Sie sich diesen kostenlosen Kurs an. Containerisierte Anwendungen bereitstellen:Eine technische Übersicht. ]

Cool. Ich will es.

Podman-Geheimnisse sind in Podman 3.1.0 verfügbar. Wenn Sie es ausprobieren möchten, können Sie Podman herunterladen, indem Sie dieser Installationsanleitung folgen. Wenn Sie Podman bereits haben, können Sie die Secrets-Funktion erhalten, indem Sie auf Podman 3.1.0 upgraden. Bei Fragen oder Feedback können Sie sich auch gerne an das Podman-Team wenden. Podman-Entwickler hängen oft im Freenode-Kanal #podman ab. Sie können uns eine E-Mail senden, indem Sie die Podman-Mailingliste verwenden. Wir haben auch monatliche Community-Treffen. Bitte zögern Sie nicht, vorbeizuschauen und dort auch Hallo zu sagen.


Linux
  1. Meistern Sie den Linux-ls-Befehl

  2. Einführung in den Alternativen-Befehl in Linux

  3. Eine Einführung in den diff-Befehl

  4. 5 praktische Beispiele des dd-Befehls unter Linux

  5. Der Befehl locate unter Linux

Der Linux-tar-Befehl erklärt

Untersuchung des Auditberichts von Lynis

Meistern Sie die Linux-Befehlszeile

Der Choose-Befehl unter Linux

Der Timer-Befehl in Linux

Wesentliche Beispiele des ps-Befehls in Linux