您的硬盤(hda)應該至少包含三個分區:
Hda1:這個小的未加密分區應該需要壹個密碼才能加載加密的根文件系統。
Hda2:這個分區應該包含您的加密根文件系統;確保它足夠大
Hda3:這個分區是妳當前的GNU/Linux系統。
此時不使用hda1和hda2。Hda3是您當前安裝的linux發行版;/usr和/boot不能單獨安裝。
您的分區分布可能如下所示:
# fdisk -l /dev/hda
磁盤/開發/硬盤驅動器:255個磁頭,63個扇區,2432個柱面
單位= 16065 * 512字節的柱面
設備啟動開始結束塊Id系統
/dev/hda 1 1 1 8001 83 Linux
/dev/hda 2 2 263 2104515 83 Linux
/dev/hda 3 264 525 2104515 83 Linux
/dev/hda 4 526 2047 12225465 83 Linux
安裝Linux-2.4.27
有兩種主要的方案可用於向內核添加回送加密支持:cryptoloop和loop-AES。本文基於loop-AES方案,因為它實現Rijndael的匯編語言非常快,而且非常優化。如果您有IA-32 (x86) CPU,它將為您提供最大的性能。此外,cryptoloop還存在壹些安全問題。
首先,下載並解壓縮loop-AES軟件包:
wget/loop-AES/loop-AES-v 2.2b . tar . bz2
tar -xvjf loop-AES-v2.2b.tar.bz2
然後下載內核源代碼並修補內核源代碼:
wget http://FTP . kernel . org/pub/Linux/kernel/v 2.4/Linux-2 . 4 . 27 . tar . bz2
tar -xvjf linux-2.4.27.tar.bz2
cd linux-2.4.27
rm include/linux/loop.h驅動程序/block/loop.c
補丁程序-Np1 -i../loop-AES-v 2.2b/kernel-2 . 4 . 27 . diff
設置鍵盤映射:
dump keys | load keys-m-& gt;drivers/char/defkeymap.c
接下來,配置您的內核;確保您選擇了以下選項:
制作菜單配置
阻止設備->;
& lt* & gt環回設備支持
[*] AES加密環路設備支持(新)
& lt* & gtRAM磁盤支持
(4096)默認RAM磁盤大小(新)
[*]初始RAM磁盤(initrd)支持
文件系統-& gt;
& lt* & gtExt3日誌文件系統支持
& lt* & gt第二次擴展fs支持
(重要說明:不要啟用/dev文件系統支持)
編譯並安裝內核:
制作dep bzImage
制作模塊模塊_安裝
CP arch/i386/boot/bzImage/boot/vmlinuz
如果您的啟動程序是grub,請更新/boot/grub/menu.lst或/boot/grub/grub.conf文件:
cat & gt/boot/grub/menu . lst & lt;& lt文件結束
默認為0
超時10
顏色綠色/黑色淺綠色/黑色
標題Linux
根(hd0,2)
內核/boot/vmlinuz ro root=/dev/hda3
文件結束
如果啟動器是lilo,則更新/etc/lilo.conf並運行lilo:
cat & gt/etc/lilo . conf & lt;& lt文件結束
lba32
boot=/dev/hda
提示
超時=100
image=/boot/vmlinuz
標簽=Linux
只讀
root=/dev/hda3
文件結束
氣墊
現在重啟妳的系統。
安裝Linux 2.6.8.1。
如前所述進行上壹部分,使用的補丁是loop-AES的kernel-2.6.8.1.diff,需要註意的是,妳需要安裝module-init-tools軟件包,這樣妳的系統才能支持該模塊。
安裝util-linux-2.12b。
這個losetup程序包含在util-linux-2.12b軟件包中。必須對其進行修補和重新編譯,以使其支持加密。下載、解壓縮並修補util-linux:
wget http://FTP . kernel . org/pub/Linux/utils/util-Linux/util-Linux-2.12b . tar . bz2
tar-xvjf util-Linux-2.12b . tar . bz2
cd util-linux-2.12b
補丁程序-Np1 -i../loop-AES-v 2.2b/util-Linux-2.12c . diff
使用少於20個字符的密碼,鍵入:
CFLAGS = "-O2-d loop _ PASSWORD _ MIN _ LENGTH = 8 ";出口標誌
安全可能是妳最關心的問題之壹。為此,請不要讓您的密碼少於20個字符。數據保密不是免費的,必須使用長密碼的形式‘付費’。
以root用戶身份編譯並安裝losetup程序:
。/configure & amp;& amp創建庫裝載
mv-f/sbin/losetup/sbin/losetup ~
RM-f/usr/share/man/man 8/losetup . 8 *
cd支架
gzip losetup.8
cp丟失設置/sbin
CP losetup.8.gz/usr/share/man/man 8/
創建加密的根文件系統
用隨機數據填充目標分區:
shred -n 1 -v /dev/hda2
安裝加密的環回設備:
losetup-e AES 256-S XXXXXX/dev/loop 0/dev/HD a2
為了防止更快的字典攻擊,建議添加-S xxxxxx選項。“xxxxxx”是您隨機選擇的種子(例如,您可能會選擇“gPk4lA”)。同樣,為了防止啟動時出現鍵盤映射問題,不要使用非ASCII字符(方言等。)在密碼中。Diceware網站提供了壹種創建強而易記的密碼的簡單方法。
現在開始創建ext3文件系統:
mke2fs -j /dev/loop0
檢查您輸入的密碼是否正確:
losetup -d /dev/loop0
losetup-e AES 256-S XXXXXX/dev/loop 0/dev/HD a2
mkdir /mnt/efs
掛載/開發/loop0 /mnt/efs
您可以比較加密和未加密的數據:
xxd /dev/hda2 |更少
xxd /dev/loop0 | less
是時候安裝妳的加密linux系統了。如果妳使用的是GNU/Linux發行版(如Debian、Slackware、Gentoo、Mandrake、Red Hat/Fedora、SuSE等。),運行以下命令:
cp -avx / /mnt/efs
如果您使用從零開始的Linux手冊,請按照lfs手冊中的描述進行配置,但是要做以下更改:
第6章-安裝util-linux:
補丁循環-AES解壓後的源代碼。
第8章-使LFS系統可引導:
指向我們的下壹章(創建引導設備)。
-
創建引導設備
創建ramdisk
開始時,使用chroot命令進入您的加密分區,並為引導設備創建壹個掛載點:
chroot /mnt/efs
mkdir /loader
然後創建初始ramdisk (initrd),稍後會用到它:
激光唱片
DD if =/dev/zero of = initrd bs = 1k count = 4096
mke2fs -F initrd
mkdir內存磁盤
mount -o循環initrd內存磁盤
如果使用grsecurity,可能會收到“權限被拒絕”的錯誤消息;如果是這樣,您必須在chroot命令之前運行mount命令。
創建文件系統的目錄組織,並復制所需的文件:
mkdir ramdisk/{bin,dev,lib,mnt,sbin}
cp /bin/{bash,mount} ramdisk/bin/
ln -s bash ramdisk/bin/sh
mknod -m 600內存磁盤/開發/控制臺c 5 1
mknod -m 600內存磁盤/開發/hda2 b 3 2
mknod -m 600內存磁盤/開發/循環0 b 7 0
cp /lib/{ld-linux.so.2,libc.so.6,libdl.so.2} ramdisk/lib/
cp /lib/{libncurses.so.5,libtermcap.so.2} ramdisk/lib/
cp /sbin/{losetup,pivot_root} ramdisk/sbin/
如果看到“/lib/libncurses.so.5:沒有這樣的文件或目錄”、“/lib/libtermcap.so.2:沒有這樣的文件或目錄”這樣的信息,這是正常的。Bash只需要這兩個庫中的壹個。您可以測試哪壹個是您真正需要的:
ldd /bin/bash
編譯睡眠程序,這樣可以防止密碼提示被內核信息淹沒(比如註冊usb設備的時候)。
cat & gtsleep.c & lt& lt" EOF "
# include & ltunistd.h & gt
# include & ltstdlib.h & gt
int main( int argc,char *argv[])
{
if( argc == 2)
sleep(atoi(argv[1]);
return(0);
}
文件結束
gcc -s sleep.c -o內存磁盤/bin/sleep
rm睡眠
創建壹個初始化腳本(不要忘記替換妳之前註冊的種子“xxxxxx”):
cat & gtramdisk/sbin/init & lt;& lt" EOF "
#!/bin/sh
/bin/sleep 3
/sbin/losetup-e AES 256-S XXXXXX/dev/loop 0/dev/HD a2
/bin/mount-r-n-t ext3/dev/loop 0/mnt
而[ $?-ne 0 ]
做
/sbin/losetup -d /dev/loop0
/sbin/losetup-e AES 256-S XXXXXX/dev/loop 0/dev/HD a2
/bin/mount-r-n-t ext3/dev/loop 0/mnt
完成的
cd /mnt
/sbin/pivot_root。裝貨設備
exec /usr/sbin/chroot。/sbin/init
文件結束
chmod 755內存磁盤/sbin/init
卸載環回設備並壓縮initrd:
umount -d內存磁盤
rmdir內存磁盤
gzip initrd
mv initrd.gz/boot/
從光盤啟動
我強烈建議您從只讀介質啟動系統,如引導光盤。
下載並解壓縮syslinux:
wget http://FTP . kernel . org/pub/Linux/utils/boot/sys Linux/sys Linux-2.10 . tar . bz2
tar-xvjf syslinux-2.10 . tar . bz2
配置isolinux:
mkdir bootcd
cp /boot/{vmlinuz,initrd . gz } sys Linux-2.10/isolinux . bin bootcd
echo " DEFAULT/vmlinuz initrd = initrd . gz ro root =/dev/ram 0 " \
& gtbootcd/isolinux.cfg
將iso映像刻錄到可引導光盤:
mkisofs-o bootcd . iso-b isolinux . bin-c boot . cat \
-no-emul-boot-boot-load-size 4-boot-info-table \
-J -hide-rr-moved -R bootcd/
cdrecord -dev 0,0,0速度4v bootcd . iso
rm -rf bootcd{,。iso}
從硬盤啟動
當您丟失引導光盤時,引導分區可以派上用場。請記住hda1是可寫分區,所以不太靠譜。只在緊急情況下使用!
創建並掛載ext2文件系統:
DD if =/dev/zero of =/dev/hda 1 bs = 8192
mke2fs /dev/hda1
mount /dev/hda1 /loader
復制內核和初始內存磁盤:
cp /boot/{vmlinuz,initrd.gz} /loader
如果您使用grub:
mkdir /loader/boot
cp -av /boot/grub /loader/boot/
cat & gt/loader/boot/grub/menu . lst & lt;& lt文件結束
默認為0
超時10
顏色綠色/黑色淺綠色/黑色
標題Linux
根(hd0,0)
kernel /vmlinuz ro root=/dev/ram0
initrd /initrd.gz
文件結束
grub-install-root-directory =/loader/dev/hda
卸載/加載程序
如果您使用lilo:
mkdir/loader/{引導、開發等}
cp /boot/boot.b /loader/boot/
mknod-m 600/裝載機/開發/hda b 3 0
mknod-m 600/loader/dev/hda 1 b 3 1
mknod-m 600/loader/dev/ram 0 b 1 0
cat & gt/loader/etc/lilo . conf & lt;& lt文件結束
lba32
boot=/dev/hda
提示
超時=100
image=/vmlinuz
標簽=Linux
initrd=/initrd.gz
只讀
root=/dev/ram0
文件結束
lilo-r/裝載機
卸載/加載程序
在最後壹步中,仍然保持chroot的狀態,修改/etc/fstab以添加以下選項:
/dev/loop0 / ext3默認值為0 1
刪除/etc/mtab並退出chroot。最後,運行“umount -d /mnt/efs”命令並重新啟動系統。如果出現壹些錯誤,您仍然可以在LILO提示符下使用“Linux root=/dev/hda3”來啟動您的未加密分區。
如果壹切順利,您可以對硬盤進行重新分區,並繼續加密您的hda3或hda4分區。在下面的腳本中,我們假設hda3將掛載交換設備,hda4將掛載/home目錄;您應該首先初始化這兩個分區:
shred -n 1 -v /dev/hda3
shred -n 1 -v /dev/hda4
losetup-e AES 256-S XXXXXX/dev/loop 1/dev/hda 3
losetup-e AES 256-S XXXXXX/dev/loop 2/dev/HD a4
mkswap /dev/loop1
mke2fs -j /dev/loop2
然後在系統的啟動目錄中創建壹個腳本,並更新/etc/fstab:
cat & gt/etc/init . d/loop & lt;& lt" EOF "
#!/bin/sh
if[" `/usr/bin/MD 5 sum/dev/hda 1 ` "!= \
" 5671 CEB db 3 bed 87 C3 B3 c 345 f 0101d 016/dev/hda 1 "]
然後
echo -n”警告!hda1完整性驗證失敗-請按enter鍵。
閱讀
船方不負擔裝貨費用
echo "1st上面選擇的密碼" | \
/sbin/losetup-p 0-e AES 256-S XXXXXX/dev/loop 1/dev/hda 3
回顯“上面選擇的第二個密碼”| \
/sbin/losetup-p 0-e AES 256-S XXXXXX/dev/loop 2/dev/HD a4
/sbin/swapon /dev/loop1
對於“序列0 63”中的I
做
echo-n-e " \ 33[10;10]\33[11;10]" & gt;/dev/tty$i
完成的
文件結束
chmod 700 /etc/init.d/loop
ln -s../init.d/loop /etc/rcS.d/S00loop
vi /etc/fstab
...
/dev/loop2 /home ext3默認值0 2