如何用dm-crypt加密Linux上的分区?
安装Linux发行版时,创建加密分区极为容易。安装程序可以指导你完成此操作。但如果你错过了这个机会,可按照本文中的步骤创建秘密保险库。
先决条件
需要一个空白分区完成此过程,也就是上面没有文件系统的未格式化分区。
如果格式化的分区目前占据你存储设备上的所有可用空间,需要使用GParted缩小其中一个分区。
警告:先备份数据是明智之举。缩小分区及文件系统时,可能存在小小的风险。计算机在此过程中可能崩溃或断电。这可能导致文件系统处于不一致的状态,因而很难恢复。
遵照本文的头几步用GParted调整分区大小。或者如果有个分区再也用不着,可以删除它。(释放一些空间、它显示为“未分配”后,跳过本文中的其余步骤。)具体来说,别创建格式为ext4的分区,而是鼠标右击未分配的空间,如图所示。在打开的对话窗口中,你会看到标有“文件系统”的字段。通常,ext4在这里被选择为默认文件系统。点击并更改成“cleared”。
图1
选择“Add”后,点击绿色打勾符号,让更改生效。
安装cryptsetup
如果你启动实时操作系统以便用GParted编辑分区,请重启回到主Linux发行版。
打开终端模拟器。在基于Debian的系统上,比如Ubuntu或Linux Mint,输入该命令:
sudo apt update && sudo apt install cryptsetup
图2
在Fedora或CentOS等发行版和使用RPM软件包而不是DEB的其他发行版上, cryptsetup可能早已安装。如果还没有安装,可以使用该命令来安装:
sudo yum install cryptsetup
在OpenSUSE上,如果cryptsetup之前没有安装,可以使用该命令来安装:
sudo zypper refresh && sudo zypper install cryptsetup
在基于Arch的发行版上,可以使用该命令:
sudo pacman -S cryptsetup
查找分区的块设备名称
输入下列命令:
lsblk
图3
在图中提供的示例中,存储设备是“vda”。“vda1”到“vda3”是分区。
想找到你准备好的分区,记住为其保留的大小。你会在没有挂载点(mountpoint)的分区中找到它。以你的情况为例,它可能是“/dev/sda2”,而不是“/dev/vda3”。
加密分区将覆盖上面的数据(如果有的话),这意味着如果你搞错了设备名称,最终可能破坏有用的数据。想确保设备名称无误,可以安装GParted,查看分区布局。设备名称会在图形用户界面中列出来。从实时系统启动时,别使用你在GParted中看到的名称。实时系统中显示的布局与你从安装的发行版引导时看到的布局会不一样。
还有另一种方法可以确保你不会写错到块设备上。试着挂载块设备。通常,它会拒绝挂载,因为它上面没有文件系统。
重要提示:请记住始终将“vda3”换成你设备的名称:
sudo mount /dev/vda3 /mnt
以你的情况为例,该命令可能是sudo mount /dev/sda2 /mnt或别的命令。
这是你应该看到的信息。
图4
设置LUKS标头
一旦你确信有了正确的设备名称,可以为分区添加LUKS标头。
sudo cryptsetup luksFormat /dev/vda3
键入“YES”,然后为加密分区选择一个强密码。要求验证密码时,请键入相同的密码。
在分区上创建文件系统
你要将该物理设备映射到虚拟设备。写入到虚拟设备上的内容先经过加密,之后存储到物理设备上。
sudo cryptsetup luksOpen /dev/vda3 encrypted-partition
分区需要文件系统才有用。使用该命令创建一个ext4文件系统:
sudo mkfs.ext4 /dev/mapper/encrypted-partition
图5
挂载加密分区
创建你将从分区挂载文件系统的目录。
mkdir ~/encrypted-storage
挂载文件系统:
sudo mount /dev/mapper/encrypted-partition ~/encrypted-storage
更改到该目录:
cd ~/encrypted-storage
眼下,只有root用户可以在这里写入。为你的用户授予写入到该文件系统的权限,因此让它成为上层目录的所有者。拷贝粘贴整个命令,包括末尾的“.”。
sudo chown $USER:$USER .
限制其他用户读取或写到该目录。
chmod o= .
这时,大多数文件管理器应该在界面中显示新的加密设备。这显示了它在Thunar文件管理器中的样子,这是XFCE桌面环境中使用的默认文件管理器。
图6
如果卷未挂载,你点击它时会要求你输入卷密码和sudo密码。卷会自动挂载,你就能够浏览它。挂载点与“~/encrypted-storage”会不一样,它可能类似“/media/user/f42f3025-755d-4a71-95e0-37eaeb761730/”。
这不重要;你之前设置的权限仍然适用。重要的是记住完成卷的使用后鼠标右击并卸载。卸载和关闭虚拟设备可确保没人可以从加密分区读取数据,甚至从操作系统读取数据。
如果由于某种原因,你的文件管理器不支持该功能,可以从终端挂载。
sudo cryptsetup luksOpen /dev/vda3 encrypted-partition sudo mount /dev/mapper/encrypted-partition ~/encrypted-storage
现在你可以进入到文件管理器中的“/home/username/encrypted-storage”来访问该卷。访问完后,挂载文件系统并关闭虚拟设备:
cd && sudo umount /dev/mapper/encrypted-partition sudo cryptsetup luksClose /dev/mapper/encrypted-partition
结论