《Linux_管理系统存储》这篇文章讲解了如何划分分区,通过这篇文章可以了解到存储设备要能被使用必须挂载到目录下。我们可以理解为U盘必须插在电脑上才能写入内容。只要设备可以被使用,任何人都可以将该设备挂载后进行操作,所以为了安全起见,可以对磁盘进行加密,只有知道解密密码的人才能解密,而设备只有解密后才能挂载,这样就增加了安全性。
本篇文章主要讲述的是luks加密方式,是在文件系统和物理设备之间添加加密层。如果将加密层暴力破坏之后,数据就无法进行读取,是一种比较可靠的加密方式。
我在我的主机上划分了一块分区vdb1,至于分区的划分,可以参考《Linux_管理系统存储》这篇文章。使用以下命令对磁盘进行加密:
[root@localhost ~]# cryptsetup luksFormat /dev/vdb1
加密时需要添加密码,通过此密码才能对磁盘解密。
解密时解密后的设备名字就不再是vdb1,需要重新起名,但是实际使用的存储设备还是vdb1。以下命令将vdb1解密为虚拟设备westos
,/dev/mapper/
目录下的设备为虚拟设备:
[root@localhost ~]# cryptsetup open /dev/vdb1 westos
物理设备只有在添加文件系统后才能被系统使用。常见的文件系统的格式有ext3 ext4 vfat xfs,下图是给westos设备格式化xfs文件系统,并将其挂载到/mnt/这个目录下。给/mnt/下写入数据,就是给westos中写入数据:
[root@localhost ~]# mkfs.xfs /dev/mapper/westos #格式化文件系统为xfs
[root@localhost ~]# mount /dev/mapper/westos /mnt/ #挂载
卸载westos设备之后,并将westos虚拟设备关闭掉,可以理解为对设备进行了加密,westos为vdb1解密后的设备名。关闭westos之后即对vdb1进行了加密,此时/dev/vdb1因为被加密所以不能被挂载使用,如下图:
[root@localhost ~]# umount /mnt/ #卸载
[root@localhost ~]# cryptsetup close westos #将westos虚拟设备关闭
要想使用vdb1这个分区,必须通过密码认证进行解密,才能够被挂载使用。以下命令将/dev/vdb1解密为linux虚拟设备,虚拟设备的名字可以与之前的不同,但是实际的设备就是vdb1就好像笔名一样,一个作家可以有不同的笔名,但这些笔名都指向的是这个作者。解密之后将linux挂载后就可以写入数据,test是将vdb1解密为westos虚拟设备时所创建的文件:
[root@localhost ~]# cryptsetup open /dev/vdb1 linux #解密为linux虚拟设备
[root@localhost ~]# mount /dev/mapper/linux /mnt/ #挂载
可以使用df命令查看挂载信息:
命令形式的挂载在系统重启之后就会失效,加密的设备要永久挂载需要考虑两个问题,解密和挂载,可以编辑/dev/crypttab
文件,让系统在启动时对加密的/dev/vdb1解密:
[root@localhost ~]# vim /etc/crypttab #加密设备解密
disk /dev/vdb1 /root/vdb1passwd
disk为解密后的虚拟设备,/dev/vdb1为解密设备,/root/vdb1passwd为记录/dev/vdb1解密密码的文件。该内容表示将/dev/vdb1解密为disk这个虚拟设备,密码记录在/root/vdb1passwd这个文件中。
vdb1passwd这个文件系统中是么有的,所以创建该文件,将vdb1的解密密码写入,为了安全起见,给该文件600的权限,只有文件所有人才能查看:
[root@localhost ~]# vim /root/vdb1pass #密码文件
2018westos
[root@localhost ~]# chmod 600 /root/vdb1pass
除此以外还需要执行以下命令说明/root/vdb1passwd为/dev/vdb1的密码文件:
[root@localhost ~]# cryptsetup luksAddKey /dev/vdb1 /root/vdb1pass
此时,开机时系统就会自动将加密分区/dev/vdb1解密为disk。要自动挂载disk这个虚拟设备需要将挂载信息写入到/etc/fstab这个文件中:
[root@localhost ~]# vim /etc/fstab
/dev/mapper/disk /mnt xfs defaults 0 0
/dev/mapper/disk为挂载的设备 /mnt为挂载点 xfs为设备的文件系统 后面的两个0表示不检测不备份。
此时系统在启动之后会将vdb1 自动解密为disk并挂载到/mnt下。
要将加密设备恢复为原来没有加密的设备,首先要将/etc/fstab和/etc/crypttab 两个文件清空,删除密码文件/root/vdb1pass,然后卸载虚拟设备,解密设备,再强制格式化/dev/vdb1为xfs文件系统。
[root@localhost ~]# vim /etc/fstab
[root@localhost ~]# vim /etc/crypttab
[root@localhost ~]# rm -fr /root/vdb1passwd
[root@localhost ~]# umount /mnt/ #卸载
[root@localhost ~]# cryptsetup close /dev/mapper/disk #关闭虚拟设备
[root@localhost ~]# mkfs.xfs /dev/vdb1 -f #强制格式化vdb1为xfs文件系统
此时vdb1不需要解密就可以挂载使用,如下图:
luks的加密方式安全性相对较高,如果加密层被破坏数据也就无法读取,不至于数据泄露。