From charlesreid1

This page is a guide on installing Kali Linux on the Raspberry Pi: Kali Raspberry Pi

For generic installation instructions with Raspbian on a Raspberry Pi, see this page: RaspberryPi/Installing

For general information/pages about Kali Linux, see this page: Kali


Installing Kali on Raspberry Pi

To install Kali Linux on a Raspberry Pi, you'll need to go through the usual process of putting a disk image on an SD card, then booting the Pi from the image. This follows the usual steps.

Step 0: Download image from Kali

Kali provides custom images for Raspberry Pis, so download the compressed img file for your Pi. Download it, and unzip it.

Step 1: Find SD Card

When you run this command, you should be able to spot the SD card from its size. If you can't figure out which one it is, run it before and after you plug in the SD card.

$ diskutil list

Mine's at /dev/disk1.

Step 2: Unmount Disk

$ diskutil unmountDisk /dev/disk1

Step 3: Format Disk

WARNING: You can screw up your disks with the dd command. Be careful.

$ dd bs=1m if=kali-1.1.1-rpi.img of=/dev/disk1
3000+0 records in
3000+0 records out
3145728000 bytes transferred in 1535.984002 secs (2048021 bytes/sec)

This should take about 20 minutes.

Modify Startup Command

Before you eject the SD card, you'll want to modify the startup command. Edit the file /Volumes/NO NAME/cmdline.txt and add a static IP address ip=169.254.113.200 to the end:

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 elevator=deadline root=/dev/mmcblk0p2 rootfstype=ext4 rootwait ip=169.254.113.200

(see Kali Raspberry Pi/Headless or RaspberryPi/Headless for details on this procedure)



How the Startup Disk Works

What happens when you actually flash the image onto the SD card?

Well, it creates two different partitions on the SD card. The first partition is about 64 MB, that contains everything the Pi needs to boot. The second partition is about 3 GB, and contains the operating system files itself.

However, if you're on a Mac, the Mac won't mount the second, larger partition, because it's managed with the ext4 file system, so you will only see one 64 MB partition.

Do you need to be able to edit the large partition? Only if you want to modify the contents of the Linux installation, such as adding startup services, modifying run levels, or changing configuration files for software. Otherwise, you'll only need to modify the boot partition.

If you do need to modify the larger Linux ext4 partition, you can install the whole MacFUSE bundle, which will allow you to mount ext4 filesystems as though they're native filesystems. Or you can use a Linux computer for those edits.

The SD Card from Mac

Kali SD Card from Mac

Here's the SD card on the Mac:

KaliSDMac.png

and the output of diskutil list:

$ diskutil list
[...]
/dev/disk1
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *15.9 GB    disk1
   1:             Windows_FAT_32 NO NAME                 64.0 MB    disk1s1
   2:                      Linux                         3.1 GB     disk1s2

I could only see the 64 MB FAT partition from the Mac, but I needed to edit the 3.1 GB Linux partition to modify what services start on boot.

The SD Card from Linux

I rebooted my Mac laptop into Kali to take a look at the SD card again.

When I plugged the SD card into the SD slot of my MacBook, I didn't see the device anywhere. No command would show it anywhere.

Finally, I just plugged the SD card into an external USB card reader and plugged the reader into my laptop. The SD card opened immediately in the file browser.

Now take a look using parted:

$ parted -l 

Model: USB Mass  Storage Device (scsi)
Disk /dev/sdb: 15.9GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type     File system  Flags
 1      512B    64.0MB  64.0MB  primary  fat16        lba
 2      64.0MB  3146MB  3082MB  primary  ext4

Now we can see both partitions of the SD card, which means we can edit the startup procedure of the Kali Pi and initiate sshd. But before we do anything to the SD card, we have to mount it:

$ mkdir usb1
$ mount /dev/sdb1 usb1
$ mkdir usb2
$ mount /dev/sdb2 usb2

But then I saw that the SSH service was already set to be started. Following the link above on Raspberry Pi Stack Exchange, the thread states that there should be a etc/rc2.d/S02ssh to automatically start on runlevel 2. But that is already there.

Ugh. Okay, let's plug the Pi into our wireless router, force it to take a static IP address in the router's range, and go from there.

Edit cmdline.txt in the boot partition of the SD card, and change the IP address assignment by adding this to the end:

ip=10.0.0.114

Unmount the SD card:

$ umount usb1
$ umount usb2

Now plug the SD card back into the Pi, and plug the Pi into your laptop.