Contents

Linux中的加密和解密目录

1. 概述

在本教程中,我们将了解可用于在 Linux 中加密和解密目录及其内容的不同工具。

2. gpgtar

gpgtar 是一个在 Linux 中提供目录加密和解密的工具。它通过首先归档目录来加密目录。然后,它使用gpg 命令加密存档

2.1. 安装

要获取gpgtar二进制文件,我们可以使用apt-get  在基于 Debian 的 Linux(例如 Ubuntu)中 安装gnupg-utils

$ apt-get install -y gnupg-utils

然后,我们可以验证gpgtar命令是否安装成功:

$ gpgtar --version
gpgtar (GnuPG) 2.2.19

2.2. 一般语法

让我们看一下gpgtar命令的一般语法:

gpgtar [options] directory

options是一个标志列表,我们可以指定它来更改*gpgtar *命令的行为。然后,该命令接受一个或多个目录路径进行加密。

2.3. 使用对称密钥加密目录

为了简化我们的演示,让我们创建一个目录top-secret

$ mkdir top-secret

在该目录中,我们将创建一个文本文件 secret.txt

$ echo "this is a secret" > top-secret/secret.txt

然后,让我们使用gpgtar使用对称密钥加密目录绝密:

$ gpgtar --encrypt --symmetric --output top-secret.gpg --gpg-args="--passphrase=top-secret-passphrase --batch" top-secret

让我们分解命令并查看每个标志的功能。

首先,标志 –encrypt指示 gpgtar加密目录 top-secret。然后,标志 –symmetric指定应使用对称密钥算法执行加密。

默认情况下,底层gpg命令将提示输入对称密钥加密的密码。要指定内联密码,我们使用标志*–passphrase传递它。此外,需要标志 –batch来禁止提示。由于–passphrase和 –batch标志实际上都是gpg选项,因此我们需要将其放入标志–gpg-args*中。

最后,我们将加密存档保存为带有 –output 标志 的top- secret.gpg

2.4. 列出加密目录

要列出加密目录,我们可以使用带有标志 的gpgtar –list-archive

$ gpgtar --list-archive --gpg-args "--passphrase=top-secret --batch" top-secret.gpg
gpgtar: gpg: AES256 encrypted data
gpgtar: gpg: encrypted with 1 passphrase
drwxrwxr-x 0 1000/1000            0 2021-01-16 07:11:55 top-secret
-rw-rw-r-- 0 1000/1000            9 2021-01-16 07:11:55 top-secret/secret.txt

正如我们从输出中看到的那样,该命令只是列出了加密存档的目录结构。当我们想在不显式解密的情况下查看档案时,这是一个方便的功能。

类似地,我们 使用标志*–gpg-args提供了相同的gpg*选项集以防止交互式提示。

2.5. 解密加密目录

使用相同的工具,我们可以解密档案:

$ mkdir decrypted
$ gpgtar --decrypt --directory decrypted top-secret.gpg
gpgtar: gpg: AES256 encrypted data
gpgtar: gpg: encrypted with 1 passphrase

首先,我们需要创建一个目录来放置解密的内容。然后,我们调用带有 –decrypt 标志的 gpgtar命令 解密存档。

3. encfs

encfs 是一种通过加密的虚拟文件系统在文件系统级别提供目录加密的工具。它使用一对目录创建一个加密的文件系统:一个未加密的目录和一个加密的目录。未加密目录用作加密目录的虚拟挂载。

在幕后,encfs 会加密未加密目录中的所有文件。然后,它将加密文件存储到加密目录中。这个过程不断发生,直到目录被卸载。

3.1. 安装

我们可以使用 apt-get安装encfs

$ apt-get install -y encfs

同样,可以使用yum执行相同的安装:

$ yum install -y encfs

3.2. 一般语法

让我们看一下encfs的一般语法 :

encfs [options] rootdir mountPoint [-- [Fuse Mount Options]]

** rootdir参数是指包含加密文件的 目录。另一方面,mountPoint是包含未加密文件的目录**。按照我们的术语,rootdir指的是加密目录,而 mountPoint是未加密目录。

此外,encfs还接受Fuse Mount Options选项列表。这些是在挂载创建期间将传递给底层FUSE命令的选项。

3.3. 创建加密的虚拟文件系统

首先,我们将创建 2 个目录,unencrypted 和 encrypted

$ mkdir -p ~/<em>unencrypted</em>
$ mkdir -p ~/encrypted

然后,我们可以使用encfs创建一个加密的虚拟文件系统:

$ echo "password" | encfs --standard --stdinpass ~/encrypted ~/<em>unencrypted</em>

上面的命令使用encrypted unencrypted 目录对创建一个虚拟加密文件系统 。此外, 已指定标志*–standard* 以选择标准配置。为了防止密码的交互式提示,已应用标志*–stdinpass*以接受管道字符串“password”作为此加密文件系统的密码。

执行该命令后,将创建加密的虚拟文件系统并将其挂载到路径*~/unencrypted*上。

为了演示encfs的能力,让我们在unencrypted的文件夹中创建一个文件top-secret.txt  :

$ cd <em>unencrypted</em>
$ echo "this is a top secret" > top-secret.txt

然后,我们可以在*encrypted *目录中看到。现在有一个带有打乱名称的新文件:

$ cd ../encrypted
$ ls
P2DASe2BjMlRWzPBc-XrtKoQ
$ cat P2DASe2BjMlRWzPBc-XrtKoQ
O?+?3?

不出所料,未加密文件夹中的 top-secret.txt 文件名和内容已被unencrypted

如我们所见,** encfs自动加密文件并将其存储在另一个目录中。**当我们处理具有活动更新的目录时,这是一个方便的功能。安装后,任何后续写入都不需要另一个命令调用来加密新内容。

3.4. 卸载

完成交互后,我们需要卸载它。此步骤对于防止没有密码的用户访问未加密文件非常重要

让我们使用fusermount 卸载*encrypted *目录:

$ fusermount -u ~/<em>unencrypted</em>

运行命令后,我们可以检查unencrypted的文件夹 现在是否为空:

$ ls -l ~/<em>unencrypted</em>
total 0

而 encrypted文件夹仍然包含加密文件:

$ ls -l encrypted
total 4
-rw-r--r-- 1 root root 29 Jan 16 13:17 P2DASe2BjMlRWzPBc-XrtKoQ

3.5. 重新安装

要解密encrypted文件夹中的文件,我们需要使用encfs重新挂载encrypted目录:

$ echo "password" | encfs --stdinpass ~/encrypted ~/<em>unencrypted</em>

当我们重新挂载 encrypted目录时,默认情况下会提示我们输入密码。此密码是我们在创建加密文件系统时输入的密码。使用标志*–stdinpass*,我们可以使 encfs从标准输入流中读取密码。

重新挂载目录后,我们现在将在未加密文件夹中看到unencrypted 文件:

$ ls -l <em>unencrypted</em>
total 4
-rw-r--r-- 1 root root 21 Jan 16 13:17 top-secret.txt