使用自己组装的计算机来构建Kali Linux【构建教程】

首先

在我自己的KALI【PC组装教程】中,说明了自己组装个人电脑的方法,并安装了Kali操作系统。

这篇文章介绍了使用Ansible自动化构建基于裸金属的Kali Linux(以下简称为Kali)的方法。通过使用Ansible来编码构建步骤,可以确保幂等性,并且简化配置管理。

如果您想了解Ansible,可以参考我之前写的《了解Ansible是什么——配置管理工具的目的至Ansible入门的最快方式》。

构建工作

将安装所需的软件包以及安装各种软件进行设置作为构建任务。

为了实现远程桌面连接,安装TightVNC以利用VNC,同时安装Clam AntiVirus作为免费的病毒防护软件,还需要安装Wake-on-LAN等软件以远程启动电脑。此外,还需要进行新软件的设置文件编辑和交互式输入等设置工作。

通过使用Playbook,Ansible可以实现对上述过程的编排。通过Playbook,我们可以定义系统的期望状态。

在Kali In The Browser的公式文件中,还介绍了通过浏览器以GUI方式连接的方法。

准备工作

本文中我們將準備以下資料。同樣的東西已經上傳到kali-linux-setup倉庫中。

.
|-- README.md
|-- hosts
`-- material
    |-- tightvnc
|-- playbook.yml

另外,在用于管理的PC端,需要安装Ansible和VNC客户端。VNC客户端可从REALVNC官网下载。

在管理者计算机上,执行Wake-on-LAN(Wol)也需要相应的命令机制。
本文中我们使用了wakeonlan来实现。
使用方法很简单,只需在脚本参数中指定目标计算机的MAC地址并执行命令。
对于Mac系统,建议结合alias命令、Automator等一起使用。

如果是在安装后的初始状态下,请注意,由于SSH服务未启动,您需要首次登录Kali,并启动SSH服务。

在某些环境下,执行Ansible命令时可能会输出与sshpass相关的消息,请参考以下内容。

TASK [shell] ****************************************************************************************************************************************
fatal: [192.168.x.x]: FAILED! => {"msg": "to use the 'ssh' connection type with passwords or pkcs11_provider, you must install the sshpass program"}

在这篇文章中,我们将讨论有关Mac环境的问题,并介绍一种解决方案——安装sshpass工具。

从SourceForge.net的Non-interactive ssh password auth下载sshpass的资源,并将其移动到opt目录并进行解压。

    • sshpassの展開

 

    • $ cd /opt/

 

    • $ sudo mv /Users/hoge/Downloads/sshpass-1.08.tar.gz ./

 

    • $ sudo tar -xvf sshpass-1.08.tar.gz

 

    $ cd sshpass-1.08

执行以下命令,进行安装。 , .)

    • sshpassのインストール

 

    • $ sudo ./configure

 

    • $ sudo make

 

    $ sudo make install

执行以下命令,以确保路径已设置正确。

$ sshpass在哪里? -> /usr/local/bin/sshpass

本文介绍的SSH连接方法是使用密码认证。在实际系统运营中,使用公钥认证等方式来确保安全性非常重要。

制作Playbook

我們將創建一個用於執行構建操作的Playbook。
以下是每個任務的解釋。

包装管理

在中文中漂亮的方式翻译如下:
软件包管理的操作可以使用apt模块。
虽然升级可以合并为一个任务,但本文将任务分开处理。

    Documentation:ansible.builtin.apt module – Manages apt-packages
软件包更新 (apt-get update)

运行”apt-get update”命令相当于更新软件包列表。值得注意的是,默认情况下不会进行更新。

    - name: package update (apt-get update) 
      apt:
        update_cache: yes
软件包安装

通过在name的值中填写想要安装的包来安装多个软件包。

要使用VNC,需要安装Xfce和xfce4-goodies软件包。其中包括一些桌面环境的扩展功能。

    - name: package installation
      apt:
        name:
          - ethtool
          - xfce4 
          - xfce4-goodies 
          - tightvncserver
          - autocutsel
          - clamav
          - clamav-daemon           
          - gobuster
软件包升级(apt-get dist-upgrade)

执行apt-get dist-upgrade相当于升级软件包。
考虑到依赖关系,部分软件包将被删除。

    - name: package upgrade (apt-get dist-upgrade)
      apt:
        upgrade: dist

systemctl设置

使用systemctl模块对新安装的软件包进行操作,使每个服务启动并启用自动启动功能。

    Documentation:ansible.builtin.systemd module – Manage systemd units Note
贝壳杀毒守护服务设置

设置clamav-daemon服务。

    - name: clamav-daemon.service setting
      systemd:
        name: clamav-daemon.service
        state: started
        enabled: yes
ClamAV的Freshclam服务设置

设置clamav-freshclam服务。

    - name: clamav-freshclam.service setting
      systemd:
        name: clamav-freshclam.service
        state: started
        enabled: yes
ssh服务设置

我将设置SSH服务。

    - name: ssh.service setting
      systemd:
        name: ssh.service
        state: started
        enabled: yes

ethtool的配置设置

ethtool是一种用于配置网络接口卡(NICs)的实用工具。

设置ethtool(为驱动程序启用WOL功能)

使用ethtool命令,并在wol选项的值上添加g以启用Wake-on-LAN(WoL)。这样可以接收到魔术数据包,并能够进行远程设备电源管理。需要注意的是,-s的值根据接口名称而异。

    - name: ethtool setting (enable wol feature for driver)
      changed_when: False
      command: ethtool -s eth0 wol g
ethtool自启动设置 (“@reboot /usr/sbin/ethtool”)

为了在操作系统重新启动后仍然启用ethtool的配置,请使用cron模块进行设置。
@reboot是指定在启动时只执行一次的方法。

    Documentation:ansible.builtin.cron module – Manage cron.d and crontab entries
    - name: ethtool auto start setting ("@reboot /usr/sbin/ethtool")
      ansible.builtin.cron:
        name: "a job for reboot"
        special_time: reboot
        job: "/usr/sbin/ethtool -s eth0 wol g"

紧密的VNC服务器的设置

进行tightvncserver的设置。

紧凑型VNC服务器检查(密码)。

使用stat模块来指定密码文件,并检查文件的存在与否。

    Documentation:ansible.builtin.stat module – Retrieve file or file system status
    - name: tightvncserver check (passwd)
      stat: path=/home/kali/.vnc/passwd 
      register: result
启动 TightVNC 服务器(使用交互式输入)。

使用expect模块来控制对话式输入。
在下面的示例中,当密码文件不存在时,我们将进行设置。
请注意,密码是硬编码的。

    Documentation:ansible.builtin.expect module – Executes a command and responds to prompts
    - name: tightvncserver start (interactive input)
      become: yes
      become_user: kali
      expect:
        command: tightvncserver :1 -geometry 1280x800 -depth 24
        responses:
          "Password:": "********"
          "Verify:": "********"
          "Would you like to enter a view-only password (y/n)?": "n"
      when: not result.stat.exists 
脚本部署(tightvncserver)

使用copy模块,从Ansible管理机连接到目标主机的指定目录中复制启动脚本。
在下面的示例中,将管理机中的/etc/ansible/material/tightvnc复制到目标主机的/etc/init.d/目录。

    Documentation:ansible.builtin.copy module – Copy files to remote locations
    - name: script deployment (tightvncserver)
      copy:
        src: /etc/ansible/material/tightvnc
        dest: /etc/init.d/
        owner: root
        group: root
        mode: 0755
自动启动脚本设置(tightvncserver)。

启用脚本的自动启动。
即使重复执行Playbook,也会记录为changed,因此我们指定了changed_when为False。

    - name: script auto start setting (tightvncserver)
      changed_when: False
      command: update-rc.d tightvnc defaults
自动剪贴板设置(编辑文件)

要实现在VNC连接时,操作PC和远程连接的Kali之间共享剪贴板,需要进行额外的设置。
使用shell模块,配置/home/kali/.vnc/xstartup文件。

    Documentation:ansible.builtin.shell module – Execute shell commands on targets
    - name: autocutsel setting (edit file)
      changed_when: False
      shell: |
        cat /home/kali/.vnc/xstartup | grep 'autocutsel -fork'
        if [ $? != 0 ]; then sed -i '8i autocutsel -fork' /home/kali/.vnc/xstartup;else :;fi
      args:
        executable: /bin/bash

rockyou的发展

在安装Kali之后,由于rockyou.txt文件已被压缩,可以使用shell模块进行展开。

解压缩压缩的rockyou文件

Rockyou存在于/usr/share/wordlists目录下。我们会先检查文件是否存在,然后解压它。

    - name: uncompress compressed rockyou files
      changed_when: False
      shell: |
        cd /usr/share/wordlists
        if [ -e rockyou.txt.gz ]; then gunzip -d rockyou.txt.gz;else :;fi

设置ClamAV的配置

进行ClamAV的配置。

排除目录设置(ClamAV)

使用cron模块来设置自动扫描clamav。

    - name: clamav schedule scan setting ("0 0 * * * /usr/bin/clamdscan/clamdscan -m --fdpass /")
      ansible.builtin.cron:
        name: "clamav schedule scan"
        minute: "0"
        hour: "0"
        job: /usr/bin/clamdscan -m --fdpass /
杀毒软件 ClamAV 定时扫描设置(”0 0 * * * /usr/bin/clamdscan/clamdscan -m –fdpass /”)

使用shell模块来设置clamav的排除目录。

    - name: excluded directory settings (clamav)
      changed_when: False
      shell: |
        cat /etc/clamav/clamd.conf  | grep 'ExcludePath'
        if [ $? != 0 ]; then sed -i '$a ExcludePath /usr/lib\nExcludePath /usr/share\nExcludePath /var/lib ' /etc/clamav/clamd.conf;else :;fi
      args:
        executable: /bin/bash

Ansible 配置剧本

执行ansible-playbook命令。
输入ssh密码后,执行命令。

出力示例:
hoge@MacBook-Pro:/etc/ansible$ ansible-playbook -i hosts -k -K playbook_kali.yml
输入SSH密码:
BECOME密码[默认为SSH密码]:播放[kali linux设置] ********************************************************************************************************************

任务[包更新(apt-get update)] *******************************************************************************************************
[警告]:主机192.168.x.x上的Linux平台正在使用发现的Python解释器/usr/bin/python3.10,但将来安装另一个
Python解释器可能会改变该路径的含义。有关更多信息,请参阅https://docs.ansible.com/ansible-core/2.12/reference_appendices/interpreter_discovery.html。
对于更多信息。
好的:[192.168.x.x]

任务[包安装] ************************************************************************************************************************
已更改:[192.168.x.x]

任务[包升级(apt-get dist-upgrade)] *********************************************************************************************************
已更改:[192.168.x.x]

任务[clamav-daemon.service设置] **********************************************************************************************************************
已更改:[192.168.x.x]

任务[clamav-freshclam.service设置] *******************************************************************************************************************
已更改:[192.168.x.x]

任务[ssh.service设置] *******************************************************************************************************************************
已更改:[192.168.x.x]

任务[ethtool设置(为驱动程序启用wol功能)] ****************************************************************************************************
好的:[192.168.x.x]

任务[ethtool自动启动设置(“@reboot /usr/sbin/ethtool”)] *******************************************************************************************
已更改:[192.168.x.x]

任务[tightvncserver检查(passwd)] **********************************************************************************************************************
好的:[192.168.x.x]

任务[tightvncserver启动(交互输入)] ***************************************************************************************************************
已更改:[192.168.x.x]

任务[脚本部署(tightvncserver)] *****************************************************************************************************************
已更改:[192.168.x.x]

任务[脚本自动启动设置(tightvncserver)] *********************************************************************************************************
好的:[192.168.x.x]

任务[autocutsel设置(编辑文件)] *********************************************************************************************************************
好的:[192.168.x.x]

任务[解压缩压缩的rockyou文件] ****************************************************************************************************************
好的:[192.168.x.x]

任务[clamav调度扫描设置(“0 0 * * * /usr/bin/clamdscan/clamdscan -m –fdpass /”)] **************************************************************
已更改:[192.168.x.x]

任务[排除目录设置(clamav)] ***************************************************************************************************************
好的:[192.168.x.x]

播放回顾 ************************************************************************************************************************************

192.168.x.x : 好=16 已更改=9 不可访问=0 失败=0 跳过=0 取回=0 忽略=0

在执行ansible-playbook命令之后,确认没有失败,并重新启动操作系统。

在操作系统重新启动后,您可以通过PC上的VNC连接到Kali。

スクリーンショット 2022-05-23 0.32.45.png

若无法通过VNC连接,请参考下方的截图。
您可以通过重新启动操作系统来实现上述登录方式。

スクリーンショット 2022-05-23 0.28.48.png

最后

通过使用Ansible,即使计算机损坏,也能轻松重新复制相同的环境。

Wol是非常方便的工具。
可以從手邊像虛擬機器一樣關閉電腦,不需要特地去按物理電源按鈕。

请举个例子

    • Ansible の基本を学ぶ

 

    Wake-on-LAN
广告
将在 10 秒后关闭
bannerAds