您的硬盘(hda)最少应该包含三个分区:
hda1:这个小的没加密的分区 应该 要求 一个 口令 为了 加载 加密 的根文件系统
hda2:这个分区应该包含你的加密根文件系统;确保它足够大
hda3:这个分区就是你的当前的GNU/Linux系统
在这时,hda1和hda2没有使用。hda3就是当前你安装的linux发行版; /usr 和/boot不能另外分区装载。
你的分区分布也许会像下面这样:
# fdisk -l /dev/hda
Disk /dev/hda: 255 heads, 63 sectors, 2432 cylinders
Units = cylinders of 16065 * 512 bytes
Device Boot Start End Blocks Id System
/dev/hda1 1 1 8001 83 Linux
/dev/hda2 2 263 2104515 83 Linux
/dev/hda3 264 525 2104515 83 Linux
/dev/hda4 526 2047 12225465 83 Linux
安装 Linux-2.4.27
有两种主要的方案可用于在内核上添加 loopback加密支持:cryptoloop 和 loop-AES。本文是基于loop-AES方案的,因为因为它的特点是非常快 和非常优化实行 of Rijndael 用汇编语言。如果你有一个IA-32 (x86) CPU ,它将为您提供 最大的性能。另外,还有一些关于cryptoloop的安全关切.
首先,下载和解压 loop-AES 软件包:
wget http://loop-aes.sourceforge.net/loop-AES/loop-AES-v2.2b.tar.bz2
tar -xvjf loop-AES-v2.2b.tar.bz2
然后再下载内核源代码和补丁并为内核源码打上补丁:
wget http://ftp.kernel.org/pub/linux/kernel/v2.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 drivers/block/loop.c
patch -Np1 -i ../loop-AES-v2.2b/kernel-2.4.27.diff
设置键盘映射:
dumpkeys | loadkeys -m - >drivers/char/defkeymap.c
下一步,配置你的内核;确定下面的选项你已经选上了:
make menuconfig
Block devices --->
<*>Loopback device support
[*] AES encrypted loop device support (NEW)
<*>RAM disk support
(4096) Default RAM disk size (NEW)
[*] Initial RAM disk (initrd) support
File systems --->
<*>Ext3 journalling file system support
<*>Second extended fs support
(important note: do not enable /dev file system support)
编译并安装内核:
make dep bzImage
make modules modules_install
cp arch/i386/boot/bzImage /boot/vmlinuz
如果你的启动器是grub,更新你的 /boot/grub/menu.lst或 /boot/grub/grub.conf文件:
cat >/boot/grub/menu.lst <<EOF
default 0
timeout 10
color green/black light-green/black
title Linux
root (hd0,2)
kernel /boot/vmlinuz ro root=/dev/hda3
EOF
启动器是lilo的话就更新/etc/lilo.conf并运行 lilo :
cat >/etc/lilo.conf <<EOF
lba32
boot=/dev/hda
prompt
timeout=100
image=/boot/vmlinuz
label=Linux
read-only
root=/dev/hda3
EOF
lilo
现在重启你的系统。
安装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
patch -Np1 -i ../loop-AES-v2.2b/util-linux-2.12c.diff
使用少于20个字符的密码,键入:
CFLAGS="-O2 -DLOOP_PASSWORD_MIN_LENGTH=8"export CFLAGS
安全可能是你主要关心的一个问题。为此,请不要使您的密码少于20个字符。数据保密性不是免费的, 你必须以‘支付’的形式使用长的密码。
使用root用户编译安装 losetup程序:
./configure &&make lib mount
mv -f /sbin/losetup /sbin/losetup~
rm -f /usr/share/man/man8/losetup.8*
cd mount
gzip losetup.8
cp losetup /sbin
cp losetup.8.gz /usr/share/man/man8/
创建加密的根文件系统
用随机数据填充目标分区:
shred -n 1 -v /dev/hda2
安装加密loopback设备:
losetup -e aes256 -S xxxxxx /dev/loop0 /dev/hda2
为防止比较快的字典攻击,推荐加上-S xxxxxx 选项,"xxxxxx" 是你随机选取的种子(例如,你可能选择 "gPk4lA" )。 同样,为了防止启动时的键盘映射问题,在密码中不要使用非ASCII字符(方言,等)。Diceware站点提供了一种简单的的方法去创建强大并容易记住的密码。
现在开始创建ext3文件系统:
mke2fs -j /dev/loop0
检测你输入的密码是正确的:
losetup -d /dev/loop0
losetup -e aes256 -S xxxxxx /dev/loop0 /dev/hda2
mkdir /mnt/efs
mount /dev/loop0 /mnt/efs
你可以比较已加密的和未加密的数据:
xxd /dev/hda2 | less
xxd /dev/loop0 | less
现在是时候安装你的加密的linux系统了。如果你使用的是GNU/Linux发行版(譬如Debian, Slackware, Gentoo, Mandrake, RedHat/Fedora, SuSE, etc.), 运行下面的命令:
cp -avx / /mnt/efs
如果你使用是Linux From Scratch手册,照着lfs手册上所说的那样进行配置,但要做以下修改:
Chapter 6 - Installing util-linux:
在解压源代码后打上 loop-AES 的补丁。
Chapter 8 - Making the LFS system bootable:
指向我们的下一章(创建启动设备)。
--------------------------------------------------------
创建启动设备
创建ramdisk
在开始时,先用chroot命令进入你的加密分区并创建启动设备的挂载点:
chroot /mnt/efs
mkdir /loader
然后创建 initial ramdisk (initrd),它将会在以后用到:
cd
dd if=/dev/zero of=initrd bs=1k count=4096
mke2fs -F initrd
mkdir ramdisk
mount -o loop initrd ramdisk
如果您使用 grsecurity . 您可能会收到"Permission denied"的提示错误的信息;如果是这样你将必须在chroot命令之前运行 mount命令。
创建文件系统的目录组织并复制所需要的的文件进去:
mkdir ramdisk/{bin,dev,lib,mnt,sbin}
cp /bin/{bash,mount} ramdisk/bin/
ln -s bash ramdisk/bin/sh
mknod -m 600 ramdisk/dev/console c 5 1
mknod -m 600 ramdisk/dev/hda2 b 3 2
mknod -m 600 ramdisk/dev/loop0 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: No such file or directory","/lib/libtermcap.so.2: No such file or directory"的信息,这是正常的。bash 只要求用这两个库中的其中一个。 你可以检测哪一个才是你实际所需要的:
ldd /bin/bash
编译sleep程序,它将防止密码提示被内核信息所淹没(例如当usb设备注册时)。
cat >sleep.c <<"EOF"
#include <unistd.h>
#include <stdlib.h>
int main( int argc, char *argv[] )
{
if( argc == 2 )
sleep( atoi( argv[1] ) )
return( 0 )
}
EOF
gcc -s sleep.c -o ramdisk/bin/sleep
rm sleep.c
创建初始化脚本(不要忘记替换掉你之前报选的种子 "xxxxxx" ):
cat >ramdisk/sbin/init <<"EOF"
#!/bin/sh
/bin/sleep 3
/sbin/losetup -e aes256 -S xxxxxx /dev/loop0 /dev/hda2
/bin/mount -r -n -t ext3 /dev/loop0 /mnt
while [ $? -ne 0 ]
do
/sbin/losetup -d /dev/loop0
/sbin/losetup -e aes256 -S xxxxxx /dev/loop0 /dev/hda2
/bin/mount -r -n -t ext3 /dev/loop0 /mnt
done
cd /mnt
/sbin/pivot_root . loader
exec /usr/sbin/chroot . /sbin/init
EOF
chmod 755 ramdisk/sbin/init
卸载 loopback 设备并压缩initrd:
umount -d ramdisk
rmdir ramdisk
gzip initrd
mv initrd.gz /boot/
从CD-ROM启动
我强烈建议您从只读的媒体里启动您的系统,例如可启动的光盘。
下载并解压syslinux:
wget http://ftp.kernel.org/pub/linux/utils/boot/syslinux/syslinux-2.10.tar.bz2
tar -xvjf syslinux-2.10.tar.bz2
配置isolinux:
mkdir bootcd
cp /boot/{vmlinuz,initrd.gz} syslinux-2.10/isolinux.bin bootcd
echo "DEFAULT /vmlinuz initrd=initrd.gz ro root=/dev/ram0" \
>bootcd/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 -speed 4 -v bootcd.iso
rm -rf bootcd{,.iso}
从硬盘启动
当你丢失了你的可启动光盘时,启动分区就可以派上用场了。请记住hda1是个可写分区,因而并不是很可靠的,只有当你遇到紧急的情况时才使用它!
创建并挂载ext2文件系统:
dd if=/dev/zero of=/dev/hda1 bs=8192
mke2fs /dev/hda1
mount /dev/hda1 /loader
复制内核和initial ramdisk:
cp /boot/{vmlinuz,initrd.gz} /loader
如果你使用的是grub :
mkdir /loader/boot
cp -av /boot/grub /loader/boot/
cat >/loader/boot/grub/menu.lst <<EOF
default 0
timeout 10
color green/black light-green/black
title Linux
root (hd0,0)
kernel /vmlinuz ro root=/dev/ram0
initrd /initrd.gz
EOF
grub-install --root-directory=/loader /dev/hda
umount /loader
如果你使用lilo:
mkdir /loader/{boot,dev,etc}
cp /boot/boot.b /loader/boot/
mknod -m 600 /loader/dev/hda b 3 0
mknod -m 600 /loader/dev/hda1 b 3 1
mknod -m 600 /loader/dev/ram0 b 1 0
cat >/loader/etc/lilo.conf <<EOF
lba32
boot=/dev/hda
prompt
timeout=100
image=/vmlinuz
label=Linux
initrd=/initrd.gz
read-only
root=/dev/ram0
EOF
lilo -r /loader
umount /loader
最后一步 仍然保持chroot的状态,修改/etc/fstab增加以下选项:
/dev/loop0 / ext3 defaults 0 1
去除 /etc/mtab 并从chroot中退出。最后 ,运行 "umount -d /mnt/efs"命令然后重启系统。 如果有某些错误发生,你仍然可以在 LILO提示中用"Linux root=/dev/hda3"来启动你未加密的分区。
如果一切都顺利,你就可以重新分区你的硬盘和继续加密你的hda3或hda4分区。在下面的脚本中,我们假设 hda3将挂载swap设备,hda4挂载/home目录;你应该先初始化这两个分区:
shred -n 1 -v /dev/hda3
shred -n 1 -v /dev/hda4
losetup -e aes256 -S xxxxxx /dev/loop1 /dev/hda3
losetup -e aes256 -S xxxxxx /dev/loop2 /dev/hda4
mkswap /dev/loop1
mke2fs -j /dev/loop2
然后在系统的启动目录里创建一个脚本并更新 /etc/fstab:
cat >/etc/init.d/loop <<"EOF"
#!/bin/sh
if [ "`/usr/bin/md5sum /dev/hda1`" != \
"5671cebdb3bed87c3b3c345f0101d016 /dev/hda1" ]
then
echo -n "WARNING! hda1 integrity verification FAILED - press enter."
read
fi
echo "1st password chosen above" | \
/sbin/losetup -p 0 -e aes256 -S xxxxxx /dev/loop1 /dev/hda3
echo "2nd password chosen above" | \
/sbin/losetup -p 0 -e aes256 -S xxxxxx /dev/loop2 /dev/hda4
/sbin/swapon /dev/loop1
for i in `seq 0 63`
do
echo -n -e "\33[1010]\33[1110]" >/dev/tty$i
done
EOF
chmod 700 /etc/init.d/loop
ln -s ../init.d/loop /etc/rcS.d/S00loop
vi /etc/fstab
...
/dev/loop2 /home ext3 defaults 0 2
linux from scratch *** 作:第一部分:环境设置
1、安装VirtualBox3.1.8
2、安装Linux *** 作系统(RHEL或Centos等,不能用ubuntu,因为要有patch,m4,-1.4.10,autoconf,yacc等程序)
3、安装增强功能并分配固定数据空间,设置/mnt/share共享:
mount -t vboxsf share /mnt/share
如果要开机就挂上共享,可以在/etc/fstab的最后加上
share /mnt/share vboxsf rw,gid=100,uid=1000,auto 0 0
4、解压lfslivecd-x86-6.3-42145.iso里的lfs-sources到share
#另外,也可以不用安装 *** 作系统,直接用lfslivecd-x86-6.3-42145.iso作启动盘
#启动后选/Asia/shanghai及Chinese(simpifiled utf8),然后可以用cfdisk /dev/hda进行分区
#启动盘的/usr/share/LFS-BOOK-6.3-HTML目录下就是LFS手册
#由于要复制粘贴,所以要开启ssh服务,virtualbox设置的网络里将NAT(网格地址转换)改为Bridged Adapter,界面名称选1x1
11b/g/n Wireless LAN PCI Express Half Mini Card Adapter(这是我的无线卡).
#启动后用ifconfig就能查看地址,然后再用passwd给root设个密码(不然客户端不能登录)
#然后启动服务/etc/rc.d/init.d/sshd start
#最后再Windows里用putty连接ssh服务器(在Session界面的HostName里输入IP,Connection
Type里选SSH即可)。
#如果要用putty传输文件,则打开cmd窗口,输入命令:pscp 源文件路径 root@hostIp:目的路径
如将aaa.jpg传到/home下,则:pscp aaa.jpg root@192.168.0.101:/home
5、将/mnt/share/lfs-sources设置到根目录的lfs-sources:
ln -s /mnt/share/lfs-sources /
6、添加一个8G的虚拟硬盘(硬盘大小最好不小于2G)
7、分区并格式化硬盘:
8、生成sources及tools目录
9.将tools挂至根目录:
ln -sv $LFS/tools /
10.生成lfs用户
11.生成lfs用户环境
12.重新进入环境
第二部分:工具链制作
13.编译binutils
14.编译gcc
15.安装内核头文件Linux API Headers
16.编译Glibc-2.5.1
17.调整工具链
18.测试工具链的调整
19.测试工具安装
20.GCC安装(第二遍)
21.安装Binutils(第二遍)
22.安装Ncurses
23.安装Bash
24.安装Bzip
25.安装Coreutils
26.安装Diffutils
27.安装Findutils
28.安装Gawk
29.Gettext
30.Grep
31.Gzip
32.Make
33.Patch
34.安装Perl
35.安装Sed
36.安装Tar
37.安装Texinfo
38.安装Util-linux
39.删除些不用的东西(可不执行)
第三部分 主机中设置lfs
40.回到主机并建三个目录
41.建设备文件
43.复制源码到目标系统下
44.chroot到目标系统下(将新盘作为根目录)
45.建立目标系统目录结构
46.创建几个必要的链接
47.创建root及nobody用户组
48.重加载bash
第四部分 软件包安装
50.重启的环境恢复
51.进入软件包目录
52.安装Linux头
53.安装Man-pages
54.安装Glibc
55.调整工具链
56.调整specs文件
57.测试是否调整成功
58.安装Binutils
59.安装GCC
60.测试GCC是否安装正确
61.安装Berkeley
62.安装Sed
63.安装E2fsprogs
64.安装Coreutils
65.安装Iana-Etc
66.安装M4-1.4.10
67.安装Bison
68.安装Ncurses
69.安装Procps
70.安装Libtool
71.安装Perl
72.安装Readline
73.安装Zlib
74.安装Autoconf
75.安装Automake
76.安装Bash
77.安装Bzip
78.安装Diffutils
79.安装File
80.安装Findutils
81.Flex
82.安装Grub
83.安装Gawk
84.安装Gettext
85.安装Grep
86.安装Groff
87.安装Gzip
88.安装Inetutils
89.安装IPRoute
90.安装kbd
91.安装Less
92.安装Make
93.安装Man-DB
94.安装Mktemp
95.安装Module-Init-Tools
96.安装Patch
97.安装Psmisc
98.安装Shadow
99.安装Sysklogd
100.安装Sysvinit
101.安装Tar
102.安装Texinfo
103.安装Udev
104.安装Util-linux
105.安装Vim
106.退出chroot环境
第五部分 安装系统
107.从现在到制作结束,重启后设置
108.生成相关文件
109.安装内核
110.安装Grub
111.设置Grub启动菜单(注意,如果是两个分区则应修改root选项为hd0,1及/dev/hda2)
112.将menu.lst连接到/etc目录
113.结束
logout
至此,已经全部安装完成,可以启动自己的系统了。
-----------------------------------------------------------------------
另:
114.安装Linux2.6.37版本(linux-2.6.37.tar.bz2)
Perl和iprout要用更高版本,用:
perl-5.14.1.tar.bz2
iproute2-3.3.0.tar.bz2
115.解压initrd文件
116.制作内存启动盘
应该是你系统中没有安装对应的rpm包,需要安装一下util-linux-2.23.2-43.el7.x86_64.rpm执行“rpm -i util-linux-2.23.2-43.el7.x86_64.rpm ”即可。
util-linux-2.23.2-43.el7.x86_64.rpm包需要你从其他地方获取,比如网上下载或者从liunx安装镜像中获取。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)