Linux 使用cryptsetup实现磁盘加密

介绍

在Linux上使用cryptsetup实现磁盘加密
原理:cryptsetup其实是一种设备的映射关系,我们用它来把一个设备映射成另外一个设备,然后对这个新的设备进行操作,并进行加密,这样就不会使我们的原设备直接被使用,从而达到一种安全的效果。

操作系统版本:Ubuntu 16.04

教程

1. 创建分区

在磁盘/dev/xvdb上创建一个主分区,大小为10G

 源码
1
fdisk /dev/xvdb

2. 查看分区

查看分区是否创建成功

 源码
1
fdisk -l /dev/xvdb

3. 加密分区

使用cryptsetup加密创建的分区

 源码
1
2
cryptsetup -v -y -c aes-cbc-plain luksFormat /dev/xvdb1
#回车后需要输入加密口令,此口令必须复杂,否则无法执行加密操作,此口令用于解密分区,请务必牢记,否则将无法使用此磁盘

注意:“Are you sure处必须输入大写的YES,否则会报错”

4. 映射分区

加密后的磁盘必须映射为一个设备(/dev/mapper)才能继续使用,设备名称可以自定义,这里使用log_disk

回车后需要输入之前的加密口令才能映射

 源码
1
cryptsetup luksOpen /dev/xvdb1 log_disk

5. 查看映射状态

映射完成后,可以使用cryptsetup命令查看是否成功映射

 源码
1
cryptsetup status log_disk

6. 格式化设备

对映射后的设备进行格式化

 源码
1
mkfs.ext4 /dev/mapper/log_disk

7. 挂载

需要通过映射后的设备来挂载,无法直接进行挂载

 源码
1
mount /dev/mapper/log_disk /mnt

直接挂载会报错

8.测试

测试是否可以正常读写

9. 设置开机自动挂载

1.生成密钥文件(如果想开机时手动输入密码可以不生成),密钥文件位置和名称可以自定义

 源码

注意:直接查看密钥文件是为空的

2.修改配置文件/etc/crypttab–>加入映射关系

格式:# <target name> <source device> <key file> <options>

格式说明:映射后的设备名称 要映射的加密分区 密码文件位置(如果想开机手动输入密码,密码文件处空着即可)

 源码

3.设置开机自动挂载

(1).获取UUID

 源码

(2).写入/etc/fstab

 源码

验证测试

1.卸载已经挂载的设备log_disk

 源码
1
umount /mnt

2.检查是否可以自动挂载

 源码
1
mount -a

2.关闭映射的设备

 源码
1
cryptsetup luksClose log_disk

3.检查是否还能挂载

4.重启服务器,测试是否可以开机免密自动挂载

自动挂载成功

#注意:Amazon linux无法实现在开机的时候自动免密映射设备,故无法实现开机自动免密挂载,如果将设备写入/etc/fstab,会导致实例无法正常开机,报错信息如下: