在Unix中加密某些文件有什么好的解决方案?[关闭]


44

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

Answers:


51

我仅将GnuPG用于此任务。首先将文件夹打包到TAR-GZ存档中:

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

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

gpg --gen-key

按照说明进行操作。对于第一次测试,默认值应足够。这样的事情会出现:

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)y

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

真实名称:文件加密密钥
电子邮件地址:admin@company.org
评论:文件加密密钥
您选择了此USER-ID:
    “文件加密密钥(文件加密密钥)”

更改(N)ame,(C)项,(E)mail或(O)kay /(Q)uit?Ø

系统将要求您输入密钥的密码。强烈建议使用强壮的。无论如何,都不需要加密文件,因此以后不必担心批量使用。

如果完成所有操作,则屏幕上将显示以下内容:

我们需要生成很多随机字节。执行是一个好主意
其他一些操作(在键盘上键入,移动鼠标,利用
磁盘)这给出了随机数
产生一个更好的机会来获得足够的熵。
我们需要生成很多随机字节。执行是一个好主意
其他一些操作(在键盘上键入,移动鼠标,利用
磁盘)这给出了随机数
产生一个更好的机会来获得足够的熵。
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

这就是整个魔术。

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

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

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

好处

  • 没有一个加密程序需要知道有关加密的敏感信息-加密是使用公钥完成的。(您可以在本地工作站上创建密钥对,并且只能将公钥传输到服务器)
  • 密码不会出现在脚本文件或作业中
  • 您可以在任意系统上拥有尽可能多的加密器
  • 如果您保留私钥和密码短语的秘密,一切都会很好,而且很难妥协
  • 您可以使用特定的PGP / GPG实现在Unix,Windows和Linux平台上使用私钥解密
  • 不需要加密和解密系统的特殊特权,不需要安装,不需要容器,不需要特殊文件系统

1
请注意,根据数据的不同,在tar不进行z开关的情况下运行可能会更快,以避免对其进行压缩。
l0b0

28

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

第一种方法: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
在命令行上提供密码不是一个好主意。密码保留在外壳历史记录中。
pbies

1
应当指出,zip有传言说加密是可破解的。
Acumenus 2014年

22

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

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

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

解密使用命令

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


2

为此,我建议使用FUSE加密(例如encfs)-对于较小的数据,我将使用gpg。

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


1

有一些Linux文件系统旨在进行数据加密。您是否已经考虑过LUX


1

加密一个文件的一种非常简单的方法是:

gpg -c filename.ext

系统会要求您输入两次密码,然后gpg将创建filename.ext.gpg。将加密的文件上传到您的云服务。要恢复文件,请使用:

gpg filename.ext.gpg

它将重新创建filename.ext。请注意,未加密的文件并不安全,即使删除后相关数据仍会保留在您的存储介质上。只有gpg容器是安全的。 EncFS是文件级基于云的加密的更实用的选择。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.