本文介绍如何使用LUKS(Linux Unified Key Setup)在启用UEFI的系统上安装Arch Linux并进行全硬盘加密。
简介
LUKS是一种磁盘加密规范,可帮助你在一个捆绑包中实现文件加密,磁盘加密和数据加密。
LUKS可以帮助保护你的驱动器免受盗窃等攻击,但是一旦解锁,它就无法保护你的数据免遭访问,它可以与其他加密软件一起使用,以实现数据安全性。
设置磁盘分区
我的分区方案将/dev/sda1作为efi分区,/dev/sda2作为启动分区,/dev/sda3作为LVM物理卷,/dev/arch/root作为root分区来安装Arch Linux,/dev/arch/home作为主分区,/dev/arch/swap作为交换分区。
分区选择的工具是Parted(参考:怎样用parted管理硬盘分区),你也可以将gdisk用于efi或fdisk用于MBR,请将gpt标签替换为mbr以获取正确的磁盘标签类型:
parted /dev/sda
mklabel gpt
mkpart ESP fat32 1MiB 200MiB
set 1 boot on
name 1 efi
mkpart primary 200MiB 800MiB
name 2 boot
mkpart primary 800MiB 100%
set 3 lvm on
name 3 lvm
配置LUKS
下一步是加载内核模块以使用luks安装Arch Linux,在使用cryptsetup之前,请务必确保已加载dm_crypt内核模块:
modprobe dm-crypt
modprobe dm-mod
然后继续使用cryptseup命令创建加密设备,Cryptsetup是与dm-crypt接口的命令行工具,用于创建,访问和管理加密设备。
Cryptsetup支持依赖Linux内核设备映射器和加密模块的不同加密类型。
该工具使用如下:
# cryptsetup
通过device-mapper访问的设备称为blockdevices。
可以使用以下方法检查可用选项:
$ cryptsetup --help
现在让我们在/dev/sda3上创建一个新的LUKS设备:
# cryptsetup luksFormat -v -s 512 -h sha512 /dev/sda3
使用的选项:
luksFormat:格式化LUKS设备。
-v,-verbose:显示更详细的错误消息。
-s,-key-size:加密密钥的大小,本例中为512位。
-h,-hash:用于从密码短语创建加密密钥的哈希。
当你执行上面的命令时,将收到一条警告消息,只需键入YES继续,然后输入并验证要使用的密码。
现在我们已经创建了luks加密设备,我们需要打开设备作为映射,语法是:
# cryptsetup open
注解:
是在/dev/mapper下创建的设备。
是加密设备。
所以我的看起来如下:
# cryptsetup open /dev/sda3 luks_lvm
LVM配置
对于那些刚接触LVM的人来说,LVM的基本构建块是:
1、物理量(PV)
在可以拥有卷组的硬盘(甚至磁盘本身或环回文件)上进行分区。
它有一个特殊的标题,分为物理范围。
将物理卷视为用于构建硬盘的大型构建块。
2、卷组(VG)
用作存储卷的物理卷组(作为一个磁盘)。
它们包含逻辑卷。
将卷组视为硬盘驱动器。
3、逻辑音量(LV)
驻留在卷组中的“虚拟/逻辑分区”,由物理盘区组成。
将逻辑卷视为普通分区。
4、物理范围(PE)
物理卷中可以分配给逻辑卷的最小大小(默认为4MiB)。
将物理盘区视为可以分配给任何分区的磁盘部分。
下面进行配置部分。
创建物理卷:
pvcreate /dev/mapper/luks_lvm
创建名为arch的卷组:
vgcreate arch /dev/mapper/luks_lvm
为root、home和swap分区创建逻辑卷:
lvcreate -n home -L 70G arch
lvcreate -n root -L 120G arch
lvcreate -n swap -L 1G -C y arch
格式化分区:
mkfs.fat -F32 /dev/sda1
mkfs.ext4 /dev/sda2
mkfs.btrfs -L root /dev/mapper/arch-root
mkfs.btrfs -L home /dev/mapper/arch-home
mkswap /dev/mapper/arch-swap
安装分区:
swapon /dev/mapper/arch-swap
swapon -a ; swapon -s
mount /dev/mapper/arch-root /mnt
mkdir -p /mnt/{home,boot}
mount /dev/sda2 /mnt/boot
mount /dev/mapper/arch-home /mnt/home
mkdir /mnt/boot/efi
mount /dev/sda1 /mnt/boot/efi
确认是否所有装置都正确安装:
lsblk -f
安装Arch Linux
安装基础系统:
pacstrap /mnt base base-devel efibootmgr vim dialog \
xterm btrfs-progs grub --noconfirm
生成fstab文件:
genfstav -U -p /mnt > /mnt/etc/fstab
切换到chroot环境:
arch-chroot /mnt /bin/bash
配置mkinitcpio:
vim /etc/mkinitcpio.conf
向下滚动,直到找到HOOKS部分,然后在filesystem之前添加行:
encrypt lvm2
Hooks由其名称引用,并按配置文件中HOOKS设置中存在的顺序执行,HOOKS行看起来像这样:
HOOKS="base udev autodetect modconf block encrypt lvm2 filesystems keyboard fsck"
生成新的initramfs映像:
mkinitcpio -v -p linux
安装grub并生成grub.cnf文件:
pacman -s grub --noconfirm
grub-install --efi-directory=/boot/efi
配置内核参数
为了启用加密的根分区,需要设置以下内核参数的子集,如果使用encrypt hook,请将选项添加到内核参数,要修改的文件是/etc/default/grub:
cryptdevice=/dev/:devicemapper_name cryptkey=
device是支持加密设备的设备的路径。
devicemapper_name是解密后为设备提供的设备映射器名称,将以/dev/mapper/devicemapper_name的形式提供。
例如:
GRUB_CMDLINE_LINUX_DEFAULT="quiet resume=/dev/mapper/swap \
cryptdevice=/dev/sda3:luks_lvm"
请注意,在生成引导配置之前,最好将相关参数添加到/etc/default/grub。
在启动时解锁根分区(可选)
要使用密钥文件在启动时解锁根文件系统,你必须生成密钥文件,为其提供适当的权限并将其添加为LUKS密钥:
dd if=/dev/urandom of=/crypto_keyfile.bin bs=512 count=10
chmod 000 /crypto_keyfile.bin
chmod 600 /boot/initramfs-linux*
cryptsetup luksAddKey /dev/sda3 /crypto_keyfile.bin
现在在mkinicpio.conf文件中的FILES指令下包含/crypto_keyfile.bin文件:
# vim /etc/mkinitcpio.conf
增加:
FILES=/crypto_keyfile.bin
重新生成ramdisk文件:
mkinitcpio -p linux
重新生成grub.cfg文件:
grub-mkconfig -o /boot/grub/grub.cfg
grub-mkconfig -o /boot/efi/EFI/arch/grub.cfg
安装后的配置
剩下的部分是安装必要的软件包,如Xorg服务器、pulseaudio、alsa实用程序、synaptics触摸板驱动程序、设置root密码、添加标准用户帐户、设置时区、添加aur和multilib存储库。
我写了一个简单的bash脚本来自动化这个过程,以下是如何使用脚本的过程:
pacman -S git --noconfirm
git clone https://github.com/jmutai/dotfiles.git
cp dotfiles/setup/pacman.conf /etc/pacman.conf
cp dotfiles/setup/live-setup.sh .
chmod +x live-setup.sh
./live-setup.sh
可以修改实时设置脚本以更改时区设置和系统主机名,可以使用你选择的桌面环境替换i3的安装,成功安装后,退出chroot环境,卸载分区并重新启动系统:
exit
umount -R /mnt
reboot
至此,目的达成。
相关主题