在 UNIX 中加密某些文件的好解决方案是什么?

在 UNIX 中加密某些文件的好解决方案是什么?

我正在寻找一个实用程序来加密 Linux 中的某些目录。我不是在寻找任何全盘加密服务,而只是为将文件存储在云中而加密一些目录。检索它们后,我必须先解密它们,然后才能访问它们。希望对几个目录(几百 GB 大小)执行此操作。有什么想法吗?最好是基于 CLI 的。

答案1

我只使用 GnuPG 来完成这项任务。文件夹首先被打包到 TAR-GZ 档案中:

tar czf files.tar.gz /path/to/my/files

如果尚未完成,您需要先创建 GPG 私钥/公钥对:

gpg --gen-key

按照说明操作。默认值应该足以满足首次测试。将出现类似以下内容:

gpg (GnuPG) 2.0.18;版权所有 (C) 2011 自由软件基金会,Inc.
这是免费软件:您可以自由更改和重新分发它。
在法律允许的范围内,不提供任何担保。

请选择您想要的钥匙类型:
   (1)RSA 和 RSA(默认)
   (2)DSA 和 Elgamal
   (3)DSA(仅限签名)
   (4)RSA(仅签名)
您的选择? 1
RSA 密钥的长度可能在 1024 到 4096 位之间。
您想要什么密钥大小? (2048) 4096
请求的密钥大小为 4096 位
请指定密钥的有效期。
         0 = 密钥未过期
        = 密钥将在 n 天后过期
      w = 密钥将在 n 周后过期
      m = 密钥将在 n 个月后过期
      y = 密钥将在 n 年后过期
密钥有效期为?(0)
密钥根本没有过期
这是正确的吗? (y/N) y

GnuPG 需要构建一个用户 ID 来识别您的密钥。

真实名称:文件加密密钥
电子邮件地址:[电子邮件保护]
注释:文件加密密钥
您选择了这个用户 ID:
    “文件加密密钥(文件加密密钥)”

更改姓名、评论、电子邮件或同意/退出?o

系统会要求您输入密钥的密码。强烈建议使用强密码。文件加密时不需要密码,所以不必担心以后的批量使用。

如果一切完成,屏幕上会出现类似这样的内容:

我们需要生成大量随机字节。执行
其他一些操作(在键盘上打字、移动鼠标​​、利用
磁盘)在素数生成期间;这给出了随机数
生成器有更好的机会获得足够的熵。
我们需要生成大量随机字节。执行
其他一些操作(在键盘上打字、移动鼠标​​、利用
磁盘)在素数生成期间;这给出了随机数
生成器有更好的机会获得足够的熵。
gpg:密钥 FE53C811 被标记为最终受信任
创建并签名公钥和私钥。

gpg:检查 trustdb
gpg:需要 3 个边际,需要 1 个完成,PGP 信任模型
gpg:深度:0 有效:1 签名:0 信任:0-,0q,0n,0m,0f,1u
酒吧 *****/******** 2013-03-19
      密钥指纹 = **** **** **** **** **** **** **** **** **** ****
uid 文件加密密钥(文件加密密钥)
子 *****/******** 2013-03-19

现在轮到你可能想要导出公钥文件以便在其他机器上导入:

gpg --armor --output file-enc-pubkey.txt --export 'File Encryption Key'

File Encryption Key是我在密钥生成过程中输入的名称。

现在我在新创建的档案上使用 GnuPG:

gpg --encrypt --recipient 'File Encryption Key' files.tar.gz

您现在有一个files.tar.gz.gpg已加密的文件。

您可以使用以下命令对其进行解密(系统将要求您输入密码):

gpg --output files.tar.gz --decrypt files.tar.gz.gpg

这就是全部的魔法。

确保备份密钥!千万不要忘记密码!如果没有备份或忘记,您将会拥有数 GB 的数据垃圾!

使用以下命令备份您的私钥:

gpg --armor --output file-enc-privkey.asc --export-secret-keys 'File Encryption Key'

优点

  • 加密器无需知道与加密有关的敏感信息 - 加密是通过公钥完成的。(您可以在本地工作站上创建密钥对,然后仅将公钥传输到您的服务器)
  • 脚本文件或作业中不会出现密码
  • 你可以在任何系统上安装任意数量的加密器
  • 如果你保守私钥和密码的秘密,一切都会很好,而且很难被破解
  • 您可以使用特定的 PGP/GPG 实现在 Unix、Windows 和 Linux 平台上使用私钥解密
  • 无需对加密和解密系统有特殊权限,无需挂载,无需容器,无需特殊文件系统

答案2

就我而言,我主要使用两种方法:

第一种方法:tar 和 openssl

tar 目录

tar cvf backup.tar /path/to/folder

您可以从 tar 命令中删除 [v] 开关来关闭详细模式。

加密

openssl aes-128-cbc -salt -in backup.tar -out backup.tar.aes -k yourpassword

您可以将 aes-128-cbc 更改为 openssl 支持的任何其他密码方法(openssl --help)。

解密

openssl aes-128-cbc -d -salt -in backup.tar.aes -out backup.restored.tar

它会要求输入密码。

第二种方法:加密zip

zip -r -0 -e backup.zip /path/to/folder

它会要求输入密码。

  • -r 表示递归(整个文件夹树)
  • -0 表示仅存储(不压缩,速度更快)
  • -e 表示加密档案

这样做的一个优点是:它将更好地与基于 Windows 的系统一起运行。

答案3

如果您不想使用公钥/私钥对加密文件,而只使用带有密码的对称加密,请使用以下命令:

gpg --symmetric --cipher-algo aes256 files.tar.gz

系统将要求您输入密码。之后files.tar.gz.gpg将创建一个名为的加密文件。

要解密,请使用命令

gpg --decrypt files.tar.gz.gpg > files.tar.gz

答案4

为此我建议使用 FUSE 加密(例如恩夫斯) - 对于较小的数据我会使用 gpg。

它是在用户空间中实现的,因此您不需要任何特殊权限。

相关内容