问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

Linux Encryption HOWTO 怎样制作一个加密的文件系统

发布网友 发布时间:2022-04-22 20:29

我来回答

1个回答

热心网友 时间:2022-05-14 08:31

展开1全部设定分区

您的硬盘(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

设置键盘映射:

mpkeys | 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 moles moles_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 。要注意的是你要安装mole-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[10;10]\33[11;10]" > /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
声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
假如一个男生与你第一次见面就提出那种要求,那他是真心爱你么? ...一天就要求跟我发生关系,请问这样的人值得交往吗? 男人会喜欢一个第一次见面就和他上床的女人吗? 么么们用什么手机呀,我想换手机 想换手机,爱疯6和6plus,哪个比较好? 沼液如何在苹果树上叶面追肥 苹果6s plus玩游戏比较好,还是小米六玩游戏比较好。 苹果树发芽后流酸辛能打多少倍为合适、苹果树发芽后打百分之零点五的... ...还打电话给你,你会怎么办???谢谢了,大神帮忙啊 如何看待男人一见到就想要那个? 如何对硬盘的一个分区加密 如何在Linux中产生,加密或解密随机密码 linux系统硬盘被加密 linux系统中存放加密用户密码信息的是哪个文件? linux系统如何加密或者封装,我指的是不让人能看到我系统里的文件。 linux 怎么加密硬盘 微信不小心把好友删除 再加回来聊天记录可以恢复吗? Linux下如何进行全盘加密?(包括根分区) 我把我的微信好友删除了,和他的聊天记录还能恢复吗? windows xp 中xp的全称是什么啊 Windows XP系统好吗? 万王之王3D公会城战怎么打 玩法规则及奖励一览 Windows XP 都有哪些配置 windows xp 的优缺点. 万王之王3D怎么转职 转职地点及转职方法说明 万王之王3D 黑名单 关于WINDOWS XP 万王之王3D地下城攻略有没有?想知道地下城怎么打更容易? 什么是Windows XP ??越详细越好,谢谢 万王之王3D龙晶矿脉怎么玩 龙晶矿脉打法技巧 如何在 Linux 中产生,加密或解密随机密码 为了linux系统的安全,硬盘应如何分区?为什么? 如何加密分区/文件夹? linux分区被加密了,有办法解密吗 linux 主分区为什么有锁不让修改?我该怎么分区呢?懂得来谢谢 在win7上用加密软件给移动硬盘加密,如果硬盘连接到linux上是不是不管用了? 电脑装了一个固态又加了一个机械结果机械的不显示这是怎么回事是我安错了? linux是否能够自动隐藏和保护非linux系统的&quot;隐藏分区&quot; 笔记本电脑windows许可证即将过期怎么回事? 你的windows许可证即将过期是什么意思? 电脑屏幕一直弹出这个提示:Windows许可证即将过期怎么办? 电脑开机弹出windows许可证到期 电脑开机后显示“你的Windows许可证即将过期”,这是什么意思?有什么影 ... windows10企业版许可证即将过期怎么办? 婴儿脸上的脂肪粒怎么处理 新生儿脸上长了像小肉粒一样的,怎么办 婴儿脸上起小疙瘩是怎么回事? 宝宝身上长满了肉粒咋办 为什么会长脂肪颗粒? 眼角的肉粒是什么可以弄掉吗?如果可以的话怎么去除
  • 焦点

最新推荐

猜你喜欢

热门推荐