定制 Kali Linux Live USB 的另一种方法

原理

前文 阐述的方法脱离了广大机械硬盘和 USB 2.0 群众的实际情况,是不得人心的。下面介绍一种更加符合科学发展观的定制方法。

启动时,GRUB 或 extlinux 先引导运行 /live/vmlinuz 和 /live/initrd.img, initrd.img 初始化之后会寻找 /live 目录下以 squashfs ext2 ext3 ext4 xfs jffs2 后缀的文件和以 dir 为后缀的目录,然后将它们 union mount 成根目录。union filesystem,联合文件系统是将多个文件夹联合挂载在一个文件夹下,对联合目录的读写作用在指定为 rw 的分支目录上。

#initrd.img/bin/boot/9990-overlay.sh:
69             if [ -n "${addimage_directory}" ] && [ -d "${addimage_directory}" ]
70             then
71                 for FILESYSTEM in squashfs ext2 ext3 ext4 xfs jffs2 dir
72                 do
73                     for IMAGE in "${addimage_directory}"/*."${FILESYSTEM}"
74                     do
75                         if [ -e "${IMAGE}" ]
76                         then
77                             image_string="${image_string} ${IMAGE}"
78                         fi
79                     done
80                 done
81             fi

定制

这里使用工具 unionfs-fuse,相对于 aufs,unionfs 支持在用户层上,兼容性较好。 Debian 下安装方法: apt-get install unionfs-fuse,接着执行:

cd /tmp
mkdir custom
mkdir union
mount /path/to/live/filesystem.squashfs /mnt
unionfs-fuse -o cow,max_files=32768 -o allow_other,use_ino,suid,dev,nonempty /tmp/custom=RW:/mnt=RO /tmp/union/ #1
cd union
mount -o bind /proc proc/ #2
chroot . #3
  • 1:将两个目录挂载至 /tmp/union, 对 /tmp/union 的写操作会回溯到 /tmp/custom 上。-o cow,max_files=32768 -o allow_other,use_ino,suid,dev,nonempty 是必需的,要不然文件读写方面会出问题。
  • 2:proc 安装某些软件可能需要这里的信息,比如 VMWare。
  • 3:主机系统如果不是 Kali,可能需要设置额外的变量,比如 PATH。

进去了之后,我们就可以上下其手,为所欲为了。操作完成之后,删除 /tmp/custom 内多余的目录和文件,打包:

cd /tmp
mksquashfs custom/ custom.squashfs
cp custom.squashfs /path/to/live/

重启之后即可看到效果。

GRUB2 引导 extlinux

直接复制 Kali ISO 的内容到U盘的某一分区后,假设是 /dev/sdb2,目录名是 kaliLive,安装 extlinux

extlinux -i /path/to/kaliLive/

这时 /dev/sdb2 的首 512 字节是 extlinux 的 bootloader。如果你在 /dev/sdb 安装了 GRUB 2 可以以:

set root=(hd0,msdos2)
chainloader +1
boot

引导 extlinux。

其它

  • 复制+手动安装 bootloader 的方法会在 kali 1.0.1 下无法使用 persistence 功能。dd 的方法没测试过。
  • 对于需要频繁修改的小文件,比如 .bashrc,可以考虑放在 .dir 目录下。
时间: 2024-10-17 14:54:56

定制 Kali Linux Live USB 的另一种方法的相关文章

Kali linux中安装字体的一种方法

有人说,lucida sans typewriter字体是一种非常适合的编程字体,所以想试试.经过一番折腾,终于在Clion中用上了.步骤如下: 第一步:先下载这个字体. http://www.downyi.com/downinfo/166218.html 我是在这儿下的,网上有很多. 第二步:将这个字体文件解压,复制到相应目录下: /usr/share/fonts/truetype/ 这个字体是truetype字体,所以就得在这个目录下新建目录:lucidasans( 名字可随意).然后将字体

linux下查看uuid的三种方法及使用uuid的作用

查看设备的uuid的三种方法,总结如下: 1 命令查看:blkid2 文件查看:ls -l /dev/disk/by-uuid3 命令查看:vol_id /dev/sda1 UUID的作用及意义 1:它是真正的唯一标志符 UUID为系统中的存储设备提供唯一的标识字符串,不管这个设备是什么类型的.如果你在系统中启动的时候,使用盘符挂载时,可能找不到设备而加载失败,而使用UUID挂载时,则不会有这样的问题. 2:设备名并非总是不变的 自动分配的设备名称并非总是一致的,它们依赖于启动时内核加载模块的顺

一、查看Linux内核版本命令(两种方法):

一.查看Linux内核版本命令(两种方法): 1.cat /proc/version [[email protected]CentOS home]# cat /proc/versionLinux version 2.6.32-431.el6.x86_64 ([email protected]) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) ) #1 SMP Fri Nov 22 03:15:09 UTC 2013 2.uname -a [

Linux中生成密钥的两种方法

Linux中生成密钥的两种方法 SSH服务支持一种安全认证机制,即密钥认证.所谓的密钥认证,实际上是使用一对加密字符串,一个称为公钥(publickey), 任何人都可以看到其内容,用于加密:另一个称为密钥(privatekey),只有拥有者才能看到,用于解密.通过公钥加密过的密文使用密钥可以轻松解密,但根据公钥来猜测密钥却十分困难. ssh的密钥认证就是使用了这一特性.服务器和客户端都各自拥有自己的公钥和密钥.如何使用密钥认证登录linux服务器呢? 在使用密钥认证远程登入linux之前,我们

Linux之Kill进程的N种方法

常规篇: 首先,用ps查看进程,方法如下: $ ps -ef -- smx       1822     1  0 11:38 ?        00:00:49 gnome-terminal smx       1823  1822  0 11:38 ?        00:00:00 gnome-pty-helper smx       1824  1822  0 11:38 pts/0    00:00:02 bash smx       1827     1  4 11:38 ?    

Linux 下操作GPIO(两种方法,驱动和mmap)(转载)

目前我所知道的在Linux下操作GPIO有两种方法: 1.编写驱动,这当然要熟悉Linux下驱动的编写方法和技巧,在驱动里可以使用ioremap函数获得GPIO物理基地址指针,然后使用这个指针根据ioctl命令进行GPIO寄存器的读写,并把结果回送到应用层.这里提供一点程序片断供大家参考: int  init_module(void){ printk(KERN_ALERT "ioctl load.\r\n"); register_chrdev(254,"ioreg"

查看Linux系统版本信息的几种方法

一.查看Linux内核版本命令(两种方法): 1.cat /proc/version 2.uname -a 二.查看Linux系统版本的命令(3种方法): 1.lsb_release -a,即可列出所有版本信息: 这个命令适用于所有的Linux发行版,包括RedHat.SUSE.Debian…等发行版. 2.cat /etc/redhat-release,这种方法只适合Redhat系的Linux: [[email protected] home]# cat /etc/redhat-release

【linux】查看Linux系统版本信息的几种方法

一.查看Linux内核版本命令(两种方法): 1.cat /proc/version 2.uname -a 二.查看Linux系统版本的命令(3种方法): 1.lsb_release -a,即可列出所有版本信息: 这个命令适用于所有的Linux发行版,包括RedHat.SUSE.Debian…等发行版. 2.cat /etc/redhat-release,这种方法只适合Redhat系的Linux: [[email protected] home]# cat /etc/redhat-release

Linux系统实现虚拟内存有两种方法:交换分区(swap分区)和交换文件

Linux系统实现虚拟内存有两种方法:交换分区(swap分区)和交换文件 交换文件 查看内存:free -m , -m是显示单位为MB,-g单位GB 创建一个文件:touch /root/swapfile 使用dd命令,来创建大小为2G的文件swapfile: dd if=/dev/zero of=/root/swapfile bs=1M count=2048 //命令执行完需要等待一段时间 if表示input_file输入文件 of表示output_file输出文件 bs表示block_siz