dm-crypt, 加密

dm-crypt 是整合到 linux 内核中的,而它的命令行前端 cryptsetup, 在大多数主流的 linux 发行版中都会自带

LUKS = Linux Unified Key Setup

commands

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# 将分区设置为加密的 LUKS 分区, 这个时候会对磁盘分区进行全盘覆写,所以速度会比较慢
# luksFormat: 初始化并格式化一个分区以便使用 LUKS 加密。
# luksOpen: 打开一个已加密的 LUKS 分区,使其可用。
# luksClose: 关闭一个已打开的 LUKS 分区。
# status: 查看加密设备的状态。
cryptsetup luksFormat /dev/nvme0n1p1

# 打开加密的 LUKS 分区, 映射加密分区, 映射加密分区到 nvme0n1p1_encrypted,
# 实际上是将加密分区映射到 linux 逻辑分区 /dev/mapper/nvme0n1p8_crypt
cryptsetup open /dev/nvme0n1p1 nvme0n1p1_encrypted

# 重设 PV 上加密层的大小
# https://unix.stackexchange.com/questions/322905/what-does-cryptsetup-resize-do-if-luks-doesnt-store-partition-size
sudo cryptsetup resize /dev/mapper/devicemappername

cryptsetup 创建 LUKS 的虚拟加密盘 (逻辑卷)

在前一个章节,已经介绍了"对物理分区的加密”。其实 cryptsetup 也可以支持虚拟加密盘 (逻辑加密盘) ——类似于 TrueCrypt 那样。

虚拟加密盘

考虑到某些读者没有看过《TrueCrypt 使用经验[1]: 关于加密算法和加密盘的类型》,俺再次唠叨一下: 所谓的"虚拟加密盘”, 就是说这个盘并【不是】对应物理分区,而是对应一个虚拟分区 (逻辑卷) 。这个虚拟分区,说白了就是一个大文件。虚拟分区有多大,这个文件就有多大。
“虚拟加密盘"的一个主要好处在于——可以拷贝复制。比如你可以在不同的机器之间复制这个虚假分区对应的大文件。 甚至可以把这个大文件上传到云端 (网盘) 进行备份——这么干的好处参见《文件备份技巧: 组合"虚拟加密盘"与"网盘”》。

创建一个文件作为容器

下面用 dd 命令创建 1GB (1024MB) 的大文件,该文件位于 /root/luks.vol 路径。当然,你也可以指定其它的文件大小或其它的文件路径。

1
dd if=/dev/zero of=/root/luks.vol bs=1M count=1024

经某个热心读者提醒,还可以使用 fallocate 命令创建容器文件。对于特别大的容器文件,性能【高于】dd 命令。 以下示例通过 fallocate 【瞬间】创建一个 64GB 的大文件。

1
fallocate -l 64G /root/luks.vol

用 LUKS 方式加密 (格式化) 该文件容器

使用前面章节提及的参数,对上述文件容器进行加密。得到一个虚拟的加密盘. 提示 are you sure时, 输入 大写的 YES

1
cryptsetup --cipher aes-xts-plain64 --key-size 512 --hash sha512 --iter-time 10000 luksFormat /root/luks.vol

打开加密之后的文件容器

使用如下命令打开上述的文件容器,使用的映射名是 xxx (你也可以改用其它单词) 。

1
cryptsetup luksOpen /root/luks.vol xxx

打开之后,该虚拟盘会被映射到 /dev/mapper/xxx 你可以用如下命令看到:

1
ls /dev/mapper/

创建文件系统

由于加密盘已经打开并映射到 /dev/mapper/xxx 你可以在 /dev/mapper/xxx 之上创建文件系统。命令如下 (文件系统类型以 ext4 为例)

1
mkfs.ext4 /dev/mapper/xxx

挂载文件系统

创建完文件系统之后,你还需要挂载该文件系统,才能使用它。挂载的步骤如下。 首先,你要先创建一个目录,作为【挂载点】。俺把"挂载点"的目录设定为 /mnt/xxx (当然,你可以用其它目录作为挂载点) 。

mkdir /mnt/xxx

创建好"挂载点"对应的目录,下面就可以进行文件系统的挂载。

mount /dev/mapper/xxx /mnt/xxx

挂载好文件系统,用如下命令查看,就可以看到你刚才挂载的文件系统。

df -hT

接下来,你就可以通过 /mnt/xxx 目录去访问该文件系统。当你往 /mnt/xxx 下面创建下级目录或下级文件,这些东西将被存储到该虚拟加密盘上。

退出

当你使用完,要记得退出。包括下面两步: 卸载文件系统

sudo umount /mnt/xxx

关闭加密盘

sudo cryptsetup close xxx

https://program-think.blogspot.com/2015/10/dm-crypt-cryptsetup.html

https://rehtt.com/index.php/archives/268/