概述

先来谈谈这种方式的优缺点

优点:

  • 可以不用运行额外的完整操作系统
  • 可以直接在当前终端启动Kali,并使用其工具

缺点:

  • 无法直接访问硬件,导致部分工具使用相当复杂

达到的效果:

过程概述:

  1. 从docker拉取kali-linux官方提供的映像kalilinux/kali-rolling;
  2. 构建一个容器,进入容器的shell,更新软件源,并下载kali linux的工具包;
  3. 基于我们作出更改的容器,创建新的映像,我们的映像中将包含更新和工具包;
  4. 对Kali内部分数据目录映射到Docker Volumes,每次使用完Kali后,都会自动删除容器,并利用我们镜像和Volumes随时重新创建;
  5. 编写启动脚本,并将其设置在环境变量中。

完整过程

  1. 拉取Kali Linux 的官方Docker映像
1
docker pull kalilinux/kali-rolling
  1. 基于该映像构建一个容器,并进入shell
1
docker run -ti kalilinux/kali-rolling

这时候我们开启的这个kali仅仅是一个骨架,不包含任何工具,此时我们要使用apt工具,更新apt源

1
2
3
4
apt update
apt dist-update
apt autoremove
apt clean

接下来我们安装Kali Linux的工具,我们可以安装Kali官方打包的meta packages,提供的详情可以查看:https : //www.kali.org/news/kali-linux-metapackages/。一般而言,我们都会先安装kali-tools-top10

1
apt install kali-tools-top10

其他根据需要再安装,也可以安装all包,将安装kali官方所有的工具。

  1. 接下来我们需要根据我们更改后的容器构建一个新的映像。

首先我们需要退出(exit命令)当前Kali Linux,运行查看所有容器的命令

1
docker ps -a

通过这个命令,我们可以查看所有的Docker容器,我们需要的是其中的CONTAINER ID

1
2
3
CONTAINER ID   IMAGE                                        COMMAND                   CREATED          STATUS                       PORTS     NAMES
4703cf51b913 kalilinux/kali-rolling "bash" 11 seconds ago Exited (127) 4 seconds ago crazy_bose

获取到CONTAINER ID后,执行下列命令以构建我们的定制映像

1
docker commit <CONTAINER ID> <custom name>

在custom name处我们可以填入我们想要的名称,通过

1
docker image ls

即可看到我们自定义的映像。

  1. 在使用Docker时,不在停止的容器上浪费存储空间是一个优良的习惯。我们常常会在运行docker容器时,加入--rm使得在结束使用后容器自动销毁。
    但是我们有不少数据,我们会希望在Kali的docker容器运行结束后能够持久花存储,因此这时候我们就用到持久化策略。

通常,我们使用Kali时数据保存在以下目录中:

  • /root — home dir for root (downloads, notes, source code etc.)
  • /var/lib/postgresql — Postgres database files (used by Metasploit)

我们可以将这两个目录映射到Docker Volumes上,在删除容器时保存我妈的数据。通过映射的Docker Volumes和我们创建的自定义映像我们即可随时重新创建我们的kali

1
docker run -ti --rm --mount src=kali-root,dst=/root --mount src=kali-postgres,dst=/var/lib/postgresql <custom name>
  • 这些参数将会创建两个volume kali-rootkali-postgres,并将这两个映射到创建的容器中(若已经存在名称为这两个的volume,则会直接映射)
  • <custom name>填入的是我们之前自定义映像的名称
  1. 接下来我们可以将上面运行的命令保存到一个文件中,并且给予运行权限,例如我们创建了一个叫kali的文件,里面写入我们的docker启动kali的命令,给予运行权限的命令为
1
chmod +x kali

然后我们可以将这个文件的目录写入我们环境变量中,例如我将kali保存在一个名字为docker-script的文件夹中,并将其加入.zshrc

1
export PATH=$PATH:~/docker-scripts

然后我们在终端中即可使用kali运行我们基于docker的kali-linux环境了。