mac使用docker版kali

一般使用kali都是通过pd虚拟机或者vm虚拟机,但是利用虚拟机使用kali还是有点过度占用资源了,有时候我们根本不需要使用图形化界面运行kali,只需要一个终端就行了。最精简的kali其实就是使用docker来部署kali

1、下载安装docker

https://docs.docker.com/desktop/install/mac-install/

这是docker的官方下载地址

下载docker desktop即可

具体安装流程不赘述了

注:本文用的docke desktop版本为3.5.2.18,非最新版

2、下载kali镜像

https://hub.docker.com/r/kalilinux/kali-rolling

这是kali的镜像

可以看到右边有一条命令,直接复制这个命令到本机的终端运行,即可自动下载kali镜像

1
docker pull kalilinux/kali-rolling

3、运行kali并配置

使用以下命令即可运行kali

1
docker run --name kali -t -i kalilinux/kali-rolling /bin/bash

因为这个kali镜像只有一百多兆,所以什么软件都是没有安装的,甚至vim和vi都没有,所以我们需要安装这些软件

因为网络问题,我们先需要配置一下国内源,但是连vi和vim都没有,如何修改源?

输入以下命令,将原来的源重命名为sources.list.bak

1
mv /etc/apt/sources.list /etc/apt/sources.list.bak

然后添加一个清华源到新的souces.list

1
2
3
4
echo  "deb http://mirrors.tuna.tsinghua.edu.cn/debian/ buster main contrib non-free" >>/etc/apt/sources.list
echo "deb http://mirrors.tuna.tsinghua.edu.cn/debian/ buster-updates main contrib non-free" >>/etc/apt/sources.list
echo "deb http://mirrors.tuna.tsinghua.edu.cn/debian/ buster-backports main contrib non-free" >>/etc/apt/sources.list
echo "deb http://mirrors.tuna.tsinghua.edu.cn/debian-security buster/updates main contrib non-free" >>/etc/apt/sources.list

然后我们查看一下souces.list

可以看到这里面都是清华源了

先更新一下源

1
apt-get update

然后我们就可以安装vim这些软件了

1
apt-get install vim

接下来我们需要安装kali的工具,因为现在的镜像连vim都没有,怎么会有kali的那些工具

要安装kali工具需要更换源,因为我们刚刚的清华源其实看网址就知道是debian的,不是kali的,所以要换源成kali的

但是这里有个坑,就是如果直接换成kali的源,apt update的时候会报错:

The following signatures were invalid:EXPKEYSIG ED444FF07D8D0BF6 KaliLinuxRepository<devel@kali.org

这个报错是签名问题,所以我们需要先解决一下签名

先安装一下wget

1
apt-get install wget

然后输入如下命令下载签名

1
wget archive.kali.org/archive-key.asc

接着安装签名

1
apt-key add archive-key.asc

注意!安装签名可能会失败,他会提示你有三个模块没有安装,需要安装其中任一模块,我试了下,前两个模块都安装不了,只能安装第三个,所以就安装一下第三个模块

1
apt-get install gnupg1

再安装签名

1
apt-key add archive-key.asc

看到OK说明签名安装成功,然后我们就可以换kali的源了

1
vim /etc/apt/sources.list

把下面这两个阿里的kali源加进去

1
2
deb http://mirrors.aliyun.com/kali kali-rolling main non-free contrib
deb-src http://mirrors.aliyun.com/kali kali-rolling main non-free contrib

我这里把之前清华源的debian注释掉了,万一以后要用到直接把注释符去掉就能用了

接着更新一下源

1
apt update

可以看到,成功更新了源,接着就可以安装kali的工具了

我们先查看一下有哪几种工具包

1
apt search kali-linux

刚开始我想直接安装kali-linux-everything这个工具包,因为包含了所有工具,但是我安装的时候它提示有27个G,太大了,放弃了

还是安装kali-linux-default吧,以后有什么需要的工具再自行安装

1
apt install kali-linux-default

不过这个也不小,也有9个G了,安装了再说

安装过程中可能要输入y或者回车,一顿操作即可

安装可能会碰到这个

让我们选择控制台的字符集,我们当然选择27.UTF-8

然后又要选

Please choose the character set that should be supported by the console font.

也不知道哪个好,直接选23,就是让他猜我们想要什么,其实就是用默认

又有要选的

这个是Apache的两种运行模式,如果不想占用太多资源,就选1即可

终于装完了

测试一下常用的工具都在不在

image-20230405114757683

sqlmap正常,msf正常,nmap正常,那就没什么大问题了

4、基本操作

关闭kali

1
docker stop kali

打开kali

1
docker start kali

打开终端

1
2
docker exec -it kali /bin/bash    //此为使用bash开启终端
docker exec -it kali /bin/zsh //此为使用zsh开启终端

退出终端

1
exit

查看所有容器

1
docker ps -a

如果想要再开一个命令窗口,就这样

1
docker exec -it 0775a9230212 /bin/bash

5、安装conda环境

为了更好的管理python环境,还是建议装一下这个conda

我在home下新建了tools文件夹用来保存各种工具,再在tools文件夹内新建了conda文件夹,然后在该文件夹下载conda

1
wget -c https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh
1
chmod 777 Miniconda3-latest-Linux-x86_64.sh

我们需要给这个文件权限,然后再安装,安装过程要么回车,要么yes就可以了

1
sudo ./Miniconda3-latest-Linux-x86_64.sh

注意!一定要输入sudo,不然的话conda安装过程中的初始化无法完成,会报错如下:

Miniconda3-latest-Linux-x86_64.sh: 467: SHELL: parameter not set

正常安装结束就会提示安装成功,如下:

然后现在直接输入conda看看

发现不行,应该是环境变量没配置

进bashrc看看配置

1
vim ~/.bashrc

发现安装的时候自动配好了,那应该就是没有刷新bashrc,输入如下命令刷新一下

1
source ~/.bashrc

可以看到刷新后,命令行前面直接带了base环境,说明完成了

这个base环境不好,先退出,我们重新创建一个环境

1
conda deactivate

创建一个python3.8的环境,命名为py38

1
conda create -n py38 python==3.8

创建完成后,输入以下命令进入环境

1
conda activate py38

然后就可以pip安装各种包在这个环境里面了,如果出了什么问题,直接把这个环境删了,重新建一个环境

删除环境的命令如下

1
conda remove -n py38 --all

注意:删除环境必须要先退出当前环境才可以

如果要退出环境,就输入

1
conda deactivate
image-20230406102734965

这里补充一下,因为conda安装好了,最开始下载的conda安装文件可以删除了

1
rm -rf /home/tools/conda

直接把整个conda文件夹删除即可

6、性能测试

实测使用docker运行kali,cpu占用极少,ram占用3G,远比虚拟机运行好得多

当然这只是默认的配置,可以在docker desktop的设置里面调整

再看看占用的存储空间

安装完7个多G的kali包之后,总共占用10.6G,可以说是非常省空间了

7、优化

1)安装oh-my-zsh

为了让命令行用的更顺手,需要做一些优化,首先是使用zsh代替默认的bash

前面提到过,可以使用如下命令进入zsh终端

1
docker exec -it kali /bin/zsh     //此为使用zsh开启终端

这样打开的kali就是用zsh终端的

然后我们输入如下命令安装oh-my-zsh

1
sh -c "$(wget -O- https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

这个工具有很多的主题和插件,十分强大

安装完成后,可以看到我们的命令提示符都变了,直接显示当前目录名在最前面,说明安装完成了

2)修改oh-my-zsh主题

但是现在这个命令提示符太丑了,我们需要换一个主题

推荐agnoster主题,是默认自带的,不需要下载

但是使用这个主题之前,需要安装一个特殊字体,不然使用这个主题之后有些字体会乱码

1
2
3
4
5
6
7
8
# clone
git clone https://github.com/powerline/fonts.git --depth=1
# install
cd fonts
./install.sh
# clean-up a bit
cd ..
rm -rf fonts

按照如上命令敲一下,即可完成这个特殊字体的下载安装

接下来就设置一下agnoster主题

进入到zshrc里面

1
vim ~/.zshrc

然后改一下这里

注意,还需要在底部添加如下内容

1
2
export LC_ALL=C.UTF-8
export LANG=C.UTF-8

如果不加这个的话,会提示:(anon):12: character not in range

添加完之后刷新一下

1
source ~/.zshrc

我这边刷新一次后还是提示上面这个内容,我就再刷新了一次,就成功了

可以看到现在命令提示符显示了当前用户名,当前目录,非常清晰了

现在又出现了一个问题,我退出docker之后重新进来,新主题并没有应用,命令提示符还是这么丑

我只有再刷新一遍zshrc才行,这个问题我网上查了一下,解决方法是在zshrc里面添加一个source ~/.zshrc

注意!是加在/etc/zsh/zshrc文件里面,而不是~/.zshrc里面!他们是两个不同的文件

现在重新进入docker的时候,就会正常使用新主题了

但是又发现刚刚那个报错(anon):12: character not in range好像并没有解决,每次进入docker都会报错一次,虽然好像不影响主题的使用了,但是有个报错在肯定不行,我又查了半天,终于找到解决办法

1
vim /etc/locale.gen

编辑这个文件,在里面找到如下两条,然后把这两条前面的注释去掉

image-20230406153503762

改好后刷新一下语言环境

1
locale-gen

然后退出重进一下

终于完美了

3)安装oh-my-zsh插件

接下来开始安装oh-my-zsh里面的插件,其实这才是搞zsh的最终目的

最重要的就是下面两个插件,一个是语法高亮,一个是自动补全

需要把这两个插件下载到本地这个目录里面

1
cd ~/.oh-my-zsh/custom/plugins/

现在这个目录里面只有一个example文件夹

然后下载这两个插件到这个文件夹

1
git clone https://github.com/zsh-users/zsh-autosuggestions
1
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git

然后需要应用这两个插件

1
vim ~/.zshrc

这里有个插件设置,目前只有git一个插件,我们把刚刚两个插件的名字加进去

然后刷新一下zshrc即可

1
source ~/.zshrc

然后测试一下

输入gi之后,历史输入过的命令自动显示出来了,并且因为gi是非法命令所以标红色,语法高亮也没问题

4)解决使用zsh后conda无法使用的问题

本以为一切完成了,但是突然发现conda又用不了了,应该是conda写在bash的环境变量里,现在是zsh,它们互相隔离不互通

直接查看~/.bashrc文件

1
cat ~/.bashrc

把这段复制出来

image-20230406163440236

然后编辑zshrc

1
vim ~/.zshrc

把刚刚复制的粘贴到末尾

然后刷新一下zshrc

1
source ~/.zshrc

自动就进入base环境了

5)解决每次打开终端就默认进入conda的base环境

当然我们肯定不想每次打开都自动进入base环境,一个原因是我们需要用的是自己创建的py38环境,另一个原因是我们不是每次都需要用到python,没必要每次都自动开conda虚拟环境。所以我们就需要修改一下,让他默认不启动conda

先看一下conda的配置文件

1
conda config --show

这里默认为True,所以会自动打开base环境

一条命令直接改一下

1
conda config --set auto_activate_base false

现在不会自动进入了

8、与docker中的kali进行文件互传

利用cp命令即可

1)宿主机文件复制到docker

1
docker cp /Users/long/Desktop/test.txt kali:/home/tools

语法格式如下:

1
docker cp /path/filename 容器id或名称:/path/filename  

2)docker文件复制到宿主机

1
docker cp kali:/home/tools/test.txt /Users/long/Desktop

语法格式如下:

1
docker cp 容器id或名称:/path/filename /path/filename

9、将docker容器打包成镜像保存

我们好不容易经过上面步骤做好了一个docker容器,肯定担心一不小心把环境什么的搞砸了,又要重新搭一遍,所以就需要把它打包成镜像,这样的话,就算我们这个kali容器出问题了,我们直接删除,再用镜像做个容器出来,照样用。

打包命令也很简单

1
docker commit -a "onctf.com" 0775a9230212 mykali:v1

解释一下:

-a指定作者

然后后面跟我们容器的id

最后是镜像名mykali和标签v1

可以看到现在多了一个镜像,并且这个镜像的大小和容器大小一样,说明包含了容器里面的全部内容

如果我们想把这个镜像分享给别人,那就打包成压缩包即可

1
docker save -o mykali.tar mykali:v1

这样mykali.tar这个文件就被保存到当前目录下了

之后如果要把压缩包导入到镜像,只需执行如下命令:

1
docker load mykali.tar

如果想有更好的压缩效果,需要经常传输,那就再压缩成gz包更好

1
tar -zcvf mykali.tar.gz mykali.tar

可以看到压缩效果明显,将近省了三分之二的空间

image-20230407102044977

如果要解压,就用下面这个命令

1
tar -zxvf mykali.tar.gz