为了保护电脑中的重要文件,需要将其加密,以防止重要资料泄露。类似用户登陆密码这些是没有用的,攻击者也许无法登陆你的电脑,但是可以使用U盘启动,直接看你硬盘上面的文件,甚至直接把硬盘盗走。
那么如何应对这种情况呢?
通常有以下几种方案。
Windows NTFS EFS
就是NTFS文件系统自带的加密,右键设置文件属性,加密即可。是一种基于文件和目录的加密方案。很灵活,速度比全盘加密略慢。主要是够灵活,安全性也可以,目前是我在Windows下使用的方案。
Windows Bitlocker
全盘加密方案,加密整个硬盘,需要TPM芯片,当然也可以修改组策略来强制使用密码或证书。如果不使用TPM芯片,每次开机都要输入密码或者插入存有证书的U盘,用起来就不够方便了。TPM芯片据说是留有后门的,不过一般人用也不影响。
Linux LUKS
类似Bitlocker的全盘加密,但是不如Bitlocker使用起来方便。虽然也支持和TPM配合使用,但是Linux对TPM支持有限,不是开箱即用。
Linux eCryptfs
类似EFS,优点是任何文件系统都能用,但是缺乏维护,在比较新的系统上,比如Ubuntu18.04有BUG,已经快要被淘汰了。
跨平台 VeraCrypt
类似Bitlocker,功能与操作系统的集成度不如Bitlocker。
本文主要介绍的是另外一种方案:
fscrypt
这是一个Linux filesystem encryption的管理工具。用起来类似于Windows的EFS,方便灵活,不依赖TPM芯片。
以下是在Ubuntu 18.04上的配置方法。
前提条件:
- 必须是
ext4
文件系统 - 有单独的
/boot
分区。 - 内核的 page size (执行
getconf PAGE_SIZE
查看) 和文件系统的 block size (执行tune2fs -l /dev/device | grep 'Block size'
查看) 必须相同(Ubuntu 18.04 默认也是) - 内核版本4.0以上(Ubuntu 18.04是)
安装
sudo apt-get install fscrypt libpam-fscrypt
修改/etc/pam.d/systemd-user
,在对应位置加上中间那一行pam_keyinit.so
:
session required pam_loginuid.so
session optional pam_keyinit.so force revoke
session required pam_limits.so
配置
#开启文件系统加密支持
tune2fs -O encrypt /dev/device
#初始化fscrypt配置文件
sudo fscrypt setup
#可能需要root,启用加密
fscrypt setup /mnt/disk
#创建要加密的文件夹
mkdir /mnt/disk/dir1
#加密文件夹
fscrypt encrypt /mnt/disk/dir1
按照提示操作,选第一项Your login passphrase (pam_passphrase)
可以实现登陆自动解密。