如何在 Linux 中使用 eCryptfs 加密目录

本指南解释什么是 eCryptfs,如何在 Linux 中使用 eCryptfs 加密目录,以及如何挂载和卸载加密目录。

目录

什么是 eCryptfs?

eCryptfs 是符合 POSIX 的企业密码 “堆叠” Linux 的文件系统。 请注意,eCryptfs 不是内核级别的全盘加密子系统,例如 “dm-crypt”.

在全盘加密机制中,文件系统所在的整个分区或磁盘都被加密。 但是 eCryptfs 是一个堆叠文件系统,可以安装在任何目录和主文件系统之上。

使用 eCryptfs,我们可以轻松创建一个加密目录来存储机密数据并将其挂载到任何目录。

实际上不需要单独的分区或预先分配的空间! eCryptfs 应该在本地文件系统上运行良好,例如 EXT3, EXT4, XFS, JFSReiserFS 等等

eCryptfs 还支持网络文件系统,例如 NFS, CIFS, SambaWebDAV,但不能完全发挥作用,因为它适用于本地文件系统。

它将加密元数据存储在文件头中,因此加密数据可以轻松地在不同用户甚至系统之间移动。 自版本 2.6.19 起,eCryptfs 已包含在 Linux 内核中。

eCryptfs 源自 埃雷兹·扎多克 加密文件拳头 堆叠文件系统的框架。

eCryptfs 最初由 Michael Halcrow 和 IBM Linux 技术中心编写。 现在,它由 Ubuntu 的母公司 Canonical 的 Dustin Kirkland 和 Tyler Hicks 维护。

在 Linux 上安装 eCryptfs

eCryptfs 已为许多 Linux 操作系统打包,并在默认存储库中可用。

要在 Arch Linux 及其变体(如 EndeavourOS 和 Manjaro Linux)上安装 eCryptfs,请运行:

$ sudo pacman -S ecryptfs-utils

在 Debian、Ubuntu、Linux Mint 上:

$ sudo apt-get install ecryptfs-utils

在 Fedora:

$ sudo dnf install ecryptfs-utils

在 openSUSE 上:

$ sudo zypper --install ecryptfs-utils 

在 Linux 中使用 eCryptfs 加密目录

出于本指南的目的,我将加密一个名为 "ostechnix".

请注意,您 不应加密非空目录. 如果这样做,现有数据仍将保持未加密状态,或者无法访问数据。

因此,如果目录包含任何数据,请将它们移动到不同的位置,然后对其进行加密。 目录加密后,将备份移动到加密目录。

加密目录 ostechnix 使用 ecryptfs 文件系统,运行以下命令 sudo 或者 root 用户:

$ sudo mount -t ecryptfs ~/ostechnix/ ~/ostechnix/

第一次加密目录时,系统会提示您回答几个问题,例如选择密码、密钥字节、启用/禁用纯文本传递、启用/禁用文件名加密等。仔细阅读并相应地回答。 我使用默认值。

[sudo] password for sk: 
Passphrase: <----- Enter your passphrase here
Select cipher: 
 1) aes: blocksize = 16; min keysize = 16; max keysize = 32
 2) blowfish: blocksize = 8; min keysize = 16; max keysize = 56
 3) des3_ede: blocksize = 8; min keysize = 24; max keysize = 24
 4) twofish: blocksize = 16; min keysize = 16; max keysize = 32
 5) cast6: blocksize = 16; min keysize = 16; max keysize = 32
 6) cast5: blocksize = 8; min keysize = 5; max keysize = 16
Selection [aes]: <----- Press ENTER
Select key bytes: 
 1) 16
 2) 32
 3) 24
Selection [16]: <----- Press ENTER
Enable plaintext passthrough (y/n) [n]: <----- Press ENTER
Enable filename encryption (y/n) [n]: <----- Press ENTER
Attempting to mount with the following options:
  ecryptfs_unlink_sigs
  ecryptfs_key_bytes=16
  ecryptfs_cipher=aes
  ecryptfs_sig=8567ee2ae5880f2d
WARNING: Based on the contents of [/root/.ecryptfs/sig-cache.txt],
it looks like you have never mounted with this key 
before. This could mean that you have typed your 
passphrase wrong.

Would you like to proceed with the mount (yes/no)? : yes <----- Type "yes" and press ENTER
Would you like to append sig [8567ee2ae5880f2d] to
[/root/.ecryptfs/sig-cache.txt] 
in order to avoid this warning in the future (yes/no)? : yes <----- Type "yes" and press ENTER
Successfully appended new sig to user sig cache file
Mounted eCryptfs
在 Linux 系统中使用 eCryptfs 加密目录

就是这样! 这 "ostechnix" 目录已使用 eCryptfs 加密并自动挂载。

请记下您在第一步中提供的安装密码。 下次您将需要它来解锁加密目录。

一个名为的签名文件 “信号缓存.txt” 将在下创建 “/root/.ecryptfs/” 目录。 该文件用于识别内核密钥环中的挂载密码。

现在打开您的文件管理器,您将看到已安装加密目录。

在文件管理器中查看挂载的 eCryptfs 文件系统

您还可以使用“mount”命令验证它是否真的从命令行安装:

$ mount

最后你会看到如下输出:

/home/sk/ostechnix on /home/sk/ostechnix type ecryptfs (rw,relatime,ecryptfs_sig=8567ee2ae5880f2d,ecryptfs_cipher=aes,ecryptfs_key_bytes=16,ecryptfs_unlink_sigs)
使用 mount 命令查看已挂载的 eCryptfs 文件系统使用 mount 命令查看已挂载的 eCryptfs 文件系统

恭喜! 我们已经使用 eCryptfs 成功加密了一个目录。 现在,将所有重要文件和文件夹移动到加密目录中。

只要该目录使用 eCryptfs 挂载,您就可以读取和写入保存在该目录中的数据。 卸载目录后,您可以查看目录中保存的内容,但无法读取它们。

挂载和卸载加密目录

要卸载 eCryptfs 目录,只需运行:

$ sudo umount ~/ostechnix

要再次挂载它,请运行:

$ sudo mount -t ecryptfs ~/ostechnix/ ~/ostechnix/

Enter 挂载密码,然后选择密码,密钥字节。 请注意,您输入的值应与创建加密目录时输入的值相同。

Passphrase: 
Select cipher: 
 1) aes: blocksize = 16; min keysize = 16; max keysize = 32
 2) blowfish: blocksize = 8; min keysize = 16; max keysize = 56
 3) des3_ede: blocksize = 8; min keysize = 24; max keysize = 24
 4) twofish: blocksize = 16; min keysize = 16; max keysize = 32
 5) cast6: blocksize = 16; min keysize = 16; max keysize = 32
 6) cast5: blocksize = 8; min keysize = 5; max keysize = 16
Selection [aes]: 
Select key bytes: 
 1) 16
 2) 32
 3) 24
Selection [16]: 
Enable plaintext passthrough (y/n) [n]: 
Enable filename encryption (y/n) [n]: 
Attempting to mount with the following options:
  ecryptfs_unlink_sigs
  ecryptfs_key_bytes=16
  ecryptfs_cipher=aes
  ecryptfs_sig=8567ee2ae5880f2d
Mounted eCryptfs
挂载使用 eCryptfs 加密的目录

现在将重新挂载加密目录。

测试加密目录

创建一个名为的新文本文件 "encrypt.txt" 在加密目录中:

$ nano ~/ostechnix/encrypt.txt

在其中添加一些内容。 我将添加以下行:

This is an encrypted file saved in ostechnix.com.

Save 和 close 文件。

然后卸载加密目录:

$ sudo umount ~/ostechnix

现在尝试使用任何文本编辑器或使用“cat”命令查看文件:

$ cat ~/ostechnix/encrypt.txt

你会看到一些扭曲和垃圾的字符。

在不挂载加密目录的情况下查看文件内容无需挂载加密目录即可查看文件内容

要查看该文件的内容,您必须再次重新挂载该目录。

$ sudo mount -t ecryptfs ~/ostechnix/ ~/ostechnix/

现在您可以查看存储在加密目录中的文件的实际内容。

重新挂载加密目录后查看文件内容重新挂载加密目录后查看文件内容

更改挂载密码

如果要更改挂载密码,只需删除 “/root/.ecryptfs/sig-cache.txt” 文件。 它是在我们第一次加密目录时创建的。 该文件用于识别内核密钥环中的挂载密码。

$ sudo rm /root/.ecryptfs/sig-cache.txt

现在,运行我们用来加密目录的相同命令来创建新密码:

$ sudo mount -t ecryptfs ~/ostechnix/ ~/ostechnix/

重启时自动挂载加密目录

您可能不喜欢在每次重新启动时手动挂载加密目录。 如果是这样,有一种简单的方法可以自动挂载加密目录。 我们需要一个 USB 驱动器来存储签名和密码文件的路径。

插入 USB 驱动器。 创建挂载点,在挂载点挂载U盘,如下图:

$ sudo mkdir /mnt/usb
$ sudo mount /dev/sdb1 /mnt/usb/

这里, /dev/sdb1 是我的 U 盘。 您可以找到您的驱动器详细信息,如 这个链接.

接下来我们需要签名文件的详细信息。 记住一个名为的文本文件 "/root/.ecryptfs/sig-cache.txt" 是在我们第一次加密目录时创建的? 打开它并记下签名:

$ sudo cat /root/.ecryptfs/sig-cache.txt

样本输出:

8567ee2ae5880f2d

创建一个名为的新文本文件 "password.txt" 在 USB 挂载点目录中存储挂载密码。

$ sudo nano /mnt/usb/password.txt

Enter 您在此文件中的密码。 我使用以下密码:

[email protected]#@!

Save 和 close 文件。

创建一个名为 "/root/.ecryptfsrc" 存储挂载加密目录所需的所有选项:

$ sudo nano /root/.ecryptfsrc

添加以下行:

key=passphrase:passphrase_passwd_file=/mnt/usb/password.txt
ecryptfs_sig=8567ee2ae5880f2d
ecryptfs_cipher=aes
ecryptfs_key_bytes=16
ecryptfs_passthrough=n
ecryptfs_enable_filename_crypto=n

请注意,您必须与创建加密目录时提供的值相同。 Save 和 close 文件。

下一个打开 /etc/fstab 文件并添加以下行:

/dev/sdb1       /mnt/usb        ext3    ro      0 0
/home/sk/ostechnix /home/sk/ostechnix ecryptfs defaults 0 0

USB 驱动器应在加密分区之前挂载,因为它包含挂载加密目录的密码。 因此,您应该将 usb 行放在加密目录行之前 /etc/fstab 文件。

最后,重新启动系统。 即日起, /home/sk/ostechnix 应该自动挂载。

结论

如您所见,使用 eCryptfs 创建加密目录非常简单! 如果您想实现文件系统级加密或基于文件的加密或文件/文件夹加密,不费吹灰之力,eCryptfs 可能是一个不错的选择!

资源: