从前有一个摄影师,他不懂加密重要文件,也不懂修电脑,结果你懂的。以下就介绍下linux的加密方法及eCryptFS;
加密的类型
我们基本上有两种不同的方法可以对文件和目录进行加密。一种方法是,文件系统级加密,只有某些文件或目录(比如/home/alice)选择性地加密。在我看来,这是一种理想的入门方法。你没必要重新安装一切来启用或测试加密。不过,文件系统级加密存在一些缺点。比如说,许多现代的应用程序将文件(或文件的部分内容)缓存在硬盘中的未加密区域,比如交换分区、/tmp和/var文件夹,它们会导致隐私泄密。
另一种方法是所谓的全磁盘加密,这意味着整个磁盘都经过了加密(主引导记录可能除外)。全磁盘加密在物理磁盘层面实现;写入到磁盘上的每个比特数据都经过了加密,从磁盘读取的任何数据自动实时解密。这可以防止任何人可能未经授权就访问未加密的数据,并且确保整个文件系统里面的所有数据都经过了加密,包括交换分区或任何临时缓存的数据。
可用的加密工具
在Linux中实施加密机制有几种办法。我在本教程中将介绍一种选择:eCryptFS堆叠加密文件系统工具。下面整理出了几种可用的Linux加密工具,仅供参考。
文件系统级加密
•EncFS:这是尝试加密的最容易的方法之一。EncFS作为堆叠文件系统来运行,所以你只要创建一个加密的文件夹,将它挂载到文件夹上即可使用。
相关链接:http://www.arg0.net/encfs
•eCryptFS:作为一款与POSIX兼容的加密文件系统,eCryptFS的工作方式与EncFS如出一辙,所以你得挂载它。
相关链接:http://ecryptfs.org
全磁盘加密
•Loop-AES:这是最古老的磁盘加密方法。它运行起来速度很快,可以在旧系统(比如内核2.0分支版本)上使用。
相关链接:http://sourceforge.net/projects/loop-aes/
•DMCrypt:现代Linux内核支持的最常见的磁盘加密方案。
相关链接:https://code.google.com/p/cryptsetup/wiki/DMCrypt
•CipherShed:这是现已停止开发的TrueCrypt磁盘加密软件的开源分支版本。
相关链接:https://ciphershed.org
eCryptFS的基础知识简介
eCryptFS是一种堆叠加密文件系统,自2.6.19以来,它就得到Linux内核的支持(作为ecryptfs模块)。用eCryptFS加密的伪文件系统挂载到你现有的文件系统上。它在EXT文件系统系列及其他文件系统(比如JFS、XFS、ReiserFS和Btrfs,甚至NFS/CIFS共享区)上运行起来非常顺畅。
1 安装eCryptFS
安装到Debian、Ubuntu或衍生版本上:
$ sudo apt-get install ecryptfs-utils
注意:如果你决定在Ubuntu安装过程中加密你的主目录,就要确保eCryptFS应该已经安装。
安装到CentOS、RHEL或Fedora上:
# yum install ecryptfs-utils
安装到Arch Linux上:
$ sudo pacman -S ecryptfs-utils
为了稳妥起见,安装程序包后,装入eCryptFS内核模块是个好的做法:
$ sudo modprobe ecryptfs
配置eCryptFS
现在不妨运行eCryptFS配置工具,开始加密某个目录:
2 创建登录密码和挂载密码
ecryptfs-setup-private
如下图所示:
3 挂载私人文件
a) 创建文件夹 mkdir /root/tPrivate
b) 修改文件夹权限,使其他人无法访问这个文件夹 chmod 700 /root/tPrivate
c) 用ecrypt挂载文件夹(加密) mount -t ecryptfs /root/tPrivate /root/tPrivate
d) 在挂载过程中会遇到询问提示
首先需要输入挂载密码(不同于登录密码)
然后需要选择密钥计算方式(直接回车为默认)
接着需要输入加密长度(直接回车为默认)
接着需要选择是否允许将未加密文件放入此文件夹中(默认为不允许)
此时提示挂载成功
4)测试
a)创建文件,并输入内容,例如:gedit /root/private/test 输入内容“this is a test file content”。
b)查看文件,输入 cat /root/private/test 会看到 this is a test file content 字样
c)卸载文件,输入"umount /root/private"
d)再次查看文件内容,输入cat /root/private/test,会看到乱码。
(5)快速挂载
以后每次开机后访问加密数据前都需要重新挂载,你可以使用sudo mount -t ecryptfs ~/company_secret ~/company命令来挂载,但每次都要手工输入一堆选项也挺烦人的。为了以后方便挂载,在~/.bashrc中加入别名:
alias mount_company="sudo mount -t ecryptfs $HOME/company_secret $HOME/company -o ecryptfs_cipher=aes,ecryptfs_key_bytes=16,ecryptfs_enable_filename_crypto=y,ecryptfs_passthrough=n,ecryptfs_fnek_sig=cbd6dc63028e5602(需从前面记录)"
以后每次使用前只需要执行mount_company即可:
zhouzm@zhouzm:~$ mount_company
[sudo] password for zhouzm:(管理员密码)
Passphrase:(加密密码)
Attempting to mount with the following options:
ecryptfs_unlink_sigs
ecryptfs_fnek_sig=cbd6dc63028e5602
ecryptfs_key_bytes=16
ecryptfs_cipher=aes
ecryptfs_sig=cbd6dc63028e5602
Mounted eCryptfs
zhouzm@zhouzm:~$ cat company/test
123456
(6) 重装系统或移动数据
你只需要记住加密密码和ecryptfs_fnek_sig参数,则即使你要重装系统或移动数据,也可以用同样的命令对数据进行解密并挂载。