创建kali docker环境

Tuesday, March 7, 2023
本文共1293字
3分钟阅读时长

⚠️本文是作者P3troL1er原创,首发于https://peterliuzhi.top/posts/%E5%88%9B%E5%BB%BAkali-docker%E7%8E%AF%E5%A2%83/。商业转载请联系作者获得授权,非商业转载请注明出处!

Happiness cannot be travelled to, owned, earned, worn or consumed. Happiness is the spiritual experience of living every minute with love, grace and gratitude. — Denis Waitley

Dockerfile

根据官网的描述,这个docker镜像不含任何默认工具:

文内图片

因此我们可以编写Dockerfile来控制docker的构建:

FROM kalilinux/kali-rolling

LABEL maintainer="peterliuall <peterliuforever@gmail.com>"

ENV DEBIAN_FRONTEND noninteractive

ENV TZ Asia/Shanghai

# 如果想要工具更齐全一点可以RUN apt update && apt -y install kali-linux-large
# 但是这样占用空间可能有点恐怖
RUN apt update && apt -y install kali-linux-headless

RUN chsh -s /bin/zsh && echo "Y" | sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

RUN zsh -c "apt install wget && \
    wget https://repo.anaconda.com/miniconda/Miniconda3-py310_23.1.0-1-Linux-x86_64.sh && \
    chmod a+x ./Miniconda3-py310_23.1.0-1-Linux-x86_64.sh && \
    ./Miniconda3-py310_23.1.0-1-Linux-x86_64.sh -b -p $HOME/miniconda && \ 
    source $HOME/miniconda/bin/activate && conda init &&\
    echo 'source $HOME/miniconda/bin/activate && conda init > /dev/null' >> ~/.zshrc && \
    source ~/.zshrc"

RUN zsh -c "apt-get install openssh-server vim tmux"

RUN zsh -c "source $HOME/miniconda/bin/activate && conda init && \
    python3 -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -U pip &&\
    python3 -m pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple && \
    ln -fs /usr/share/zoneinfo/$TZ /etc/localtime && \
    dpkg-reconfigure -f noninteractive tzdata && \
    ln -snf `which python3` /usr/local/bin/python"

RUN mkdir /var/run/sshd
RUN echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
RUN sed -ri 's/UsePAM yes/#UsePAM yes/g' /etc/ssh/sshd_config
RUN sed -ri 's/RSYNC_ENABLE=false/RSYNC_ENABLE=true/g' /etc/default/rsync
COPY rsync.conf /etc

RUN echo 'root:123456' |chpasswd

RUN mkdir /root/sync

RUN ls /usr/bin/ && \
    locale-gen en_US.UTF-8  && \
    echo 'LANG="en_US.UTF-8"\nLANGUAGE="en_US.UTF-8:"' >  /etc/default/locale && \
    echo 'export LANG="en_US.UTF-8"\nexport LANGUAGE="en_US.UTF-8:"' >>  /etc/zsh/zshrc && \
    /bin/zsh -c "source /etc/zsh/zshrc"

WORKDIR /security

RUN echo "cd /security" >> ~/.zshrc

COPY entrypoint.sh /sbin
RUN chmod +x /sbin/entrypoint.sh
ENTRYPOINT [ "/sbin/entrypoint.sh" ]

安装了普通的kali配件,同时使用miniconda来管理python,使用oh-my-zsh来美化终端(主题默认)

其他文件

其他文件包括entrypoint.sh、rsync.conf,全都放在与Dockerfile同一目录下:

entrypoint.sh

#!/bin/bash

/usr/bin/rsync --daemon --config=/etc/rsync.conf
/usr/sbin/sshd -D

rsync.conf

# 编辑配置信息
max connections = 8
log file = /var/log/rsync.log
timeout = 300

[sync] # 模块名
comment = sync
# path为需要同步的文件夹路径
path = /root/sync
read only = no
list = yes
uid = root
gid = root

docker-compose.yml

这个文件用于控制container的生成,包含挂载共享文件夹,设置端口等:

version: "2.2"

services:
  kali:
    image: kali:rolling
    container_name: kali_instance
    working_dir: /security
    volumes:
      - //d/database_BooksAndFiles/VMware/share_files/:/security/
    ports:
      - "23:22" # 22是ssh端口
      - "874:873" # 874是srync端口
    cap_add:
      - ALL
    tty: true

如何食用

首先先build镜像文件:

docker build -t kali:rolling . 

然后生成容器:

docker-compose up -d

如果想要登录docker的shell,可以使用如下命令:

docker exec -it <镜像文件id或全名> /bin/bash

下一次重启容器,可以使用docker desktop,也可以使用命令行:

docker restart <镜像文件id或全名>

然后在Windows Terminal中试一试ssh root@127.0.0.1 -p 23看一下能不能连上,能连上就可以用vscode连上

如果不能连上,可以参见这篇SSH连接报错:Permission denied, please try again.的解决方法 - 腾讯云开发者社区-腾讯云

使用vscode连接

先保证你的vscode有安装以下插件:

文内图片

然后在这里打开一个config文件:

文内图片

然后更改config文件如下:

文内图片

其中kaliDocker可以改成你喜欢的名字

然后就可以连接啦

通过密钥免密连接

因为vscode每次连接、更换文件夹都要输入密码,非常的不方便,因此我们可以使用公私密钥实现免密登录

首先我们在Windows上生成公私密钥(如果之前生成过了就不用重新生成了)(现在一般Windows都会自带openssh了,直接就能用):

ssh-keygen -t rsa

让它使用rsa加密的方式生成一个密钥,一直回车即可

然后进入C:\User\<你的用户名>\.ssh\文件夹,然后就能看到自己生成的id_rsa和id_rsa.pub,其中.pub文件就是公钥

然后使用scp将这个公钥传输到docker中的$HOME/.ssh/中,如果docker中没有这个文件夹,需要手动在docker中mkdir .ssh创建文件夹

scp -P23 id_rsa.pub root@127.0.0.1:/root/.ssh

然后登录你的docker中的shell,将这个公钥加入已认证密钥列表中:

cd ~/.ssh/
cat id_rsa.pub >> authorized_keys

然后就OK啦~