之前这篇文章是基础安装指南,讲解了如何从安装镜像安装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

这样它就会被打包进镜像。

最后重启系统,如果没有问题的话,就会自动解密,并进入登陆界面。

 

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐