shell-scripting/kali/make_kali-usb-stick_persistent

92 lines
2.7 KiB
Bash

#!/bin/bash
# Usage: ./make_kali-usb-stick_persistent [ kali.iso ]
# or
# bash make_kali-usb-stick_persistent [ kali.iso ]
# Description: Writes a kali.iso to an usb stick (optional) and
# adds persistence to it step by step.
# Author: Patrick Neumann (patrick@neumannsland.de)
# Platform: Kali Linux (tested: 2022.2) or
# Debian GNU/Linux (tested: 9.5)
# Version: 1.03
# Date: 22.06.2022
# Link: https://git.neumannsland.de/casualscripter/shell-scripting
# License: GPL3
# Warranty: This program is distributed WITHOUT ANY WARRANTY
# check for root
if [[ 0 -ne "$( /usr/bin/id --user )" ]] ; then
printf "you need to be root - EXIT!\n"
exit 2
fi
# usage function
usage () {
printf "Usage:\n"
printf " $0 [ <kali-linux-*.iso ]\n"
printf " (If an iso file is given it will be written to the usb stick first.)\n"
exit 1
}
# onle zero or one args are supported
if [ "${#}" -gt 1 ]; then
usage
fi
# list of external usb storage devices
printf "List of external usb storage devices:\n"
readonly USBSTORDEVS="$( ls -l /sys/dev/block | grep -E ".*usb.*[^[:digit:]]$" | awk '{ print $NF; }')"
for usbstordev in ${USBSTORDEVS} ; do
dev="${usbstordev##*/}"
dir="/sys/dev/block/${usbstordev%/*/*}"
vendor="$( cat "${dir}/vendor" )"
model="$( cat "${dir}/model" )"
printf "${dev} = ${vendor} ${model}\n"
done
# select external usb storage device
printf "\nPlease select an external usb storage device:\n"
select USBSTICK in $( ls -l /sys/dev/block | grep -E ".*usb.*[^[:digit:]]$" | awk -F "/" '{ print $NF; }' ) ; do
if [ -n "${USBSTICK}" ] ; then break ; fi
done
# all block devices should be writable by root!?
USBSTICK="/dev/${USBSTICK}"
# if iso file is given
if [ "${#}" -eq 1 ]; then
if ! [ -e "${1}" ] ; then
printf "iso file does not exist - EXIT!\n"
exit 3
fi
if ! [ -f "${1}" ] ; then
printf "iso file is not a regular file - EXIT!\n"
exit 4
fi
# all files are readable by root!?
ISOFILE="${1}"
dd if="${ISOFILE}" of="${USBSTICK}" conv=fsync bs=4M status=progress
fi
#check if persistence is already there.
if blkid "${USBSTICK}"3 | grep -F persistence &> /dev/null ; then
printf "There is already a persistence on the choosen usb stick - EXIT!\n"
exit 5
fi
# add 3rd partition to the end of the usb stick
fdisk "${USBSTICK}" <<< $( printf "n\np\n\n\n\nw" )
# format 3rd partition with ext3 and label "persistence"
mkfs.ext3 -L persistence "${USBSTICK}"3
# place "config" in filesystem of 3rd partition
mkdir -p /mnt/persistence
mount "${USBSTICK}"3 /mnt/persistence
echo "/ union" > /mnt/persistence/persistence.conf
umount "${USBSTICK}"3
rmdir /mnt/persistence
exit 0