在 unix 中加密某些文件的好方法是什么?

Pet*_*ter 44 linux unix encryption

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

zer*_*ro0 50

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

tar czf files.tar.gz /path/to/my/files
Run Code Online (Sandbox Code Playgroud)

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

gpg --gen-key
Run Code Online (Sandbox Code Playgroud)

按照说明操作。默认值应该足以进行第一次测试。会出现这样的东西:

gpg (GnuPG) 2.0.18;版权所有 (C) 2011 Free Software Foundation, 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) 是

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

真实姓名:文件加密密钥
电子邮件地址:admin@company.org
评论:文件加密密钥
您选择了此用户 ID:
    《文件加密密钥(File Encryption Key)》

更改 (N)ame、(C)omment、(E)mail 或 (O)kay/(Q)uit?○

您将被要求输入密钥的密码。强烈建议使用强的。反正文件加密不需要,以后批量使用不用担心。

如果一切都完成了,你的屏幕上会出现这样的东西:

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

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

现在您可能需要导出公钥文件以便在其他机器上导入它:

gpg --armor --output file-enc-pubkey.txt --export 'File Encryption Key'
Run Code Online (Sandbox Code Playgroud)

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

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

gpg --encrypt --recipient 'File Encryption Key' files.tar.gz
Run Code Online (Sandbox Code Playgroud)

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

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

gpg --output files.tar.gz --decrypt files.tar.gz.gpg
Run Code Online (Sandbox Code Playgroud)

这就是整个魔法。

确保备份您的密钥!永远不要忘记您的密码!如果不备份或忘记,您将拥有数千兆字节的数据垃圾!

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

gpg --armor --output file-enc-privkey.asc --export-secret-keys 'File Encryption Key'
Run Code Online (Sandbox Code Playgroud)

好处

  • 没有一个加密者需要知道关于加密的敏感信息——加密是用公钥完成的。(您可以在本地工作站上创建密钥对,然后只将公钥传输到您的服务器)
  • 脚本文件或作业中不会出现密码
  • 你可以在任何你想要的系统上拥有尽可能多的加密器
  • 如果你把你的私钥和密码保密,一切都很好,而且很难妥协
  • 您可以使用特定的 PGP/GPG 实现在 Unix、Windows 和 Linux 平台上使用私钥解密
  • 无需加密和解密系统的特殊权限,无需挂载,无需容器,无需特殊文件系统


小智 28

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

第一种方法:tar 和 openssl

tar 目录

tar cvf backup.tar /path/to/folder
Run Code Online (Sandbox Code Playgroud)

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

加密

openssl aes-128-cbc -salt -in backup.tar -out backup.tar.aes -k yourpassword
Run Code Online (Sandbox Code Playgroud)

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

解密

openssl aes-128-cbc -d -salt -in backup.tar.aes -out backup.restored.tar
Run Code Online (Sandbox Code Playgroud)

它会要求输入密码。

方法二:加密zip

zip -r -0 -e backup.zip /path/to/folder
Run Code Online (Sandbox Code Playgroud)

它会要求输入密码。

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

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

  • 在命令行上提供密码不是一个好主意。密码保留在 shell 历史记录中。 (3认同)

chi*_*org 22

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

gpg --symmetric --cipher-algo aes256 files.tar.gz
Run Code Online (Sandbox Code Playgroud)

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

解密使用命令

gpg --decrypt files.tar.gz.gpg > files.tar.gz
Run Code Online (Sandbox Code Playgroud)