胡乱翻译自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
  1. 初始化随机数据

     dd if=/dev/urandom of=/dev/sda3
    
  2. 格式化LUKS加密层:

     cryptsetup luksFormat /dev/sda3
    
  3. 打开LUKS加密层:

     cryptsetup luksOpen /dev/sda3 home_plaintext
    
  4. 格式化文件系统:

     mkfs.ext4 /dev/mapper/home_plaintext
    
  5. 挂载准备好的文件系统,写入/etc/fstab

     /dev/mapper/home_plaintext  /home       ext4    defaults        0   0
    
  6. 在加密硬盘上注册,写入/etc/crypttab

     home_plaintext      /dev/sda3
    

应用场景2:一个文件加密容器

仅仅加密文件。

演示:

  1. 创建一个100M的文件:

     dd if=/dev/urandom of=crypt.img bs=1M count=100
    
  2. 把文件和设备连接起来:

     losetup /dev/loop0 crypt.img
    
  3. 格式化LUKS加密层:

     cryptsetup luksFormat /dev/loop0
    
  4. 打开LUKS加密层:

     cryptsetup luksOpen /dev/loop0 container
    
  5. 格式化文件系统(可以先用dm-table或者ls /dev/mapper来检查)。

     mkfs.ext4 /dev/mapper/container
    
  6. 挂载文件系统

     mount /dev/mapper/container /mnt
    
  7. 这时就可以向/mnt下写入想加密的文件了。

  8. 使用完毕后,卸载分区

     umount /mnt
    
  9. 关闭luks磁盘:

     cryptsetup luksClose container
    
  10. 设备文件脱钩:

    losetup -d /dev/loop0
    

这时你的文件就加密保存在container中。

ecrypt-fs

eCryptfs文件系统

场景:创建一个隐私文件夹

  • 创建一个~/Private内的文件是加密的。
  • ~/Private外的文件都是明文的

展示

首先别忘了加载内核模块,如果没有默认加载的话:

  modprobe ecryptfs
  1. 创建一个表文件夹’~/Private’和里文件夹’~/.Private’

     mkdir -m 700 ~/.Private
     mkdir -m 500 ~/Private
    
  2. 将里文件夹挂载到表文件夹上:

     mount -t ecryptfs .Private Private
    
  3. 对表文件夹操作写入等等

  4. 卸载表文件夹,只剩下加密后的里文件夹

     umount ~/Private
    

为最终用户创建私密文件夹

ecryptfs-util提供了方便的脚本:

  • ecryptfs-setup-private
  • ecryptfs-mount-private
  • ecryptfs-umount-private

提供了几个便利:

  • 提升挂载和卸载权限
  • 需要是组ecryptfs中的成员
  • 用登录密码封装FEKEK(文件加密密钥密钥)

暂不讨论,我这里出错了。



blog comments powered by Disqus