公司网络安全部门需要在我司私有云平台上搭建kali linux的云主机,用以进行渗透测试等服务,在互联网上搜索了很久也没有发现有现成的镜像可以使用,因此就自己制作了,镜像下载地址:http://jellynian.ufile.ucloud.com.cn/kali_xfce.qcow2, 镜像默认用户
debian
默认密码kalidebian
在此附上具体的制作教程。
操作系统: ubuntu操作系统(作者使用的是ubuntu16.04 主机IP为:10.0.3.102)
到任意一个镜像站下载kali linux的镜像,这里使用的是南阳理工学院的开源镜像
https://mirror.nyist.edu.cn/kali-images/
# 安装virsh libvirt-bin
apt-get install libvirt-bin qemu-kvm qemu-utils -y
# 下载基础镜像(存储目录为 /var/lib/libvirt/)
wget https://mirror.nyist.edu.cn/kali-images/current/kali-linux-xfce-2018.1-amd64.iso \
-O /var/lib/libvirt/kali-linux-xfce-2018.1-amd64.iso
执行以下命令创建qcow2磁盘
qemu-img create -f qcow2 /var/lib/libvirt/kali.qcow2 10G # 由于kali预装了大量软件,经测试 10G的基础磁盘大小是较为合适的,
#作者曾经测试过2G,3G,5G等大小都失败了(或许是作者的测试方式有问题,您可以做更多的尝试)
virt-install --virt-type kvm --name kali --ram 1024 \
--cdrom=/var/lib/libvirt/kali-linux-xfce-2018.1-amd64.iso \
--disk /var/lib/libvirt/kali.qcow2 \
--network network=default \
--graphics vnc,listen=0.0.0.0 --noautoconsole \
--os-type=linux --os-variant=debianwheezy
在vnc客户端直接输入宿主机的IP 即可连接,按照正常的流程安装此虚拟机,不过要注意的是磁盘分区不要使用lvm分区,将所有文件放入一个分区即可,使用整个磁盘,因为openstack在创建虚拟机时默认是自动分区,剩余的磁盘空间可以自动的加入此分区,如果你选择了lvm或者分了多个分区可能会导致自动分区无法正常工作(此为本人测试后的结果,可能存在一定的疏漏)。安装完成后,镜像会关机退出,我们使用 virsh list --all
来查看当前运行的所有机器,并使用virsh start kali
来启动该机器并再次使用vnc连接
root@cagetest:~# virsh list --all
Id Name State
----------------------------------------------------
- kali shut off
root@cagetest:~# virsh start kali
Domain kali started
cloud-init 脚本将在虚拟机启动的时候搜寻元数据服务获取公钥。公钥将会放在镜像默认用户内。
安装 cloud-init 软件包:
# apt-get install cloud-init
在创建 Ubuntu 镜像时,cloud-init 必须明确的配置元数据源。OpenStack 元数据服务仿效 Amazon EC2 元数据服务。
运行 dpkg-reconfigure
命令设置镜像 cloud-init 软件包使用的元数据源。当屏幕出现提示时,选择 EC2 数据源。
# dpkg-reconfigure cloud-init
不同的发行版保存的账户不同,在基于 Ubuntu 的虚拟机,账户是 ubuntu ,基于 Fedora 的虚拟机,账户是 ec2-user ,基于debian的虚拟机账户是debian,因此kali的cloud-init安装后默认的用户是debian。
你可以编辑 /etc/cloud/cloud.cfg 文件修改 cloud-init 使用的账户名,例如,添加以下这行到配置文件,公钥将会存放到debian用户下。
default_user:
name: debian
修改 /etc/cloud/cloud.cfg
中的配置,这里改为我母校南阳理工学院的镜像源
关闭虚拟机
在虚拟机内,以root用户运行:
# /sbin/shutdown -h now
操作系统会在/etc/sysconfig/network-scripts/ifcfg-eth0
和 /etc/udev/rules.d/70-persistent-net.rules
这类文件记录下网卡MAC地址,但是,虚拟机的网卡MAC地址在每次虚拟机创建的时候都会不同,因此这些信息必须从配置文件删除掉。
目前有 virt-sysprep 工具可以完成清理虚拟机镜像内的 MAC 地址相关的信息。
# apt-get install libguestfs-tools #你可能需要先安装这个安装包
# virt-sysprep -d kali
现在你可以上传虚拟机镜像到镜像服务了,所以不再需要 libvirt 来管理虚拟机镜像,使用 virsh undefine vm-image
命令来完成。
# virsh undefine kali
前面你使用 qemu-img create 命令创建的镜像已经准备好可以上传了,你可以上传 /var/lib/libvirt/kali.qcow2
文件到 Openstack 镜像服务。