嗨玩手游网

全盘加密简介

一、LUKS 简介和部署

LUKS(Linux Unified Key Setup)为Linux下的磁盘加密规范,可实现跨平台的加密。

加密数据一定要做好数据自身和密钥的备份,密钥丢失之后无法通过任何手段恢复

加密方案简介

数据盘加密数据盘加密比较简略,正常设置加密之后使用 /etc/crypttab 配置自动解密即可全盘加密全盘加密分为两种,一种是不加密/boot,加密/和 swap。系统启动时正常读取kernel和initrd,解密/后正常启动;另外一种是由grub负责解密,这样/boot和/都可以加密。为了兼容性,一般采用不加密/boot,加密/的方案。

实际使用

二、数据盘加密使用lsblk确认需要加密的硬盘/分区名称执行cryptsetup luksFormat /dev/sdX进行加密

执行之前请确认需要加密的硬盘/分区不存在其他数据!!!

WARNING: Device /dev/sdX already contains a 'crypto_LUKS' superblock signature 警告意味着此磁盘/分区已经有一个luks加密卷,用 cryptsetup luksDump /dev/sdX 确认一下。

输入 YES 确认执行,接下来会要你输入口令,请谨慎输入正确的密码

为了兼容性,密码请使用7bit ASCII字符以避免不必要的编码问题

等待加密设置完毕之后,执行 cryptsetup open --type luks /dev/sdX data 并输入密码来打开加密数据盘。执行 mkfs.ext4 /dev/mapper/data 建立文件系统,mount /dev/mapper/data /mnt挂载加密盘。使用完毕之后,执行 umount /mnt卸载加密盘。执行 cryptsetup close data关闭加密盘,将密钥从内存中清除。

如果在加密盘上创建了lvm,除开卸载挂载点,你也需要卸载相关的lvm设备。

数据盘自动挂载

添加 keyfile

# 创建keyfile

dd if=/dev/random of=/path/to/keyfile bs=32 count=1

# 添加keyfile

cryptsetup luksAddkey /dev/sdX /path/to/keyfile

修改/etc/crypttab文件

#<target name> <source device> <key file> <options>

luks_crypt0 UUID=<分区UUID> /path/to/keyfile luks

分区UUID可以通过 blkid 或者 cryptsetup luksDump /dev/sdX 查看

keyfile 如果以明文存储在硬盘上则自动挂载加密毫无意义,此方式仅可以keyfile为远程/存放keyfile的系统分区已加密的情况使用。

三、全盘加密

安装系统的时候直接选择全盘加密即可,记住输入的密码。

为了兼容性,密码请使用7bit ASCII字符以避免不必要的编码问题

系统重启之后将会提示输入解锁密码,在控制台输入即可,系统将继续启动。

系统启动完毕之后,执行以下命令用于忘记密码之后的恢复

# keyfile 为统一恢复密钥,妥善保管

cryptsetup luksAddkey /dev/sdX /path/to/keyfile

# 以下命令供参考,可选执行

# 备份主密钥,妥善保管此文件

cryptsetup luksDump /dev/sdX --dump-master-key --master-key-file /path/to/masterkey

# 备份luks header,妥善保管此文件

cryptsetup luksHeaderBackup /dev/sdX --header-backup-file /path/to/headerfile

masterkey 为加密用的主密钥,和解锁密码一样重要。如果导出请直接写入到U盘,不要暂存

全盘加密只加密/分区,/boot并不加密否则grub将无常载入内核。

解密相关的模块已经在安装时打包进initramfs

启动时grub载入内核并执行,内核载入之后发现/为已加密分区,它会调用initramfs里面相关的dm-crypt模块解密分区并挂载,继续启动流程。

全盘加密之后系统启动效果如图

四、远程解密方案 (dropbear-initramfs)安装相关的软件包sudo apt install dropbear-initramfs console-setup修改 /etc/dropbear-initramfs/config,使其监听2222端口

换端口的原因主要是防止客户端known_hosts里面记录的dropbear公钥和系统本身的OpenSSH公钥冲突

DROPBEAR_CONFIG="-p 2222"

添加公钥如果还没有用于解锁硬盘的公钥,创建一个 ssh-keygen -t tsa -f .ssh/id_rsa_initramfs修改 /etc/dropbear-initramfs/authorized_keys,添加用于登录dropbear的公钥。为了兼容性考虑,请使用RSA。

不要忘记修改 authorized_keys 的权限为600

添加或修改 /etc/initramfs-tools/conf.d/ip,设定内核启动时的IP

IP=<IP地址>::<网关地址>:<子网掩码>::<网卡设备名>:off

执行 update-initramfs -u 更新 initramfs重启机器,等待一段时间后执行命令

vim decrypt_passwd # 写入解锁密钥

ssh root@<机器IP> -p 2222 -i .ssh/id_rsa_initramfs "echo -n \"$(cat decrypt_passwd)\" > /lib/cryptsetup/passfifo"

此时服务器应该已经解锁,继续启动流程

尽量不要在shell里输入密码以防被记录在history中

更多资讯
游戏推荐
更多+