顺便说一下,如果你想看看设备驱动程序在 Linux 系统的 /dev 目录中如何存在,可以参阅本文: ?page=1 。它包括编程方面,但是如果你不是编程员,就点击到第 2 页,向下滚动鼠标,找到标为 Hello, World! Using /dev/hello_world 的章节,阅读第一段,上面作了具体细致的解释。)
如果你想加密整个分区,可以考虑加密整个驱动器。不过这里存在一个小问题。如果计算机从该驱动器启动,驱动器就需要一个小小的分区 专门用于存放启动代码。该启动代码是机器代码,计算机读入后执行,才能启动计算机。如果整个硬驱经过了加密,包括这部分数据,计算机就需要某种方式来解读 数据。但是计算机还没有装入文件系统,所以它没法读取解密它的程序。看到问题之所在了吗?解密代码需要在 BIOS 本身里面。但是大多数计算机没有这种代码。而这意味着启动记录其实无法被加密。不过人们已经讨论了解决这个问题的种种方法(参阅: ),比如把启动代码放在可移动 USB 驱动器上面。
远程驱动器
如果你的驱动器是远程驱动器,有几种方法可以访问数据;这对于你了解可以使用哪种类型的加密很重要。两种方法是:
• 块级存储 就像使用本地驱动器那样,因而你的 filesystem 软件可以读取并直接写入到远程磁盘上的扇区。
• 文件级存储 ,你的操作系统将文件发送到远程服务器,远程服务器有自己的操作系统和 filesystem 软件;该远程服务器进而将文件写入到其磁盘上。
如果是文件级存储,你在加密方面没有太多的选择。如果你想加密数据,就需要在你的应用程序中加密它,然后将数据发送到远程服务器上存储起来。
但如果是块级远程存储,确实有几个办法。比如说,如果你使用云托管服务,因而你能将不同的卷连接到分配的服务器,你通常可以使用块级存储。卷未必 物理连接到你的托管服务器;不过,服务器可以访问它们,好像它们就是本地卷那样,并且格式化卷,读取和写入单个扇区,就好像驱动器是本地挂载的。这意味 着,如果是块级远程存储,你可以在文件系统层面执行加密,就好像在本地计算机和本地驱动器上执行加密那样。
软件
现在我们知道了想要完成的任务;问题是,你该如何实现呢?事实上, Linux 内置了一个软件包,使用我之前介绍的那种方法,即把软件嵌入到 filesystem 软件与设备驱动程序之间。该软件名为 dm-crypt 。而 dm-crypt 可以加密数据,然后使用一种名为 LUKS 的存储格式,将数据写入到存储设备(通过设备驱动程序)上。
LUKS ( Linux 统一密钥设置)是驱动器本身上面所用的格式,它实际上用来取代 ext4 之类的文件系统。 dm-crypt 系统位于 filesystem 软件与设备驱动程序之间; filesystem 软件读取和写入 ext4 ,而 ext4 数据通过 dm-crypt 加以推送,然后 dm-crypt 将数据以 LUKS 格式存储到驱动器上。因而,实际上 ext4 或 NTFS 之类的文件系统就在经过加密的 LUKS 格式的“上面”。
请注意: dm-crypt 是子系统的名称,你可以使用诸多工具来处理它。没有名为 dm-crypt 的单个命令。你可以使用一些程序来管理 dm-crypt :