云网牛站
所在位置:首页 > Linux安全 > 使用luks进行全硬盘加密的方法

使用luks进行全硬盘加密的方法

2019-03-10 10:03:18作者:吉青稿源:云网牛站

本文介绍如何使用LUKS(Linux Unified Key Setup)在启用UEFI的系统上安装Arch Linux并进行全硬盘加密。

使用luks进行全硬盘加密的方法

 

简介

LUKS是一种磁盘加密规范,可帮助你在一个捆绑包中实现文件加密,磁盘加密和数据加密。

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

print

 

配置LUKS

下一步是加载内核模块以使用luks安装Arch Linux,在使用cryptsetup之前,请务必确保已加载dm_crypt内核模块:

modprobe dm-crypt 

modprobe dm-mod

然后继续使用cryptseup命令创建加密设备,Cryptsetup是与dm-crypt接口的命令行工具,用于创建,访问和管理加密设备。

Cryptsetup支持依赖Linux内核设备映射器和加密模块的不同加密类型。

该工具使用如下:

# cryptsetup <OPTIONS> <action> <action-specific-options> <device> <dmname>

通过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加密设备,我们需要打开设备作为映射<name>,语法是:

# cryptsetup open <device> <name>

注解:

<name>是在/dev/mapper下创建的设备。

<device>是加密设备。

所以我的看起来如下:

# 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/<partition>:devicemapper_name cryptkey=<path>

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

至此,目的达成。

进一步阅读:安装及使用Arch Linux/Manjaro系统中的AUR助手yay

 

相关主题

在VMWare虚拟机中安装Arch Linux

精选文章
热门文章