使用自己组装的计算机来构建Kali Linux【构建教程】
首先
在我自己的KALI【PC组装教程】中,说明了自己组装个人电脑的方法,并安装了Kali操作系统。
这篇文章介绍了使用Ansible自动化构建基于裸金属的Kali Linux(以下简称为Kali)的方法。通过使用Ansible来编码构建步骤,可以确保幂等性,并且简化配置管理。
如果您想了解Ansible,可以参考我之前写的《了解Ansible是什么——配置管理工具的目的至Ansible入门的最快方式》。
构建工作
将安装所需的软件包以及安装各种软件进行设置作为构建任务。
为了实现远程桌面连接,安装TightVNC以利用VNC,同时安装Clam AntiVirus作为免费的病毒防护软件,还需要安装Wake-on-LAN等软件以远程启动电脑。此外,还需要进行新软件的设置文件编辑和交互式输入等设置工作。
通过使用Playbook,Ansible可以实现对上述过程的编排。通过Playbook,我们可以定义系统的期望状态。
准备工作
本文中我們將準備以下資料。同樣的東西已經上傳到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
制作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。
若无法通过VNC连接,请参考下方的截图。
您可以通过重新启动操作系统来实现上述登录方式。
最后
通过使用Ansible,即使计算机损坏,也能轻松重新复制相同的环境。
Wol是非常方便的工具。
可以從手邊像虛擬機器一樣關閉電腦,不需要特地去按物理電源按鈕。
请举个例子
-
- Ansible の基本を学ぶ
- Wake-on-LAN