加密分区
在Debian系的系统中使用cryptsetup,首先要确保你的系统中已经正确安装了cryptsetup这个包
假设我们要加密/DEV/SDA5这个分区,因为这个分区中存放着一些重要的数据,我们不想让其他人可以随意访问他。
首先执行以下命令,这会为你创建一个加密的数据分区:
然后系统会提示你输入一个大写的YES来确认你的操作,然后会让你输入密码。完成之后,这个分区就已经被加密了。
使用加密后的分区
要想使用加密过的分区,首先需要使用之前设置的密码对其解密才行。
该命令会提示你输入密码解密该分区,成功之后,系统的/DEV/MAPPER目录下出现一个CRYPT_DATA块设备文件,
该文件的文件名就是上一步LUSKOPEN时的最后一个参数。
然后就可以对这个快设备文件进行操作,比如建立文件系统、挂载、读写等,就像普通的快设备文件一样。
sudo mkfs.ext4 /dev/mapper/crypt_data
sudo mount /dev/mapper/crypt_data /mnt
注意,这个时候/DEV/SDA5这个文件已经不能进行正常的建立文件系统,挂载等操作,而仅仅用来加解密,
相应的文件系统操作都应该对/DEV/MAPPER目录下生成的文件来进行。
当进行完数据操作之后,通过以下命令来卸载分区,使分区重新回到加密状态。
sudo umount /dev/sda5
sudo cryptsetup luksClose cry_data
根分区加密(不包括/BOOT)
使用KYEFILE的普通系统分区加密
如果系统分区/VAR是一个单独的分区,假设是/dev/sda5,并且该分区是使用cryptsetup加密过的,
那么应该如何使用keyfile来在开机时自动进行分区解密呢?
创建keyfile
首先创建一个keyfile文件。
sudo dd if=/dev/urandom of=/root/autounlock.key bs=512 count=4
sudo chmod 0400 /root/autounlock.key
用keyfile加密分区
sudo cryptsetup luksAddKey /dev/sda5 /root/autounlock.key[/code]
**修改crypttab文件**
最后,修改/etc/crypttab文件,在keyfile那一部分加入/root/autounlock.key,/etc/crypttab配置文件的结构如下所示:
[code]<target name> <source device> <key file> <options>[/code]
**使用KEYFILE的根分区加密(不包括/BOOT)**
假设你已通过上一节的方法安装了全盘加密(不包括/boot)的Debian系统,那么接下来介绍如何使用keyfile来进行全盘加密的自动解密。
用来解密的keyfile被存储在initramfs中。下面是具体步骤。
假设下面是现在的系统布局状况:
- /dev/sda1 /boot 不加密
- /dev/sda2 / 加密
**生成keyfile**
首先生成一段随机的二进制数据来作为我们的keyfile
[code]sudo dd if=/dev/urandom of=/root/autounlock.key bs=512 count=4
sudo hmod 0400 /root/autounlock.key[/code]
**使用keyfile加密根分区
**
然后将使用这个keyfile来加密系统分区
[code]sudo cryptsetup luksAddKey /dev/sda2 /root/autounlock.key --key-slot 1[/code]
可以通过以下命令来进一步查看系统分区的加密状况
[code]sudo cryptsetup luksDump /dev/sda2
**initramfs中加载keyfile的脚本
**
创建一个新的脚本,用来在initramfs中将这个keyfile导入系统。
以下是getinitramfskey.sh文件的内容
#!/bin/busybox ash
KEY="${1}"
if -f "${KEY}" ]; then
cat "${KEY}"
else
PASS=/bin/plymouth ask-for-password --prompt="Key not found. Enter LUKS Password: "
echo "${PASS}"
fi
给这个文件加上可执行权限:
创建update-initramfshook脚本
然后再创建一个新的shell脚本,这个脚本在系统创建initramfs时被调用,作用是加载keyfile到initramfs中。
sudo /etc/initramfs-tools/hooks/loadinitramfskey.sh
loadinitramfskey.sh的内容:
#!/bin/sh
/etc/crypttab.
PREREQ=""
prereqs() {
echo "$PREREQ"
}
case "$1" in
prereqs)
prereqs
exit 0
;;
esac
. "${CONFDIR}/initramfs.conf"
. /usr/share/initramfs-tools/hook-functions
if ! -f "${DESTDIR}/lib/cryptsetup/scripts/getinitramfskey.sh" ]; then
if ! -d "${DESTDIR}/lib/cryptsetup/scripts" ]; then
mkdir -p "${DESTDIR}/lib/cryptsetup/scripts"
fi
cp /lib/cryptsetup/scripts/getinitramfskey.sh ${DESTDIR}/lib/cryptsetup/scripts/
fi
if ! -d "${DESTDIR}/root/" ]; then
mkdir -p ${DESTDIR}/root/
fi
cp /root/autounlock.key ${DESTDIR}/root/
同样地,给这个文件加上可执行权限:
修改/etc/crypttab配置
修改/etc/crypttab文件,使之看起来像下面的样子
重新生成initramfs
最后,需要执行命令来重新生成initramfs,
这样,重启系统之后,你会发现,此时已经不再需要输入密码了,系统已经使用initramfs中存储的keyfile文件来自动解密了系统分区。