Linux下的磁盘加密方法工具:ecryptfs企业级加密文件、文件夹和目录

在Linux中要实施加密,有几个可供选择的工具。在本教程中,我打算介绍其中一个: eCryptFS ,一个用户空间文件系统加密工具。下面提供了一个Linux上可用的加密工具摘要供您参考。随着智能手机的计算能力和存储能力的提高,手机中将会存放越来越多的私有数据,这些数据的泄密可能造成严重后果。手机信息安全一直是我们的重点之一,对于一些重要的功能我们要求鉴权后才能使用,但这只能挡住初级的黑客,只能防君子不能防小人,所以我们希望把重要的数据进行加密后再保存。为此,今天花了一点时间去了解Linux 磁盘加密的方法。

文件系统级别加密

  • EncFS :尝试加密的最简单方式之一。EncFS工作在基于FUSE的伪文件系统上,所以你只需要创建一个加密文件夹并将它挂载到某个文件夹就可以工作了。
  • eCryptFS :一个POSIX兼容的加密文件系统,eCryptFS工作方式和EncFS相同,所以你必须挂载它。
  • TrueCrypt: 现在已经停止开发和维护(迫于某种压力吧)

磁盘级别加密

  • Loop-AES :最古老的磁盘加密方法。它真的很快,并且适用于旧系统(如,2.0内核分支)。
  • DMCrypt :最常见的磁盘加密方案,支持现代Linux内核。
  • CipherShed :已停止的TrueCrypt磁盘加密程序的一个开源分支。

保护敏感数据不被泄漏成为人们关注的热点问题。入侵者除了直接盗取物理存储设备,还可以通过网络攻击来窃夺文件数据;而且,由于共享的需求,敏感数据会由多人访问,这也增大了泄漏的可能性。对数据或文件进行加密已经成为一种公认的比较成功的保护方法。事实上,人们早已开发了许多优秀的加密算法,如 DES、AES、RSA 等,并且有一些应用程序如 crypt 使用这些加密算法,用户通过这些工具手工地完成加密、解密的工作。由于这些应用程序操作麻烦、没有和整个系统紧密地结合而且容易受到攻击,因此一般用户并不愿意使用。

加密文件系统(比如eCryptfs)通过将加密服务集成到文件系统这一层面来解决上面的问题。加密文件的内容一般经过对称密钥算法加密后以密文的形式存放在物理介质上,即使文件丢失或被窃取,在加密密钥未泄漏的情况下,非授权用户几乎无法通过密文逆向获得文件的明文,从而保证了高安全性。与此同时,授权用户对加密文件的访问则非常方便。用户通过初始身份认证后,对加密文件的访问和普通文件没有什么区别,就好像该文件并没有被加密过,这是因为加密文件系统自动地在后台做了相关的加密和解密的工作。由于加密文件系统一般工作在内核态,普通的攻击比较难于奏效。还有一类系统级加密方案是基于块设备,与它们相比,加密文件系统具有更多的优势,例如:

  • 支持文件粒度的加密,也就是说,用户可以选择对哪些文件或目录加密(这些文件夹可相互包含)。而且,应用程序不用关心文件是否被加密,可以完全透明地访问加密文件。
  • 无需预先保留足够的空间,用户可以随时加密或恢复文件。
  • 对单个加密文件更改密钥和加密算法比较容易。
  • 不同的文件可以使用不同的加密算法和密钥,增大了破解的难度。
  • 只有加密文件才需要特殊的加密/解密处理,普通文件的存取没有额外开销。
  • 加密文件转移到别的物理介质上时,没有额外的加密/解密开销。
  • 附加一点,ecryptfs 的解密层存在于内存(内存不足时可能使用 到交换分区)。硬盘上面保存的只有加密数据。这样即使硬盘被偷了,使用数据还原软件也不可能得到 解密文件。不是像普通的加密软件、压缩软件把 解密文件缓存于硬盘上。你即使删除了,使用数据还原软件依然有可能得到 解密文件。

安装

sudo apt-get install ecryptfs-utils

然后就可以开始使用了。因为很简单使用命令界面就能解决问题,所以没有图形界面。但是不用担心,我会把每一步讲解清楚。 没有图形界面还有一个好处:隐蔽性高

使用举例

这里举个单独加密文件夹的例子,而不是按网上流行的方式:把主文件夹加密。我认为这种操作简单、独立涉及的东西少,效率高。

注:ubuntu安装时有个选项——加密用户文件夹,使用的就是该系统。

*1,新建一个测试文件夹:show 使用这个文件夹存放加密文件 命令:

sudo mount -t ecryptfs source show

mount 是挂载命令。-t 是指定文件类型。ecryptfs 就是我们使用的加密文件类型。 !这里换一个命令举例说明一下

sudo mount -t ecryptfs real_path ecryptfs_mounted_path

real_path 是真实存放数据的地方;ecryptfs_mounted_path 是指你要把文件夹挂载于哪里(具体位置可以随意)

推荐:ecryptfs_mounted_path 和 真实目录 real_path 一致,这样非授权用户不能通过原路径访问加密文件。

这里必须说一下挂载:很多人不理解
所谓挂载,可以理解为超级链接。比如说有两个文件夹     
a,b。a中有文件isa,b中有文件isb。
现在我们要把a挂载于b上,命令:mount a b
此时b已经变成了a 的链接。所有对b的访问实际上都指向了a。
比如我们打开b文件夹,看到的文件只有isa。而打开a文件夹,  文件还是isa
我们在b中存放一个新文件 isnew。
好了我们卸载这个挂载(取消这个超链接),命令:umount b
现在查看a文件夹,里面有文件isa isnew
查看b文件夹,里面只有isb
为使么说是超级链接呢,因为有个选项(其它选项我还不会) -t
它的意思是指定 文件夹类型(文件系统类型)。文件系统类型有很多,比如我们使用的ext4、ext3、fat32、ntfs……还有特殊的文件系统,比如 tmpfs(用内存 存文件)、ecryptfs(文件加密格)……
使用-t 就可以以指定文件格式进行“链接”,能查看、操作其它文件格式的文件了。这是普通连接做不到的。

*2,mount 需要root权限,我们使用 命令sudo ,来以root身份运行命令 结果如下:

passphrase:
(这是要你输入密码,自己编一个。一定要记住。另外密码是不会有任何显示的,输完回车就行)
select cipher:
(选择加密方式,不选默认是[aes]。最好记住自己的选择)
select key bytes:
(选择加密位数,不选默认是[16]。最好记住自己的选择)
enable plaintext passthrough(y/n) [n]:
(是否正常显示未经加密文件,默认是 n。以确保你不会误将秘密写入未经加密文件)
enable filename encryption (y/n) [n]:
(是否把文件名也进行加密,默认是 n。如果选择y,那么在没有解密 的情况下是无法列出文件夹内部的文件名。)

如果设置的密码是第一次使用,它会提示你密码被标识为[799d2f922c0f1f26] 。当然,你的密码标识肯定不会是这个。并且告诉你输入可能有误,因为/root/.ecryptfs/sig-cache.txt中没有相关记录。密码标识只存在于你现在的系统中,是怕你忘记密码,它会告诉你这个密码是否用过。因为ecryptfs在密码错误的情况下一样可以进行错误解密,实际上是另外一种形式的加密。要是不保存密码标识,我肯定盗资料的人会很头痛,记心不好的用户也一样。

 出现输入有误的警告后,会让你选择:
 Would you like to proceed with the mount (yes/no)? :
 (你是否希望继续进行挂载。)我们输入yes,来完成加密。
 Would you like to append sig [799d2f922c0f1f26] to
[/root/.ecryptfs/sig-cache.txt]
 in order to avoid this warning in the future (yes/no)?:
 (你是否把密码标识保存到/root/.ecryptfs/sig-cache.txt中?)我们输入yes,也可以输no,看你的记心好坏了。
  • 3,好了,现在正常操作ecryptfs_test文件夹。放一些文件来测试。
  • 4,关闭解密状态

命令:

 sudo umount -t ecryptfs ecryptfs_test
 (如果使用的是sudo mount -t ecryptfs real_path ecryptfs_mounted_path

那么对应的命令是sudo umount -t ecryptfs ecryptfs_mounted_path) 这命令意思是把挂载取消了。这里的作用相当于把解密取消了,毕竟把重要文件长时间解密放着不好。 好了,再看看ecryptfs_test文件夹,里面的文件是不是都无法正确打开了?

********连概念加内容 加操作都说了,就这么点。简单吧

  • 5.需要解密文件夹时还是用命令:
 sudo mount -t ecryptfs ecryptfs_test ecryptfs_test
 (格式还是不变:sudo mount -t ecryptfs real_path ecryptfs_mounted_path)
 passphrase:
 select cipher:
 select key bytes:
 enable plaintext passthrough(y/n) [n]:
 enable filename encryption (y/n) [n]:

上面这几相当初怎么设置的就怎么填,之后文件夹就解密了。

不需要用了,还是用命令解除解密状态

sudo umount -t ecryptfs ecryptfs ecryptfs_test

这里说一点,mount命令重启就失效了。如果你要关机了,不必使用sudo umount -t ecryptfs ecryptfs_test 命令了。因为再次开机,解密是失效的。必须重新运行命令sudo mount -t ecryptfs ecryptfs_test ecryptfs_test

11/23/2017