Linux磁盘加密

本篇文章简述一下在课上学习到的关于Linux磁盘加密的方法

我们根据操作一步步讲解吧,对Linux不太熟悉
apt install cryptsetup-bin这条就是下载的没啥好说的
modprobe aesmodprobe命令用于自动处理可载入模块,modprobe可载入指定的个别模块,或是载入一组相依的模块。modprobe会根据depmod所产生的相依关系,决定要载入哪些模块。若在载入过程中发生错误,在modprobe会卸载整组的模块。
装载aes的时候会报错modprobe: ERROR: could not insert 'padlock_aes': No such device,可能是因为现在系统默认装载了aesni_intel和aes_x86_64

  • 记得还有一个insmod,这俩有啥区别吗?insmod一次只能加载特定的一个设备驱动,且需要注明驱动的具体地址,哦,用的时候确实是指明了ko文件的位置;modprobe则可以一次将有依赖关系的驱动全部加载到内核

modprobe dm-crypt
lsmod | grep -E "aes|dm"查看所加载的模块下是否有aes和dm-crypt
dmsetup targets
要知道这个命令是啥意思,我们需要知道Linux中的device mapper

device mapper

device mapper是Linux内核中提供的一种从逻辑设备到物理设备的映射机制,在该机制下,用户能都很方便的根据自己的需要实现对存储资源的管理。
真不好理解啊,看了几篇博客都不知道他们在说啥,然后看到说LVM(Logical Volume Manager)利用的就是device mapper机制来实现存储系统的虚拟化,那我们去看看LVM是啥吧

LVM

LVM:逻辑卷管理器
LVM技术是在硬盘分区和文件系统之间添加了一个逻辑层,它提供了一个抽象的卷组,可以把多块硬盘进行卷组合并。
有这样一个例子(参考博客:链接
1
在图中有两块硬盘,其中硬盘1分了两个分区,/dev/sda1和/dev/sda2,硬盘2没有创建分区。接下来在/dev/sda2和/dev/sdb上创建物理卷,然后把这两个物理卷加入到卷组vg0中,现在,卷组vg0看起来像一块很大的逻辑硬盘,然后在其中创建两个逻辑卷/dev/vg0/lv0和/dev/vg0/lv1。最后,分别在/dev/sda1、/dev/vg0/lv0和/dev/vg0/lv1上创建文件系统,并分别把它们挂载到文件系统树中。这样看上去,逻辑卷是不是很像是一个逻辑的分区?在卷组vg0中,还预留有一部分空间未用,如果在使用中发现某个逻辑卷空间不够用了,可以在不停机的情况下,直接调整逻辑卷及其上的文件系统的大小。
这篇文章好像也是转载的,再贴一个原作者的链接吧原作者
在另一个博客上看到了一个LVM的技术架构(参考博客:链接):
2
PE物理块,每一个物理卷被划分为称为PE的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。
大致上知道是怎么回事了,就是在原来不好变化的硬盘分区上建了一层逻辑分区,这个逻辑分区可能横跨几个硬盘分区,这个逻辑分区好变化和调整

而这个dmsetup是device mapper在用户空间的操作工具,是提供给用户直接可用的创建删除device mapper设备的命令行工具。
dmsetup targets是查看系统支持的target_type及版本信息,这里的target_type就是可建立的逻辑卷的类型
3
目前我虚拟机里有这些类型,分别是加密的、线性、条块化等,具体不细说了

cd Desktopmkdir bigfilecd bigfile
dd if=/dev/zero of=bf1 bs=1024000 count=500 conv=fdatasync建立一个512MB大文件bf1
losetup /dev/loop0 bf1
losetup命令:设置循环设备,循环设备可以把文件虚拟成块设备,以便模拟整个文件系统,这样用户可以将其看作是硬盘驱动器,光驱或软驱等设备,并挂入当作目录来使用。
因为我们这里并不是用实际的物理磁盘来进行加密,所以这种方式可以很好的模拟出一个虚拟硬盘,对它的所有读写操作都将被重定向到读写一个名为bf1的普通文件而非操作实际磁盘或分区的轨道和扇区。
然后介绍一下loop设备:
参考博客:loop设备及losetup命令介绍
这段内容选自上述博客:“loop设备是一种伪设备,是使用文件来模拟块设备的一种技术,文件模拟成块设备后, 就像一个磁盘或光盘一样使用。在使用之前,一个loop设备必须要和一个文件进行连接。这种结合方式给用户提供了一个替代块特殊文件的接口。因此,如果这个文件包含有一个完整的文件系统,那么这个文件就可以像一个磁盘设备一样被mount起来。之所以叫loop设备(回环),其实是从文件系统这一层来考虑的,因为这种被mount起来的镜像文件它本身也包含有文件系统,通过loop设备把它mount起来,它就像是文件系统之上再绕了一圈的文件系统,所以称为loop。”
下面我将进行不加密和加密后的对比:

不加密

sudo mkfs.ext3 /dev/loop0 在回环设备上创建一个文件系统
4
现在相当于我们有了一个可用的磁盘了,磁盘上有文件系统了,然后在linux中,磁盘是要挂载的,不挂载Linux就无法访问这个磁盘设备。挂载相当于是把这个设备注册到系统的文件树(Linux只有一个文件树,而Windows并行的可以有好几个)中内,然后有了这个设备文件,系统才可以对它进行相应的操作。
将一个文件系统的顶层目录挂到另一个文件系统的子目录上,使它们成为一个整体,称为挂载。把该子目录称为挂载点。
挂载点必须是一个目录;一个分区挂载在一个已存在的目录上,这个目录可以不为空,但挂载后这个目录下以前的内容将不可用
以上参考自博客:Linux挂载详解
cd ..
mkdir mnt
sudo mount /dev/loop0 mnt
此时可以看见mnt文件夹变成了一个虚拟硬盘
cd mntls会出现lost+found文件
5
此时我们用hexdump去查看bf1
hexdump -C bf1可以看到此时不是全0了,但是还是比较有规律的
如何恢复原样?
cd ..
umount mnt
losetup -d /dev/loop0

加密

cryptsetup -c aes create efs1 /dev/loop0
“cryptsetup其实是一种设备的映射关系,我们用它来把一个设备映射成另外一个设备,然后对这个新的设备进行操作,并进行加密,这样就不会使我们的原设备直接被使用,从而达到一种安全的效果。”选自博客博客
这里使用到了device mapper机制,其实就是创建了一个逻辑卷efs1,它位于/dev/mapper/efs1,将对逻辑设备的操作映射到物理设备(这个物理设备其实也是我们虚拟的)
dmsetup ls
查看目前基于device mapper机制所建立的逻辑卷
ls /dev/mapper/efs1
6
mkfs.ext3 /dev/mapper/efs1
在逻辑卷上建立文件系统
cd ..
mkdir efs1
mount /dev/mapper/efs1 ./efs1
hexdump -s 10000 -C bf1 | head -100
7
可以看到此时相较于未加密,变得混乱相当于密文了
如何恢复原样呢?
umount /dev/mapper/efs1
cryptsetup remove efs1
dmsetup ls现在是空的了
losetup -d /dev/loop0
rmmod dm-crypt
现在我们来想一个问题“bitlocker加密后,其中的一个doc文件,我们复制出来是明文还是密文呢?”这个问题我得找个时间试一试,因为Linxu是明文