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

时间:2020-03-21 11:44:21  来源:igfitidea点击:

本教程介绍了什么是eCryptfs,以及如何在Linux中使用eCryptfs加密目录。
eCryptfs是适用于Linux的POSIX兼容企业加密“堆叠”文件系统。
请注意,eCryptfs不是“ dm-crypt”之类的内核级全磁盘加密子系统。
在全盘加密机制中,文件系统所在的整个分区或者磁盘均被加密。
但是eCryptfs是一个堆栈式文件系统,可以安装在任何目录中,也可以安装在主文件系统的顶部。

使用eCryptfs,我们可以轻松地创建一个加密目录来存储机密数据并将其安装在任何目录上。
实际上,不需要单独的分区或者预先分配的空间! eCryptfs应该可以在本地文件系统(例如EXT3,EXT4,XFS,JFS和ReiserFS等)上很好地工作。
它还支持网络文件系统(例如NFS,CIFS,Samba和WebDAV),但由于在本地文件系统上工作而不能完全发挥作用。

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

eCryptfs源自Erez Zadok的Cryptfs,以及用于堆叠文件系统的FiST框架。

它最初由Michael Halcrow和IBM Linux Technology Center撰写。
现在,它由Ubuntu的母Canonical的Dustin Kirkland和Tyler Hicks维护。

在Linux上安装eCryptfs

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

要在Arch Linux及其类似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加密目录

出于本教程的目的,我将加密一个名为“ theitroad”的目录。
请注意,我们不应该加密非空目录。
如果这样做,现有数据仍将保持未加密状态,否则将无法访问该数据。
因此,如果目录包含任何数据,请将其移动到其他位置,然后对其进行加密。
目录加密后,将备份移动到加密目录。

要使用ecryptfs文件系统对目录进行加密,请以sudo或者root用户身份运行以下命令:

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

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

[sudo] password for sk: 
Passphrase: <----- Enter your 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]: <----- 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

“ theitroad”目录已使用eCryptfs加密并自动挂载。

请记下我们在第一步中提供的安装密码。
下次我们将需要它来解锁加密的目录。
将在“ /root/.ecryptfs/”目录下创建一个名为“ sig-cache.txt”的签名文件。
该文件用于标识内核密钥环中的安装密码。

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

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

$mount

我们将在末尾看到类似以下的输出:

/home/sk/theitroad on /home/sk/theitroad type ecryptfs (rw,relatime,ecryptfs_sig=8567ee2ae5880f2d,ecryptfs_cipher=aes,ecryptfs_key_bytes=16,ecryptfs_unlink_sigs)

恭喜你!我们已经使用eCryptfs成功加密了目录。
现在,将所有重要文件和文件夹移动到加密目录中。
只要使用eCryptfs挂载目录,就可以读取和写入保存在该目录中的数据。
卸载目录后,我们可以查看目录中保存的内容,但无法读取它们。

挂载/卸载加密目录

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

$sudo umount ~/theitroad

要再次安装它,请运行:

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

输入安装密码,然后选择密码,密钥字节。
请注意,我们应该输入与创建加密目录时输入的相同的值。

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

现在,将重新安装加密的目录。

测试加密目录

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

$nano ~/theitroad/encrypt.txt

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

This is an encrypted file saved in theitroad.com.

保存并关闭文件。

然后卸载加密的目录:

$sudo umount ~/theitroad

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

$cat ~/theitroad/encrypt.txt

我们会看到一些扭曲和怪异的角色。

要查看文件的内容,必须再次重新安装目录。

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

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

更改挂载密码

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

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

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

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

重新启动时自动挂载加密目录

我们可能不希望在每次重新启动时手动安装加密目录。
如果是这样,则有一种简单的方法可以自动安装加密目录。
我们需要一个U盘来存储签名和密码文件的路径。

插入U盘。
创建一个安装点,然后将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

在USB安装点目录中创建一个名为“ password.txt”的新文本文件,以存储安装密码。

$sudo nano /mnt/usb/password.txt

在此文件中输入密码。
我使用以下密码:

Hyman@theitroad#@!

保存并关闭文件。

创建一个名为“ /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

请注意,我们必须与创建加密目录时提供的值相同。
保存并关闭文件。

接下来打开/etc/fstab并添加以下行:

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

U盘应在加密分区之前安装,因为它包含用于安装加密目录的密码。
因此,我们应该将usb行放在/etc/fstab文件中的加密目录行之前。

最后,重新启动系统。
从现在开始,应该自动挂载/home/sk/theitroad。