找回密码
 立即注册
搜索
查看: 763|回复: 0

使用 cryptsetup 加密硬盘

[复制链接]

267

主题

0

回帖

1166

积分

管理员

积分
1166
发表于 2023-12-26 00:07:19 | 显示全部楼层 |阅读模式

cryptsetup 是 linux 下的一个常用加密工具,它通过调用内核中的 dm-crypt 来实现对磁盘的加密。

它既可以加密真实的物理磁盘、分区,也可以加密用文件来虚拟的磁盘、分区。

本文介绍一下加密整个磁盘的过程。

格式化 LUKS 设备

cryptsetup luksFormat /dev/sda

如果是要加密分区 1 那就是 /dev/sda1

root@ubuntu:~# cryptsetup luksFormat /dev/sda
WARNING: Device /dev/sda already contains a 'crypto_LUKS' superblock signature.

WARNING!
========
This will overwrite data on /dev/sda irrevocably.

Are you sure? (Type uppercase yes): YES
Enter passphrase for /dev/sda:
Verify passphrase:

因为要对磁盘做破坏性数据覆盖,所以会有确认提示,输入大写的 YES 确认一下,然后会提示输入加密密码。

打开加密设备

cryptsetup luksOpen /dev/sda udisk

该命令会打开加密设备并将其映射到 /dev/mapper/udisk

查看磁盘信息:

fdisk -l

Disk /dev/sda: 2.75 TiB, 3000592982016 bytes, 5860533168 sectors
Disk model: WDC WD30EZRZ-00G
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes

Disk /dev/mapper/udisk: 2.75 TiB, 3000576204800 bytes, 5860500400 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes

查看映射设备信息:

cryptsetup status udisk

/dev/mapper/udisk is active.
  type:    LUKS2
  cipher:  aes-xts-plain64
  keysize: 512 bits
  key location: keyring
  device:  /dev/sda
  sector size:  512
  offset:  32768 sectors
  size:    5860500400 sectors
  mode:    read/write

接下来格式化磁盘:

mkfs.ext4 /dev/mapper/udisk

或者也可以创建几个分区(只是举个例子,后续不分区):

Disk /dev/sda: 2.75 TiB, 3000592982016 bytes, 5860533168 sectors
Disk model: WDC WD30EZRZ-00G
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes

Disk /dev/mapper/udisk: 2.75 TiB, 3000576204800 bytes, 5860500400 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 71FE272D-1ACF-E847-ADA1-70F7AEF8D5AD

Device               Start        End    Sectors  Size Type
/dev/mapper/udisk1    2048    3000000    2997953  1.4G Linux filesystem
/dev/mapper/udisk2 3000320 5860500366 5857500047  2.7T Linux filesystem

挂载后就可以使用了:

mount /dev/mapper/udisk /mnt/udisk

关闭加密设备

关闭前先卸除文件系统:

umount /mnt/udisk

再关闭映射设备:

cryptsetup luksClose udisk

如果磁盘 udisk 创建了多个分区,那么先把分区逐个关闭,然后在关闭磁盘,否则关闭时会提示 Device udisk is still in use.

拓展:系统启动时自动挂载加密磁盘

首先需要一个秘钥文件,这样才不需要在开机时输入密码。但这有个问题,如果只是你的磁盘被盗走了,里边的数据是解不了密的,但整机被盗走了那就失去了加密的意义。也可以考虑其他办法,比如将秘钥文件放在内网其他放服务器,或放在U盘里随身携带。

生成并添加秘钥文件:

dd if=/dev/urandom of=/root/enc.key bs=1 count=4096
cryptsetup luksAddKey /dev/sda /root/enc.key

若要删除秘钥文件:

cryptsetup luksRemoveKey /dev/sda -d /root/enc.key

修改配置文件 /etc/crypttab 添加映射关系:

# <target name> <source device>         <key file>      <options>
udisk /dev/sda /root/enc.key

修改配置文件 /etc/fstab 添加自动挂载配置:

/dev/mapper/udisk /mnt/udisk ext4 defaults 0 0

检查 fstab 是否正确,挂载一下试试:

 mount -a

没问题就重启一下试试看。

拓展:文件虚拟加密磁盘

方法一:使用循环设备

dd if=/dev/zero of=loop.img bs=1M count=100
losetup /dev/loop20 loop.img

然后就可以像使用 /dev/sda 设备那样使用 /dev/loop20 了。

不用时卸载方法:

losetup -d /dev/loop20

方法二:直接使用文件

dd if=/dev/zero of=crypt.img bs=1M count=100
cryptsetup luksFormat crypt.img
file crypt.img # 查看文件类型信息
crypt.img: LUKS encrypted file, ver 2 [, , sha256] UUID: e028a422-cc0c-4ba8-9026-addf155b8a24
cryptsetup luksOpen crypt.img crypt

后续的用法没什么区别。


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|棱讯科技 ( 粤ICP备2024228160号-2|粤公网安备44030002003510号 )

GMT+8, 2024-12-22 15:06 , Processed in 0.016050 second(s), 3 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表