
Wie verhindere ich, dass ein Benutzer meines vorgefertigten Docker-Containers auf eine Shell innerhalb einer laufenden Instanz dieses Containers zugreifen kann? Ich habe gegoogelt und alle Beiträge gelesen, die sich auf dieses Szenario beziehen, und bin auf keine funktionierende Lösung gestoßen. Ich versuche, den Zugriff auf eine bestimmte Ressource im Container zu verhindern. Nehmen wir für diese Untersuchung an, es handelt sich um eine Seriennummer in einer Konfigurationsdatei. Ich baue auf demjava:7Bild, das auf einerUbuntuBild.
Gehen Sie wie folgt vor, um Ihre Lösung zu testen:
Erstellen und Ausführen Ihres Docker-Containers
Exportieren Sie Ihren Container
docker export [Containername] | gzip -c > meincontainer.tar.gz
Importieren Sie Ihren Container in ein externes System
gzip -dc mycontainer.tar.gz | Docker-Import - [Containername]
Ausführen des Containers
Führen Sie mit einer oder allen der folgenden Methoden eine Shell in den laufenden Container durch:
docker exec -it [Containername] bash
Docker Attach [Containername]
docker run -ti --entrypoint=/bin/bash [Containername]
[Containername] ist der Name Ihres Containers
bash, dash und sh sind alle gültige Shells
Antwort1
Um Joses Antwort zu ergänzen: Eine weitere Lösung besteht darin, ...
docker exec :id -it /bin/rm -R /bin/*
Dadurch werden sh und alle nützlichen Bin-Befehle in 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 noch viel ärgerlicher ... Ich frage mich, ob es eine Möglichkeit gibt, diesen Speicher in Ring 0 zu sperren und den SSH-Zugriff auf den Host vollständig zu unterbinden.
Wenn irgendjemand weiß, wie man das knackt, würde es mich interessieren, wie.
BEARBEITEN
Wenn Sie vertrauliche Informationen schützen möchten, sollten Sie Docker-Geheimnisse verwenden. Sehen Sie sich Folgendes an:
Antwort2
bash
Speziell für den Befehl habe ich in der .bashrc-Datei den Befehl exit
am Ende der Datei hinzugefügt, sodass der Benutzer sich anmeldet und schließlich rausgeschmissen wird, den Befehl aber immer noch verwenden kann sh
.
Antwort3
Wenn es sich bei den Informationen, die Sie schützen möchten, um eine Seriennummer handelt, ist die Verschlüsselung dieser Informationen die einzige sichere Möglichkeit, sie zu schützen. Sie können verschiedene Möglichkeiten wählen, um geheime Daten zu verschlüsseln. Stellen Sie sicher, dass Sie einen starken Schlüssel verwenden. Sie können Ihre Anwendung auch geheime Daten an Ihren Server senden lassen, um deren Gültigkeit zu überprüfen. Basierend auf den Antworten Ihres Servers können die Apps dann weiterarbeiten oder anhalten und Nachrichten anzeigen.
Kurz gesagt: Gehen Sie immer davon aus, dass Ihre Anwendung vollständig und gründlich analysiert werden kann. Verschlüsseln Sie alle geheimen und wichtigen Daten immer mit einem starken Schlüssel, damit das Knacken des Schlüssels sehr lange dauert (nehmen Sie an, dass der Verschlüsselungsalgorithmus öffentlich verfügbar oder bekannt ist).
Das alleinige Verhindern des Zugriffs – selbst wenn Sie eine Möglichkeit dazu finden – vermittelt lediglich ein falsches Sicherheitsgefühl.