# 準備Kali Linux ARM chroot
雖然你能從下載區[下載Kali ARM鏡象](http://www.kali.org/downloads "Download Kali Linux ARM Images")但是有人更熱衷于定制他們的Kali rootfs.如下展示一個制作Kali armhf rootfs的例子.
### 安裝需要的軟件和依賴
```
apt-get install debootstrap qemu-user-static
```
### 定義架構和定制包
這里定義一些你需要的ARM架構(armel或armhf)的環境變量,下列的包將會安裝到你的鏡象里.這是全文要用到的,所以務必根據你的需要修改它們.
```
export packages="xfce4 kali-menu kali-defaults nmap openssh-server"
export architecture="armhf"
#export disk="/dev/sdc"
```
### 建立Kali rootfs
我們創建一個標準的目錄結構并從Kali Linux的源用bootstrap獲得ARM rootfs.然后我們從我們的主機復制**qemu-arm-static**到rootfs,以便進行第2步.
```
cd ~
mkdir -p arm-stuff
cd arm-stuff/
mkdir -p kernel
mkdir -p rootfs cd rootfs
debootstrap --foreign --arch $architecture kali kali-$architecture http://repo.kali.org/kali
cp /usr/bin/qemu-arm-static kali-$architecture/usr/bin/
LANG=C chroot kali-$architecture
/debootstrap/debootstrap --second-stage
```
#### 第2步chroot
這里我們配置基本的鏡象設置,例如keymaps,源,默認網絡接口特性(有需要的話請修改)等..
```
cat << EOF > kali-$architecture/debconf.set
console-common console-data/keymap/policy select Select keymap from full list
console-common console-data/keymap/full select en-latin1-nodeadkeys
EOF
cat << EOF > kali-$architecture/etc/apt/sources.list
deb http://repo.kali.org/kali kali main contrib non-free
deb http://repo.kali.org/security kali/updates main contrib non-free
EOF
echo "kali" > kali-$architecture/etc/hostname
cat << EOF > kali-$architecture/etc/network/interfaces
auto lo
iface lo inet loopback
auto usbmon0
iface usbmon0 inet dhcp
EOF
```
#### 第3步chroot
這里開始定制.$Packages變量表示這個包將會被安裝,默認root的密碼將被設置為”toor”,以及修改和修復其它配置.
```
mount -t proc proc kali-$architecture/proc mount -o bind /dev/ kali-$architecture/dev/ mount -o bind /dev/pts kali-$architecture/dev/pts
cat << EOF > kali-$architecture/third-stage
#!/bin/bash debconf-set-selections /debconf.set
rm -f /debconf.set
apt-get update
apt-get -y install git-core binutils ca-certificates
apt-get -y install locales console-common less nano git
echo "root:toor" | chpasswd
sed -i -e 's/KERNEL!="eth*|/KERNEL!="/' /lib/udev/rules.d/75-persistent-net-generator.rules
rm -f /etc/udev/rules.d/70-persistent-net.rules
apt-get --yes --force-yes install $packages
rm -f /third-stage
EOF
chmod +x kali-$architecture/third-stage
LANG=C chroot kali-$architecture /third-stage
```
### 在chroot環境中手動配置
如果有需要,你可以手工在rootfs環境里進行最終和必要的修改.
```
LANG=C chroot kali-$architecture
{在chroot環境里做額外的修改}
exit
```
#### 清理chroot環境里的被鎖文件
事實上在rootfs里一些你已經安裝的包可能會產生被鎖文件(例如在chroot環境里運行中的服務),需要在我們能關閉chroot時釋放.在你umount之前可能需要在chroot環境里停止一些服務.umount proc和dev的命令:
```
umount kali-$architecture/proc umount kali-$architecture/dev/pts umount kali-$architecture/dev/
```
然而,如果仍然有服務在chroot里運行,將會出現這樣的錯誤提示:
```
root@rootfs-box:~ umount kali-$architecture/proc
root@rootfs-box:~ umount kali-$architecture/dev/pts
root@rootfs-box:~ umount kali-$architecture/dev/
umount: kali-armhf/dev: device is busy. (In some cases useful info about processes that use the device is found by lsof(8) or fuser(1)) root@rootfs-box:~
```
如果出現這種情況,請用如下命令檢查哪個文件/服務鎖住了chroot:
```
root@rootfs-box:~/arm-stuff/rootfs:~ lsof |grep kali-armhf
...
dbus-daem 4419 messagebus mem REG 8,1 236108 15734602 dbus-daemon
dbus-daem 4419 messagebus mem REG 8,1 93472 17705250 ld-2.13.so ...
dbus-daem 4419 messagebus mem REG 8,1 100447 17705251 libpthread-2.13.so
dbus-daem 4419 messagebus mem REG 8,1 22540 17705240 librt-2.13.so
dbus-daem 4419 messagebus mem REG 8,1 893044 17705232 libc-2.13.so ...
```
從輸出信息我們看到dbus守護進程仍在chroot環境里運行.在繼續之前,我們需要在chroot環境里停止它.如果你已經成功umount了proc或dev,請用之前給出的命令重新掛載他們,chroot到rootfs里,然后停止dbus服務(或別的可能需要停止的服務):
```
# mount -t proc proc kali-$architecture/proc
# mount -o bind /dev/ kali-$architecture/dev/pts
LANG=C chroot kali-$architecture /etc/init.d/dbus stop exit
```
一旦釋放了所有的服務和被鎖文件,你就可以umount proc和dev了:
```
root@rootfs-box:~/arm-stuff/rootfs~ umount kali-$architecture/proc
root@rootfs-box:~/arm-stuff/rootfs~ umount kali-$architecture/dev/pts
root@rootfs-box:~/arm-stuff/rootfs~ umount kali-$architecture/dev/
root@rootfs-box:~/arm-stuff/rootfs~
```
### 清理
最后我們運行在chroot里的清理腳本釋放緩存文件占用的空間,還有需要的清理工作:
```
cat << EOF > kali-$architecture/cleanup
#!/bin/bash rm -rf /root/.bash_history
apt-get update apt-get clean
rm -f cleanup
EOF
chmod +x kali-$architecture/cleanup
LANG=C chroot kali-$architecture /cleanup
/etc/init.d/dbus stop
umount kali-$architecture/proc
umount kali-$architecture/dev/pts
umount kali-$architecture/dev/
cd ..
```
恭喜!你定制的Kali ARM rootfs就在kali-$architecture目錄里.你可以為往后的工作打包這個目錄,或復制到一個鏡像文件.
- 00. Kali Linux介紹
- Kali Linux默認密碼
- 01. 下載Kali Linux
- 封裝定制的Kali Live ISO
- 用Live U盤安裝Kali Linux
- 02. 制作定制的Kali鏡象
- 03. 安裝Kali Linux
- 無線驅動疑難排解
- 用Mini ISO通過網絡安裝Kali Linux
- 通過網絡PXE安裝Kali Linux
- 加密安裝Kali Linux
- Kali和Windows雙引導
- 硬盤安裝Kali Linux
- 04. 通過網絡安裝Kali Linux
- 05. Kali Linux常見問題
- Virtual Box的Kali Linux虛擬機
- 運行 Metasploit Framework
- Kali虛擬機安裝VMware Tools
- Kali Linux電子取證模式
- 06. Kali Linux ARM文檔
- 在MK/SS808上安裝Kali ARM
- 在三星Chromebook安裝Kali
- 07. Kali Linux開發
- 定制Raspberry Pi鏡像
- 定制Chromebook鏡像
- 封裝定制的Kali Live ISO
- 定制Kali的桌面系統
- 重新編譯Kali Linux內核
- 從源代碼編譯包
- ARM交叉編譯
- 準備Kali Linux ARM chroot
- 08. Kali Linux疑難排解
- 09. Kali 社區支持
- 給Kali提交問題
- Kali Linux官方鏡像
- Kali Linux官方網站
- Kali Linux漏洞追蹤
- 10. Kali Linux 策略
- Kali Linux安全更新策略
- Kali Linux網絡服務策略
- Kali Linux Root用戶策略
- 滲透測試工具策略
- Kali Linux開源軟件策略
- Kali Linux商標策略
- Kali和Debian的關系