zl程序教程

您现在的位置是:首页 >  其他

当前栏目

分区加密

加密 分区
2023-06-13 09:17:46 时间

Linux with LUKS | Linux dm-crypt only | FreeBSD GELI | FreeBSD 只使用密码

有(许多)其他替代方法来加密磁盘,我只呈现我所知道和使用的方法。请记住,安全只是系统还未经过实际考验而已。入侵者可以轻易通过键盘事件记录密码。此外,当已经加载了分区,其数据是可以自由访问的,并不会阻止入侵者去访问它。

Linux

这部分我们使用可用于 2.6 内核的 Linux dm-crypt (device-mapper)。在这个实例中,让我们加密 /dev/sdc1 分区,它可为任何其他分区、磁盘、USB或者用 losetup 创建的基于文件的分区。对于基于文件的分区,我们使用 /dev/loop0。看 镜像文件分区。Device mapper 利用标签来标识一个分区。我们使用 sdc1 作为此标签,但可以为任何字符串。

dm-crypt with LUKS

LUKS 和 dm-crypt 是较好的加密技术,并且可为同一个分区设置多个口令,更改密码也很方便。可简单输入 # cryptsetup --help 来测试 LUKS 是否可用。如果没有显示任何关于 LUKS 的信息,可看下面Without LUKS 的介绍。第一步如果需要的话创建一个分区:fdisk /dev/sdc。

创建加密分区
# dd if=/dev/urandom of=/dev/sdc1 # 可选

# cryptsetup -y luksFormat /dev/sdc1 # 这破坏了在 sdc1 上的数据

# cryptsetup luksOpen /dev/sdc1 sdc1

# mkfs.ext3 /dev/mapper/sdc1 # 创建 ext3 文件系统

# mount -t ext3 /dev/mapper/sdc1 /mnt

# umount /mnt

# cryptsetup luksClose sdc1 # Detach 已加密的分区
Attach
# cryptsetup luksOpen /dev/sdc1 sdc1

# mount -t ext3 /dev/mapper/sdc1 /mnt
Detach
# umount /mnt

# cryptsetup luksClose sdc1

dm-crypt without LUKS
# cryptsetup -y create sdc1 /dev/sdc1 # 或任何其他分区像 /dev/loop0

# dmsetup ls # 检查一下,将显示:sdc1 (254, 0)

# mkfs.ext3 /dev/mapper/sdc1 # 只有第一次要这么做!

# mount -t ext3 /dev/mapper/sdc1 /mnt

# umount /mnt/

# cryptsetup remove sdc1 # Detach 已加密的分区

这样做等同于(非 mkfs 部分) re-attach 分区。如果密码不正确,mount 命令将会失败。对于这个例子,只要简单的移除 sdc1 (cryptsetup remove sdc1)并重建即可。

FreeBSD

两个流行的 FreeBSD 磁盘加密模块为 gbde 和 geli。我现在使用 geli 原因是它够快并且它使用加解密硬件加速设备。详情可看 FreeBSD 使用手册 18.6http://www.freebsd.org/handbook/disks-encrypting.html。geli 模块必须已编译或加载进内核:

options GEOM_ELI

device crypto # 内核配置文件中加入这两行

# echo geom_eli_load="YES" >> /boot/loader.conf # 也可以在系统引导时加载或者做:kldload geom_eli

使用密码和密钥

我为一个典型的磁盘加密使用这些设置,其使用了一个口令和一个加密主密钥(master key)的密钥。这意味着你需要密码和生产的密钥 /root/ad1.key 来 attach 分区。主密钥存储在这个加密分区中并且不可见。看下面为 USB 或 映像文件的加密设置。

创建加密分区
# dd if=/dev/random of=/root/ad1.key bs=64 count=1 # 加密主密钥的密钥

# geli init -s 4096 -K /root/ad1.key /dev/ad1 # 对于磁盘也可用 -s 8192

# geli attach -k /root/ad1.key /dev/ad1 # 将 /dev/ad1 与所生成的密钥 /root/ad1.key 关联

# dd if=/dev/random of=/dev/ad1.eli bs=1m # 可选,需要很长时间

# newfs /dev/ad1.eli # 创建文件系统

# mount /dev/ad1.eli /mnt

Attach
# geli attach -k /root/ad1.key /dev/ad1

# fsck -ny -t ffs /dev/ad1.eli # 检查文件系统

# mount /dev/ad1.eli /mnt

Detach

Detach 步骤会在关机时自动完成。

# umount /mnt

# geli detach /dev/ad1.eli

/etc/fstab

加密分区在 /etc/fstab 中配置成自动加载。系统启动时会询问加密分区的密码。对于本例下列设置是必须的:

# grep geli /etc/rc.conf

geli_devices="ad1"

geli_ad1_flags="-k /root/ad1.key"

# grep geli /etc/fstab

/dev/ad1.eli /home/private ufs rw 0 0

加密一个 USB stick 或者映像文件使用密码而不是密钥来得更方便。这种情况下,没有必要随身携带额外的密钥文件。所做步骤同上面非常相似,只是不需要密钥文件。让我们来加密一个 1 GB 的映像文件/cryptedfile。

# dd if=/dev/zero of=/cryptedfile bs=1M count=1000 # 1 GB 文件

# mdconfig -at vnode -f /cryptedfile

# geli init /dev/md0 # 仅用密码加密

# geli attach /dev/md0

# newfs -U -m 0 /dev/md0.eli

# mount /dev/md0.eli /mnt

# umount /dev/md0.eli

# geli detach md0.eli

现在可以把这个映像文件加载成仅需密码的文件系统。

# mdconfig -at vnode -f /cryptedfile

# geli attach /dev/md0

# mount /dev/md0.eli /mnt

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/59166.html

linuxMD安全硬件