磁盘加密功能主要是基于系统工具cryptsetup实现,现主要就其中一些概念、原理、用法作翔实说明
linux内核组件,主要作用是将物理块设备映射到高层次的虚拟块设备上,是LVM、EVMS、RAIDS、dm-crypt磁盘加密的基础设施。还提供了额外的功能特性像文件系统快照。
将自身提供的虚拟块设备上的数据传输到对应(所映射的)物理块设备上。其中数据在传输时可以被改变,磁盘加密就是利用了这一特性。详细原理参看1\(https://www.kernel.org/doc/html/latest/admin-guide/device-mapper/index.html)device-mapper文档
主要有用户空间配置交互工具dmsetup和libdevmapper.so库,源码在LVM2项目上
/dev/maper/control
device node发出iotcls,device-mapper的一个加密目标(crypto target)使用内核加密API提供透明块设备加密。在我看来其中target概念可以认为是虚拟了一个加密驱动,利用它可实现对磁盘加密功能。device-mapper上提供了多种target,例如cache、clone、error、linear、multipath、striped、thin等,都是在传统磁盘驱动上添加带有特定目的和功能新特性。这应该是device-mapper所创建的这套机制最大特点。
安装器在分区时调用cryptsetup时没有在目标使用系统上创建/etc/crypttab,在in_chroot/30_setup_cryptdisk.job中配置了/etc/crypttab,在after_chroot/02_genarate_fstab.job中会调用update-initramfs将/etc/crypttab写进了initramfs中
是为Linux磁盘加密而创建的规范,实现了一种平台独立的磁盘格式(数据组织形式),保证了口令以安全的文档化方式实现密码管理。其细节参看3\(https://mirrors.edge.kernel.org/pub/linux/utils/cryptsetup/LUKS_docs/on-disk-format.pdf)4\(https://gitlab.com/cryptsetup/LUKS2-docs/blob/master/luks2_doc_wip.pdf)LUKS规范
其最大特点就是其实现的磁盘格式,基于此它可以创建并存储加密相关元数据(meta-data)——这也是它区别于plain dm-crypt最大特点,从而对加密过程实现了封装、对口令实现了管理,以及其它高级友善特性
基于dm-crypt实现的一款用户空间磁盘加密工具。包含了plain dm-crypt volumes, LUKS volumes, loop-AES,TrueCrypt (包含了VeraCrypt扩展)和BitLocker磁盘加密格式。参见cryptsetup
以上对其依赖基础作了一般性介绍,现对其实现进行说明
cryptsetup luksFormat /dev/sdb1 基于物理分区创建luks格式分区
cryptsetup luksOpen /dev/vda8 luks_test 打开luks分区,会在/dev/mapper/创建luks_test设备,这是基于dm-crypt实现一个虚拟设备,在向该设备写入数据时,数据会被加密然后写入其映射的以luks格式组织的物理磁盘中,当然读取时磁盘数据会在映射设备上解密
mkfs.ext4 /dev/mapper/luks_test 对虚拟设备进行一般文件类型格式化
mount /dev/mapper/luks_test /luks/ 挂载设备到/luks目录
umount /luks/ 卸载设备
cryptsetup luksClose luks_test 关闭映射设备
其它常用操作:
cryptsetup luksAddKey /dev/vda8 修改或增加口令
cryptsetup luksRemoveKey /dev/vda8 删除口令
https://www.kernel.org/doc/html/latest/admin-guide/device-mapper/index.html device-mapper内核文档
https://gitlab.com/cryptsetup/cryptsetup/-/wikis/DMCrypt dm-crypt详细说明
https://mirrors.edge.kernel.org/pub/linux/utils/cryptsetup/LUKS_docs/on-disk-format.pdf LUKS1规范
https://gitlab.com/cryptsetup/LUKS2-docs/blob/master/luks2_doc_wip.pdf LUKS2规范
https://gitlab.com/cryptsetup/cryptsetup cryptsetup 官方主页