
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
}
참고: 이는 Offensive Security에서 새 이미지를 Docker Hub에 푸시할 때 이미지 크기를 줄이기 위한 요구 사항일 뿐입니다.
개인용으로 빌드하는 경우 build.sh에서 --squash 옵션을 제거할 수 있습니다.
Tue May 21 13:59:06 EDT 2019
당연히 이 이미지를 실행하려면 Docker를 설치해야 합니다. OSX용 Docker는 brew를 사용할 수 있고, 대부분의 다른 배포판에서는 로컬 패키지 관리자를 사용하여 설치할 수 있습니다. 설치 및 설정이 완료되면 Docker 저장소에서 이미지를 pull하기만 하면 됩니다:
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>입니다. 예를 들어 웹 컨테이너에서 셸을 얻으려면 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 -it <image name> <command>를 사용하세요.
docker run 명령은 볼륨 마운트, 환경 변수, 작업 디렉터리 등을 지정하기 위한 명령줄 옵션을 허용합니다.
빌드 컨테이너에 셸을 얻어 모든 작업을 실행하는 것이 가장 간단한 방법입니다. compose 파일에 정의한 cli 컨테이너에 접근하기만 하면 됩니다. docker-compose -f build.yml run cli 명령은 phase2/devtools-build 이미지의 인스턴스를 시작하고 bash 셸을 실행해 줍니다. 그런 다음 drush, grunt 또는 원하는 무엇이든 자유롭게 사용할 수 있습니다.
Docker 세계의 또 다른 개념은 단일 명령을 실행하기 위해 컨테이너를 시작하고 명령이 완료되면 컨테이너를 중지하는 것입니다. 명령을 자주 실행하지 않거나 컨테이너를 계속 실행하고 싶지 않을 때 유용합니다. 이런 방식으로 컨테이너에서 명령을 실행하는 것은 파일 시스템에 파일을 생성하지 않는 명령이나, 파일을 생성하더라도 컨테이너에 마운트된 볼륨에 쓰는 명령에도 적합합니다.
예제 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 이미지는 여러 레이어로 구성됩니다. 매달린 이미지는 태그된 이미지와 관계가 없는 레이어입니다. 더 이상 용도가 없고 디스크 공간을 차지합니다. docker images 명령에 필터 플래그 -f와 값 dangling=true를 추가하여 찾을 수 있습니다. 삭제하려는 것이 확실하면 docker images purge 명령을 사용할 수 있습니다:
참고
If you build an image without tagging it, the image will appear on the list of dangling images because it has no association with a tagged image. You can avoid this situation by providing a tag when you build, and you can retroactively tag an images with the docker tag command.
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 플래그를 추가하여 이미지 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로 표시된 모든 컨테이너를 삭제하려면 두 개의 필터를 사용할 수 있습니다:
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 플래그를 추가하여 docker stop 및 docker rm 명령에 ID를 전달할 수 있습니다:
docker ps -a
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
특정 볼륨 하나 이상 제거 - Docker 1.9 이상
docker volume ls 명령을 사용하여 삭제하려는 볼륨 이름을 찾으세요. 그런 다음 docker volume rm 명령으로 하나 이상의 볼륨을 제거할 수 있습니다:
docker volume ls
docker volume rm volume_name volume_name
볼륨의 목적은 컨테이너와 독립적으로 존재하는 것이므로 컨테이너가 제거되어도 볼륨이 자동으로 함께 제거되지 않습니다. 볼륨이 존재하지만 더 이상 어떤 컨테이너에도 연결되지 않은 경우 이를 매달린 볼륨이라고 합니다. 이를 찾아 제거할지 확인하려면 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 문서를 참조하세요. 이 가이드에서 다루었으면 하는 일반적인 정리 작업이 있다면 댓글로 요청하거나 제안해 주세요.

