之前这篇文章是基础安装指南讲解了如何从安装镜像安装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就会发现终端页面变了接着同时按下CtrlB然后再按下就会发现终端分成了上下两个。在一个终端中输入blkid /dev/根文件系统分区注意一定要输入原始的根文件系统的而不是/dev/mapper/root因为我们要解密的是原始的。它会输出一行信息里面有一串以UUID开头的信息。接着按下CtrlB然后再按下方向键切换到另一个终端。然后编辑/etc/default/grub找到这么一行GRUB_CMDLINE_LINUX接着在引号里输入rd.luks.name你刚才看到的UUIDroot root/dev/mapper/root然后保存并退出输入grub-mkconfig -o /boot/grub/grub.cfg最后重启就能正常进入系统了。三、自动解密但是有个问题那就是在进入系统的时候会弹出一个命令行让你输入密码这就有点烦了所以接下来配置自动解密。注意以下方法会暴露密钥文件建议改用TPM首先输入dd if/dev/urandom of/root/keyfile bs512 count4就会在/root下创建一个名为keyfile的密钥文件。接着将它添加到LUKScryptsetup luksAddKey /dev/根文件系统分区 /root/keyfilesystemd 在 initramfs 阶段只读取/etc/crypttab.initramfs所以需要编辑它。首先进入tmuxtmux然后获取加密分区的UUIDblkid /dev/根文件系统分区然后跟之前一样通过先按CtrlB然后再按”的方式进入另一个窗格。编辑/etc/crypttab.initramfs输入root UUID你刚刚看到的UUID /root/keyfile luks最后执行mkinitcpio -P这样就完成了配置。但是你会发现一个问题在要解密的时候密钥文件位于根文件系统但是这个时候根文件系统还没有被解密。所以再次转到/etc/mkinitcpio.conf找到这一行FILES()之后加入密钥路径如下所示FILES(/root/keyfile)最后再次执行mkinitcpio -P这样它就会被打包进镜像。最后重启系统如果没有问题的话就会自动解密并进入登陆界面。