
kali-linux-docker
この Kali Linux Docker イメージは、Kali Linux Rolling Distribution の最新版の最小限のベースインストールを提供します。 このイメージにはツールは追加されていないため、自分でインストールする必要があります。 Kali Linux メタパッケージの詳細については、https://www.kali.org/news/kali-linux-metapackages/ を確認してください。
Docker Hub: https://hub.docker.com/r/nu11secur1ty/kali-linux-docker
--squash が docker デーモンに渡されるため、デーモンで実験機能が
有効になっていない場合、build.sh スクリプトは失敗します。
Kali では、これは /etc/docker/daemon.json に次の内容を記述することで行います:
{
"experimental": true
}
注: これは、新しいイメージを Docker Hub にプッシュする際にイメージサイズを削減するための、Offensive Security 側の要件にすぎません。
個人利用のためにビルドする場合は、build.sh 内の --squash オプションを削除してもかまいません。
Tue May 21 13:59:06 EDT 2019
言うまでもなく、これを実行するには Docker をインストールする必要があります。OSX で Docker を使う場合は brew を使用でき、他のほとんどのディストリビューションでは、ローカルのパッケージマネージャを使ってインストールできます。インストールとセットアップが完了したら、Docker リポジトリからイメージをプルするだけです:
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
. 使用方法 link:sqliv2
. 取得:
git clone https://github.com/nu11secur1ty/nu11secur1ty.git
link:nu11secur1ty
事前に用意されたイメージを使うのではなく、独自の Kali イメージをビルドしたい場合は、GitHub の Kali Linux Docker で公開されている次のスクリプトを使うと簡単にビルドできます。これらのイメージは、Linux システムや debootstrap を実行できるその他の OS で最適にビルドできます。
#!/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!"


すでに実行中のコンテナに接続するために使用できる docker exec コマンドがあります。
docker exec -it <container name> /bin/bash を使用して、コンテナ内で bash シェルを取得しますdocker exec -it <container name> <command> を使用して、コンテナ内で指定した任意のコマンドを実行します。コンテナ内でコマンドを実行する正しい方法は、docker-compose run <container name> <command> です。たとえば、web コンテナでシェルを取得するには、docker-compose run web /bin/bash を実行します。
一連のコマンドを実行するには、シェルを使用してそれらを単一のコマンドにまとめる必要があります。例: docker-compose run <name in yml> sh -c '<command 1> && <command 2> && <command 3>'
場合によっては、docker-compose.yml ファイルで定義されていないコンテナを実行したいことがあります。たとえば、新しいコンテナ設定をテストする場合などです。docker run を使用して、指定したイメージで新しいコンテナを起動します: docker run -it <image name> <command>
docker run コマンドは、ボリュームマウント、環境変数、作業ディレクトリなどを指定するためのコマンドラインオプションを受け付けます。
ビルドコンテナにシェルを取得して任意の操作を実行するのが、最も簡単な方法です。compose ファイルで定義した cli コンテナにアクセスするだけです。コマンド docker-compose -f build.yml run cli は、phase2/devtools-build イメージのインスタンスを起動し、bash シェルを実行します。そこから drush、grunt、またはお好みのツールを自由に使用できます。
Docker の世界におけるもう 1 つの概念は、単一のコマンドを実行するためだけにコンテナを起動し、コマンドが完了したらコンテナを停止させるというものです。これは、コマンドを頻繁に実行しない場合や、別のコンテナを常時稼働させたくない場合に便利です。この方法でコンテナ上でコマンドを実行することは、ファイルシステムにファイルを生成しないコマンドや、生成する場合でもコンテナにマウントされたボリュームに書き込むコマンドにも適しています。
例の build.yml ファイルで定義されている drush コンテナは、単一の作業ディレクトリで drush を実行し、コマンドだけを引数として受け取るように特別に設計されたコンテナです。このアプローチにより、Drupal サイトで sqlc、cache-rebuild などの任意の drush コマンドをすばやく簡単に実行するための、迅速かつ簡便なメカニズムを提供できます。
また、drush に似た grunt コマンドコンテナや、make/dependency ファイルからサイトをビルドするための単一コマンド drush make を実行する、より特化したコマンドコンテナの例もあります。
ホスト上の webapp フォルダは、コンテナの apache ルートにマウントされます。
docker system prune
docker system prune -a
docker images コマンドを -a フラグ付きで使用して、削除するイメージの ID を特定します。これにより、中間イメージレイヤを含むすべてのイメージが表示されます。削除するイメージを特定したら、その ID またはタグを docker rmi に渡すことができます:
docker images -a
docker rmi Image Image
Docker イメージは複数のレイヤで構成されています。ぶら下がっているイメージ (dangling images) とは、タグ付けされたイメージとの関連性がないレイヤです。これらはもはや役割を果たさず、ディスク領域を消費します。これらは、docker images コマンドにフィルタフラグ -f と値 dangling=true を追加することで特定できます。削除しても問題ないと確認できたら、docker images purge コマンドを使用できます:
注記
タグを付けずにイメージをビルドした場合、そのイメージはタグ付けされたイメージとの関連がないため、ぶら下がっているイメージのリストに表示されます。ビルド時にタグを指定することでこの状況を回避でき、docker tag コマンドでイメージに後からタグを付けることもできます。
docker images -f dangling=true
docker images purge
docker images と grep を組み合わせることで、パターンに一致するすべてのイメージを見つけることができます。確認できたら、awk を使用して ID を docker rmi に渡して削除できます。これらのユーティリティは Docker によって提供されるものではなく、すべてのシステムで利用できるとは限らないことに注意してください:
docker images -a | grep "pattern"
docker images -a | grep "pattern" | awk '{print $3}' | xargs docker rmi
システム上のすべての Docker イメージは、docker images コマンドに -a を追加することで一覧表示できます。すべてを削除しても問題ないと確認できたら、-q フラグを追加して Image ID を docker rmi に渡すことができます:
docker images -a
docker rmi $(docker images -a -q)
コンテナを作成する時点で、完了後にそれを保持しておきたくないことがわかっている場合は、docker run --rm を実行すると、終了時に自動的に削除されます。
docker run --rm image_name
docker ps -a を使用してコンテナを特定し、ステータス (created、restarting、running、paused、exited) でフィルタリングできます。終了したコンテナのリストを確認するには、-f フラグを使用してステータスに基づいてフィルタリングします。それらのコンテナを削除しても問題ないと確認できたら、-q を使用して ID を docker rm コマンドに渡します。
docker ps -a -f status=exited
docker rm $(docker ps -a -f status=exited -q)
Docker フィルタは、フィルタフラグを追加の値と共に繰り返すことで組み合わせることができます。これにより、いずれかの条件を満たすコンテナのリストが得られます。たとえば、Created (無効なコマンドでコンテナを実行した場合に発生する可能性のある状態) または Exited のいずれかにマークされたすべてのコンテナを削除する場合は、2 つのフィルタを使用できます:
docker ps -a -f status=exited -f status=created
docker rm $(docker ps -a -f status=exited -f status=created -q)
docker ps と grep を組み合わせることで、パターンに一致するすべてのコンテナを見つけることができます。削除するリストが得られたら、awk と xargs を使用して ID を docker rmi に渡すことができます。これらのユーティリティは Docker によって提供されるものではなく、すべてのシステムで利用できるとは限らないことに注意してください:
docker ps -a | grep "pattern”
docker ps -a | grep "pattern" | awk '{print $3}' | xargs docker rmi
システム上のコンテナは docker ps で確認できます。-a フラグを追加すると、すべてのコンテナが表示されます。削除しても問題ないと確認できたら、-q フラグを追加して ID を docker stop コマンドと docker rm コマンドに渡すことができます:
docker ps -a
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
特定のボリュームを 1 つ以上削除する - Docker 1.9 以降
docker volume ls コマンドを使用して、削除するボリューム名を特定します。次に、docker volume rm コマンドで 1 つ以上のボリュームを削除できます:
docker volume ls
docker volume rm volume_name volume_name
ボリュームの目的はコンテナから独立して存在することであるため、コンテナが削除されても、ボリュームは同時に自動的に削除されません。ボリュームが存在し、もはやどのコンテナにも接続されていない場合、それはぶら下がっているボリューム (dangling volume) と呼ばれます。削除しても問題ないことを確認するためにそれらを特定するには、docker volume ls コマンドをフィルタ付きで使用して、結果をぶら下がっているボリュームに限定できます。リストを確認したら、docker volume prune ですべて削除できます:
docker volume ls -f dangling=true
docker volume prune
名前のないボリュームを作成した場合、-v フラグを使用してコンテナと同時に削除できます。これは名前のないボリュームでのみ機能することに注意してください。コンテナが正常に削除されると、その ID が表示されます。ボリュームの削除については言及されないことに注意してください。名前がない場合は、システムから静かに削除されます。名前がある場合は、静かに残ります。
docker rm -v container_name
このガイドでは、Docker でイメージ、コンテナ、ボリュームを削除するために使用される一般的なコマンドのいくつかを説明しました。それぞれで使用できる他の多くの組み合わせやフラグがあります。利用可能なものの包括的なガイドについては、docker system prune、docker rmi、docker rm、docker volume rm に関する Docker ドキュメントを参照してください。このガイドに掲載してほしい一般的なクリーンアップタスクがある場合は、コメントで質問または提案してください。

