Wie kann verhindert werden, dass ein Benutzer meines vorgefertigten Docker-Containers auf eine Shell in einer laufenden Instanz dieses Containers zugreifen kann? Ich habe alle Beiträge gegoogelt und gelesen, die sich auf dieses Szenario beziehen, und bin ohne eine funktionierende Lösung gekommen. Ich versuche, den Zugriff auf eine bestimmte Ressource im Container zu verhindern. Um diese Anfrage durchzuführen, nehmen wir an, es handelt sich um eine Seriennummer in einer Konfigurationsdatei. Ich baue auf dem Java: 7- Bild auf, das auf einem Ubuntu- Bild basiert .
Gehen Sie wie folgt vor, um Ihre Lösung zu testen:
Erstellen Sie Ihren Docker-Container und führen Sie ihn aus
Exportieren Sie Ihren Container
Docker-Export [Containername] | gzip -c> mycontainer.tar.gz
Importieren Sie Ihren Container auf einem externen System
gzip -dc mycontainer.tar.gz | Docker-Import - [Containername]
Führen Sie den Container aus
Shell in den laufenden Container mit einer / allen der folgenden Methoden:
docker exec -it [Containername] bash
Docker anhängen [Containername]
Docker run -ti --entrypoint = / bin / bash [Containername]
[Containername] ist der Name Ihres Containers
Bash, Dash und Sh sind alle gültige Shells
Antworten:
bash
Speziell für den Befehl habe ich in der .bashrc-Datei den Befehlexit
am Ende der Datei hinzugefügt , damit sich der Benutzer anmeldet und schließlich ausscheidet, aber Benutzer können densh
Befehl weiterhin verwenden .quelle
Um die Antwort von Jose zu ergänzen, besteht eine andere Lösung darin, ...
Dadurch werden sh und alle nützlichen bin-Befehle unter Linux entfernt. Ich bin mir nicht sicher, was Sie tun würden, um an diesem Punkt in den Container zu gelangen. Ich weiß zwar, dass Sie möglicherweise einen Speicherdebugger verwenden können, um Umgebungsvariablen des laufenden Containers abzurufen, aber das macht es umso ärgerlicher ... Ich frage mich, ob es eine Möglichkeit gibt, diesen Speicher in Ring 0 zu sperren und wegzunehmen SSH-Zugriff insgesamt auf den Host.
Wenn jemand weiß, wie man das knackt, würde mich interessieren, wie.
BEARBEITEN
Sie möchten Docker-Geheimnisse verwenden, wenn Sie vertrauliche Informationen schützen. Auschecken:
https://docs.docker.com/engine/swarm/secrets/
quelle
docker exec -it 'container-id' /bin/rm -R /bin/*
Docker version 18.09.6, build 481bc77156
. Der Ansatz von@ty01
gibt diese Fehlermeldung/bin/rm: cannot remove '/bin/<filename>': No such file or directory
für allefilename
s in/bin
. Die Antwort kommt@Dr. Knowitall
zurückError: No such container: :id
. Auch wenn ichid
durch dasCONTAINER_ID
von ersetzedocker ps
, gibt es immer noch die gleiche Fehlermeldung.Wenn es sich bei den zu schützenden Informationen um eine Seriennummer handelt, ist die Verschlüsselung dieser Informationen die einzig sichere Möglichkeit, sie zu schützen. Sie können verschiedene Möglichkeiten zum Verschlüsseln geheimer Daten auswählen und sicherstellen, dass Sie einen starken Schlüssel verwenden. Sie können Ihre Anwendung auch veranlassen, geheime Daten an Ihren Server zu senden, um deren Gültigkeit zu ermitteln. Basierend auf den Antworten von Ihrem Server können die Apps weiterarbeiten oder Nachrichten stoppen und anzeigen.
Nehmen Sie in Kürze immer an, dass Ihre Anwendung vollständig und gründlich seziert werden kann. Verschlüsseln Sie immer alle geheimen und wichtigen Daten mit einem starken Schlüssel, sodass das Knacken des Schlüssels sehr lange dauert (vorausgesetzt, der Verschlüsselungsalgorithmus ist öffentlich verfügbar oder bekannt).
Wenn Sie den Zugriff allein verhindern, selbst wenn Sie einen Weg finden, dies zu tun, entsteht nur ein falsches Sicherheitsgefühl.
quelle