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,设定内核启动时的IPIP=<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中
电脑 电脑