胡乱翻译自On Disk Encryption with Red Hat Enterprise Linux,个人笔记,随便看看。
硬盘加密
目标
我们的愿景是:在数据不在使用时保密硬盘数据。
情景
- 电脑丢失
- U盘丢失
- 一个月才用一次的个人金融信息
- 敏感隐私数据存储
不保护
- 应用不断读取和写入的数据(依靠权限控制、SElinux等)
- 在互联网上传输的数据(TLS)
- 键盘输入嗅探
两种基本方式
dm-crypt: 块层级的加密。- 加密整个卷
- 通过设备映射实现
- 把加密后的块设备以虚拟明文块设备呈现
eCryptfs: 文件系统加密- 加密单个文件
- 作为文件系统层实现
- 呈现明文文件
dm-crypt和LUKS块设备加密
dm-crypt和LUKS块设备加密
dm-crypt提供块加密能力LUKS:Linux Unified Key Setup。一种硬盘加密标准。定义密钥管理和在硬盘上的格式。
应用场景1:保护用户文件
- 加密
/home分区(比如’/dev/sda3’) - 让所安装的OS不加密
演示
警告:不要试,这个例子就看看。会摧毁/home下数据你可以试试下个例子首先别忘了加载必要的内核模块
modprobe aes
modprobe dm_crypt
初始化随机数据
dd if=/dev/urandom of=/dev/sda3格式化LUKS加密层:
cryptsetup luksFormat /dev/sda3打开LUKS加密层:
cryptsetup luksOpen /dev/sda3 home_plaintext格式化文件系统:
mkfs.ext4 /dev/mapper/home_plaintext挂载准备好的文件系统,写入
/etc/fstab:/dev/mapper/home_plaintext /home ext4 defaults 0 0在加密硬盘上注册,写入
/etc/crypttabhome_plaintext /dev/sda3
应用场景2:一个文件加密容器
仅仅加密文件。
演示:
创建一个100M的文件:
dd if=/dev/urandom of=crypt.img bs=1M count=100把文件和设备连接起来:
losetup /dev/loop0 crypt.img格式化LUKS加密层:
cryptsetup luksFormat /dev/loop0打开LUKS加密层:
cryptsetup luksOpen /dev/loop0 container格式化文件系统(可以先用
dm-table或者ls /dev/mapper来检查)。mkfs.ext4 /dev/mapper/container挂载文件系统
mount /dev/mapper/container /mnt这时就可以向
/mnt下写入想加密的文件了。使用完毕后,卸载分区
umount /mnt关闭luks磁盘:
cryptsetup luksClose container设备文件脱钩:
losetup -d /dev/loop0
这时你的文件就加密保存在container中。
ecrypt-fs
eCryptfs文件系统
场景:创建一个隐私文件夹
- 创建一个
~/Private内的文件是加密的。 ~/Private外的文件都是明文的
展示
首先别忘了加载内核模块,如果没有默认加载的话:
modprobe ecryptfs
创建一个表文件夹’~/Private’和里文件夹’~/.Private’
mkdir -m 700 ~/.Private mkdir -m 500 ~/Private将里文件夹挂载到表文件夹上:
mount -t ecryptfs .Private Private对表文件夹操作写入等等
卸载表文件夹,只剩下加密后的里文件夹
umount ~/Private
为最终用户创建私密文件夹
ecryptfs-util提供了方便的脚本:
ecryptfs-setup-privateecryptfs-mount-privateecryptfs-umount-private
提供了几个便利:
- 提升挂载和卸载权限
- 需要是组
ecryptfs中的成员 - 用登录密码封装FEKEK(文件加密密钥密钥)
暂不讨论,我这里出错了。