
kali-linux-docker
Dieses Kali-Linux-Docker-Image bietet eine minimale Basisinstallation der neuesten Version der Kali Linux Rolling Distribution. Diesem Image sind keine Tools hinzugefügt, du musst sie also selbst installieren. Weitere Details zu Kali-Linux-Metapaketen findest du unter https://www.kali.org/news/kali-linux-metapackages/
Docker Hub: https://hub.docker.com/r/nu11secur1ty/kali-linux-docker
Da --squash an den Docker-Daemon übergeben wird, schlägt das build.sh-Skript fehl, falls experimentelle
Funktionen in deinem Daemon nicht aktiviert sind.
Auf Kali geschieht dies über /etc/docker/daemon.json mit folgendem Inhalt:
{
"experimental": true
}
Hinweis: Dies ist nur eine Anforderung für uns bei Offensive Security, um die Image-Größe zu reduzieren, wenn wir ein neues Image auf Docker Hub pushen.
Wenn du für den persönlichen Gebrauch baust, kannst du die --squash-Option in build.sh entfernen.
Tue May 21 13:59:06 EDT 2019
Um das zum Laufen zu bringen, musst du natürlich Docker installieren. Für Docker unter OSX kannst du brew verwenden, während du es für die meisten anderen Distributionen über deinen lokalen Paketmanager installieren kannst. Sobald es installiert und eingerichtet ist, musst du nur noch unser Image aus dem Docker-Repository ziehen:
nu11secur1ty:~ # docker pull nu11secur1ty/kali-linux-docker
nu11secur1ty:~ # docker run -t -i nu11secur1ty/kali-linux-docker /bin/bash
root@7e2a35940eff:/# apt update
root@7e2a35940eff:/# apt dist-update
root@7e2a35940eff:/# apt update && apt install metasploit-framework
root@7e2a35940eff:/# apt update && apt install git
root@7e2a35940eff:/# apt update && apt install vim
root@7e2a35940eff:/# service postgresql start
root@7e2a35940eff:/# ss -ant
root@7e2a35940eff:/# msfdb init
root@7e2a35940eff:/# msfconsole
git clone https://github.com/nu11secur1ty/sqliv2.git
cd sqliv2
. Verwendung Link:sqliv2
. Holen:
git clone https://github.com/nu11secur1ty/nu11secur1ty.git
Link:nu11secur1ty
Wenn du deine eigenen Kali-Images erstellen möchtest, anstatt unsere vorgefertigten zu verwenden, haben wir es dir mit dem folgenden Skript, das auf Kali Linux Docker auf Github gehostet wird, leicht gemacht. Diese Images lassen sich am besten auf einem Linux-System oder einem anderen Betriebssystem erstellen, das debootstrap verwenden kann.
#!/bin/bash
# Install dependencies (debootstrap)
sudo apt-get install debootstrap
# Fetch the latest Kali debootstrap script from git
curl "https://gitlab.com/kalilinux/packages/debootstrap.git;a=blob_plain;f=scripts/kali;hb=HEAD" > kali-debootstrap &&\
sudo debootstrap kali ./kali-root http://http.kali.org/kali ./kali-debootstrap &&\
# Import the Kali image into Docker
sudo tar -C kali-root -c . | sudo docker import - kalilinux/kali &&\
sudo rm -rf ./kali-root &&\
# Test the Kali Docker Image
docker run -t -i kalilinux/kali cat /etc/debian_version &&\
echo "Build OK" || echo "Build failed!"


Es gibt einen docker exec-Befehl, mit dem du dich mit einem bereits laufenden Container verbinden kannst.
docker ps, um den Namen des vorhandenen Containers zu erhaltendocker exec -it <container name> /bin/bash, um eine Bash-Shell im Container zu erhaltendocker exec -it <container name> <command>, um den von dir angegebenen Befehl im Container auszuführen.Der richtige Weg, einen Befehl in einem Container auszuführen, ist: docker-compose run <container name> <command>. Um zum Beispiel eine Shell in deinen Web-Container zu bekommen, könntest du docker-compose run web /bin/bash ausführen.
Um eine Reihe von Befehlen auszuführen, musst du sie mit einer Shell in einen einzigen Befehl verpacken. Zum Beispiel: docker-compose run <name in yml> sh -c '<command 1> && <command 2> && <command 3>'
In manchen Fällen möchtest du vielleicht einen Container ausführen, der nicht durch eine docker-compose.yml-Datei definiert ist, zum Beispiel um eine neue Container-Konfiguration zu testen. Verwende docker run, um einen neuen Container mit einem bestimmten Image zu starten: docker run -it <image name> <command>
Der Befehl docker run akzeptiert Kommandozeilenoptionen, um Volume-Mounts, Umgebungsvariablen, das Arbeitsverzeichnis und mehr festzulegen.
Eine Shell in einem Build-Container zu erhalten, um beliebige Operationen auszuführen, ist der einfachste Ansatz. Du möchtest einfach Zugriff auf den cli-Container erhalten, den wir in der Compose-Datei definiert haben. Der Befehl docker-compose -f build.yml run cli startet eine Instanz des phase2/devtools-build-Images und führt für dich eine Bash-Shell aus. Von dort aus kannst du drush, grunt oder was auch immer dein kleines Herz begehrt, verwenden.
Ein weiteres Konzept in der Docker-Welt ist es, einen Container zu starten, um einen einzelnen Befehl auszuführen, und dem Container zu erlauben, zu stoppen, wenn der Befehl abgeschlossen ist. Das ist großartig, wenn du Befehle nur selten ausführst oder nicht möchtest, dass ein weiterer Container ständig läuft. Das Ausführen deiner Befehle in Containern auf diese Weise eignet sich auch gut für Befehle, die keine Dateien auf dem Dateisystem erzeugen, oder wenn sie es tun, schreiben sie diese Dateien auf Volumes, die in den Container eingehängt sind.
Der drush-Container, der in der Beispiel-Datei build.yml definiert ist, ist ein Container, der speziell dafür entwickelt wurde, drush in einem einzigen Arbeitsverzeichnis auszuführen und nur die Befehle als Argumente entgegenzunehmen. Dieser Ansatz ermöglicht es uns, einen schnellen und einfachen Mechanismus bereitzustellen, um jeden drush-Befehl wie sqlc, cache-rebuild und andere in deiner Drupal-Site schnell und einfach auszuführen.
Es gibt auch andere Beispiele für einen grunt-Befehlscontainer, ähnlich wie drush, und einen noch spezifischeren Befehlscontainer, der einen einzelnen Befehl ausführt, drush make, um die Site aus einer Make-/Dependency-Datei zu erstellen.
Der webapp-Ordner auf dem Host wird in das Apache-Root-Verzeichnis des Containers eingehängt.
docker system prune
docker system prune -a
Verwende den Befehl docker images mit der Option -a, um die ID der Images zu finden, die du entfernen möchtest. Dadurch werden dir alle Images angezeigt, einschließlich der Zwischen-Image-Ebenen. Wenn du die zu löschenden Images gefunden hast, kannst du ihre ID oder ihr Tag an docker rmi übergeben:
docker images -a
docker rmi Image Image
Docker-Images bestehen aus mehreren Ebenen. Verwaiste Images sind Ebenen, die keine Beziehung zu getaggten Images haben. Sie erfüllen keinen Zweck mehr und verbrauchen Speicherplatz. Sie können gefunden werden, indem du dem Befehl docker images das Filter-Flag -f mit dem Wert dangling=true hinzufügst. Wenn du sicher bist, dass du sie löschen möchtest, kannst du den Befehl docker images purge verwenden:
HINWEIS
Wenn du ein Image ohne Tag erstellst, erscheint das Image in der Liste der verwaisten Images, da es keine Zuordnung zu einem getaggten Image hat. Du kannst diese Situation vermeiden, indem du beim Erstellen ein Tag angibst, und du kannst ein Image nachträglich mit dem Befehl docker tag taggen.
docker images -f dangling=true
docker images purge
Du kannst alle Images finden, die einem Muster entsprechen, indem du docker images und grep kombinierst. Wenn du zufrieden bist, kannst du sie löschen, indem du awk verwendest, um die IDs an docker rmi zu übergeben. Beachte, dass diese Hilfsprogramme nicht von Docker bereitgestellt werden und nicht unbedingt auf allen Systemen verfügbar sind:
docker images -a | grep "pattern"
docker images -a | grep "pattern" | awk '{print $3}' | xargs docker rmi
Alle Docker-Images auf einem System können aufgelistet werden, indem du dem Befehl docker images die Option -a hinzufügst. Wenn du sicher bist, dass du sie alle löschen möchtest, kannst du die Option -q hinzufügen, um die Image-ID an docker rmi zu übergeben:
docker images -a
docker rmi $(docker images -a -q)
Wenn du bereits beim Erstellen eines Containers weißt, dass du ihn nicht behalten möchtest, sobald du fertig bist, kannst du docker run --rm ausführen, um ihn automatisch zu löschen, wenn er beendet wird.
docker run --rm image_name
Du kannst Container mit docker ps -a finden und sie nach ihrem Status filtern: created, restarting, running, paused oder exited. Um die Liste der beendeten Container zu überprüfen, verwende das Flag -f, um nach Status zu filtern. Wenn du überprüft hast, dass du diese Container entfernen möchtest, verwende -q, um die IDs an den Befehl docker rm zu übergeben.
docker ps -a -f status=exited
docker rm $(docker ps -a -f status=exited -q)
Docker-Filter können kombiniert werden, indem das Filter-Flag mit einem zusätzlichen Wert wiederholt wird. Dies führt zu einer Liste von Containern, die entweder die eine oder die andere Bedingung erfüllen. Wenn du zum Beispiel alle Container löschen möchtest, die entweder als Created (ein Zustand, der entstehen kann, wenn du einen Container mit einem ungültigen Befehl ausführst) oder Exited markiert sind, kannst du zwei Filter verwenden:
docker ps -a -f status=exited -f status=created
docker rm $(docker ps -a -f status=exited -f status=created -q)
Du kannst alle Container finden, die einem Muster entsprechen, indem du docker ps und grep kombinierst. Wenn du sicher bist, dass du die Liste hast, die du löschen möchtest, kannst du awk und xargs verwenden, um die ID an docker rmi zu übergeben. Beachte, dass diese Hilfsprogramme nicht von Docker bereitgestellt werden und nicht unbedingt auf allen Systemen verfügbar sind:
docker ps -a | grep "pattern”
docker ps -a | grep "pattern" | awk '{print $3}' | xargs docker rmi
Du kannst die Container auf deinem System mit docker ps überprüfen. Das Hinzufügen des Flags -a zeigt alle Container an. Wenn du sicher bist, dass du sie löschen möchtest, kannst du das Flag -q hinzufügen, um die IDs an die Befehle docker stop und docker rm zu übergeben:
docker ps -a
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
Ein oder mehrere bestimmte Volumes entfernen - Docker 1.9 und später
Verwende den Befehl docker volume ls, um den oder die Namen der Volumes zu finden, die du löschen möchtest. Dann kannst du ein oder mehrere Volumes mit dem Befehl docker volume rm entfernen:
docker volume ls
docker volume rm volume_name volume_name
Da der Sinn von Volumes darin besteht, unabhängig von Containern zu existieren, wird ein Volume beim Entfernen eines Containers nicht automatisch mitentfernt. Wenn ein Volume existiert und nicht mehr mit Containern verbunden ist, nennt man es ein verwaistes Volume. Um sie zu finden und zu bestätigen, dass du sie entfernen möchtest, kannst du den Befehl docker volume ls mit einem Filter verwenden, um die Ergebnisse auf verwaiste Volumes zu beschränken. Wenn du mit der Liste zufrieden bist, kannst du sie alle mit docker volume prune entfernen:
docker volume ls -f dangling=true
docker volume prune
Wenn du ein unbenanntes Volume erstellt hast, kann es gleichzeitig mit dem Container mit dem Flag -v gelöscht werden. Beachte, dass dies nur mit unbenannten Volumes funktioniert. Wenn der Container erfolgreich entfernt wurde, wird seine ID angezeigt. Beachte, dass kein Hinweis auf die Entfernung des Volumes gemacht wird. Wenn es unbenannt ist, wird es stillschweigend vom System entfernt. Wenn es benannt ist, bleibt es stillschweigend erhalten.
docker rm -v container_name
Dieser Leitfaden behandelt einige der gebräuchlichsten Befehle zum Entfernen von Images, Containern und Volumes mit Docker. Es gibt viele andere Kombinationen und Flags, die mit jedem verwendet werden können. Eine umfassende Anleitung zu den verfügbaren Optionen findest du in der Docker-Dokumentation zu docker system prune, docker rmi, docker rm und docker volume rm. Wenn du weitere gängige Bereinigungsaufgaben im Leitfaden sehen möchtest, frag bitte oder mache Vorschläge in den Kommentaren.

