Linux高级安装指南:dm-crypt加密
之前这篇文章是基础安装指南,讲解了如何从安装镜像安装Arch Linux,请务必熟悉。
对于很多Linux发行版来说,都有自带的图形化界面与自动安装,所以本篇主要针对Arch Linux的手动安装。
介绍
Windows里面有一个功能,叫做BitLocker,作用是加密分区。为什么要加密分区呢?
因为电脑对用户的PIN锁是依靠操作系统来生效的,而如果从另一个系统启动,那么本系统的所有保护措施都不会生效,因为系统压根没启动。
为了解决这个问题,就需要对分区进行加密,这样即使能够从另一个系统启动,也无法获取本系统的数据。
而Linux里也有类似的东西,那就是dm-crypt。
dm-crypt 是 Linux 内核的设备映射器加密目标。
它是 Linux 内核中的一个透明磁盘加密子系统,以设备映射器目标的形式实现,并可堆叠在其他设备映射器转换之上。因此,它可以加密整个磁盘(包括可移动介质)、分区、软件 RAID 卷、逻辑卷以及文件。它呈现为一个块设备,可用于支持文件系统、交换空间或作为 LVM 物理卷。
一、加密分区
首先,跟所有的安装步骤一样,你需要先用cfdisk或类似的工具对磁盘进行分区。
你至少要有两个分区,分别是引导分区和根文件系统分区,其中,我们只对根文件系统分区进行加密。
dm-crypt的核心命令是cryptsetup,首先用它对分区进行加密:
cryptsetup luksFormat /dev/<根文件系统分区>
输入命令后,它会首先询问你是否确定,输入大写YES即可。
接着输入密码,等待一会,就能完成加密。
接下来我们需要对这个分区进行操作,所以需要先解密:
cryptsetup open /dev/<根文件系统分区> root
接下来,/dev/mapper/root就代表了解密后的分区。
像往常一样对它进行格式化与挂载即可。
二、配置系统
1.配置mkinitcpio
首先,需要先配置mkinitcpio,用文本编辑器打开/etc/mkinitcpio.conf。
接着找到这一行:
HOOKS=(base ... block filesystem)
接着在block后面,filesystem前面添加参数sd-encrypt,如下所示:
HOOKS=(base ... block sd-encrypt filesystem)
接着通过:
mkinitcpio -P
重新生成
2.配置内核参数
接着,可以发现一个问题,根文件系统是处于加密状态的,那么该怎么启动系统呢?我们可以通过配置内核参数让它在启动时自动解密。
接下来将以GRUB为例。
首先需要先安装一个终端工具tmux,然后运行:
tmux
就会发现终端页面变了,接着同时按下Ctrl+B,然后再按下",就会发现终端分成了上下两个。
在一个终端中输入:
blkid /dev/<根文件系统分区>
注意,一定要输入原始的根文件系统的,而不是/dev/mapper/root,因为我们要解密的是原始的。
它会输出一行信息,里面有一串以UUID开头的信息。
接着按下Ctrl+B,然后再按下方向键切换到另一个终端。
然后编辑/etc/default/grub,找到这么一行:
GRUB_CMDLINE_LINUX=""
接着在引号里输入:
rd.luks.name=<你刚才看到的UUID>=root root=/dev/mapper/root
然后保存并退出,输入:
grub-mkconfig -o /boot/grub/grub.cfg
最后重启,就能正常进入系统了。
三、自动解密
但是有个问题,那就是在进入系统的时候,会弹出一个命令行,让你输入密码,这就有点烦了,所以接下来配置自动解密。
(注意:以下方法会暴露密钥文件,建议改用TPM)
首先输入:
dd if=/dev/urandom of=/root/keyfile bs=512 count=4
就会在/root下创建一个名为keyfile的密钥文件。
接着将它添加到LUKS:
cryptsetup luksAddKey /dev/<根文件系统分区> /root/keyfile
systemd 在 initramfs 阶段只读取/etc/crypttab.initramfs,所以需要编辑它。
首先进入tmux:
tmux
然后获取加密分区的UUID:
blkid /dev/<根文件系统分区>
然后跟之前一样,通过先按Ctrl+B,然后再按”的方式进入另一个窗格。
编辑/etc/crypttab.initramfs,输入:
root UUID=<你刚刚看到的UUID> /root/keyfile luks
最后执行:
mkinitcpio -P
这样就完成了配置。
但是你会发现一个问题:在要解密的时候,密钥文件位于根文件系统,但是这个时候根文件系统还没有被解密。
所以再次转到/etc/mkinitcpio.conf,找到这一行:
FILES=()
之后加入密钥路径,如下所示:
FILES=(/root/keyfile)
最后再次执行:
mkinitcpio -P
这样它就会被打包进镜像。
最后重启系统,如果没有问题的话,就会自动解密,并进入登陆界面。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)