Jef*_*ege 4 linux encryption openssl gnupg
我的家用计算机由一台运行 Linux Mint 的 VMWare 主机和许多 VMWare 客户端组成。
我每天晚上都会运行备份,将 VHD 压缩到可移动硬盘上。
我想对压缩图像进行加密。我希望在备份脚本中不包含密码。
我有几个可以循环使用的可移动磁盘,并且每天都带着一个去上班,所以我有一个异地副本。我在每个备份磁盘上都包含了备份脚本的副本,以便我更轻松地弄清楚恢复时需要执行哪些操作。
我的想法是,如果我使用公钥加密,我可以用公钥加密,并需要私钥解密,然后备份脚本就可以运行而无需密码。
(我会将私钥或私钥文件的密码保留在我的 KeePass 数据库中,并将其写入备份介质。)
但问题是 - 我想运行这个独立的程序,这样我就可以只使用写入备份磁盘的内容来解密备份。也就是说,如果我使用 gpg,我需要在备份磁盘上有一份 gpg 副本,这样我就可以自行运行,而无需安装或配置任何内容。(即不依赖~/.gpgconf等)
我一直无法弄清楚如何使用 gpg 来做到这一点。这些手册似乎假设您将为当前用户安装和配置它,并且我需要能够在没有发生任何此类情况时运行它。
关于如何:的任何想法:
添加评论...
为什么我不能直接安装gpg?
问题是进行恢复。
假设我的系统完全故障,也许我的房子被烧毁了,一切都被毁了。
因此,我开始使用新计算机、裸驱动器和我最近的异地备份进行恢复。
我该怎么办?
我启动了某个版本的 Linux,可以从拇指驱动器挂载 ext4 分区,然后开始将所有东西重新组合在一起。
除了基本的系统实用程序和我放在备份磁盘上的内容之外,我不能依赖任何其他东西。
我一直在解决这个问题,我想我有一个方法。
首先,在进行备份之前:
生成 RSA 密钥对:
$ openssl genpkey -out backupkey.pem -aes-256-cbc -algorithm rsa
.................++
............................++
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
$
Run Code Online (Sandbox Code Playgroud)
使用好的密码短语——任何人都不会破解的密码短语。六到八个随机单词效果很好。不要从喜欢的书籍或歌曲中挑选引语。
接下来,从刚刚创建的 .pem 文件中提取新的公钥:
$ openssl rsa -in backupkey.pem -pubout -out backupkey.key
Enter pass phrase for backupkey.pem:
writing RSA key
$ ls -l backupkey.*
-rw-r--r-- 1 jdege jdege 800 Jan 15 20:26 backupkey.key
-rw-r--r-- 1 jdege jdege 3418 Jan 15 20:16 backupkey.pem
$
Run Code Online (Sandbox Code Playgroud)
将它们保存在某个地方,您将在每次备份时使用它们。我将它们与备份脚本一起存储,并将副本放入我的 KeePass 密码数据库中。
然后,在每次备份时
生成随机会话密钥:
$ openssl rand -hex 128 > session.key
$
Run Code Online (Sandbox Code Playgroud)
然后,运行备份,将结果加密作为管道中的最后一步:
$ generate-my-backup.sh |
> gzip |
> openssl enc -aes-256-cbc -pass file:./session.key -out /mnt/backups/20190115/backup.bup.gz.enc
$
Run Code Online (Sandbox Code Playgroud)
接下来,使用 RSA 公钥加密会话密钥,删除会话密钥,然后将加密的会话密钥复制到备份介质:
$ openssl rsautl -encrypt -inkey backupkey.key -pubin -in session.key -out session.key.enc
$ cp session.key.enc /mnt/backups/20190115/
$ rm session.key
$
Run Code Online (Sandbox Code Playgroud)
并将包含您的私钥的文件复制到您的备份介质:
$ cp backupkey.pem /mnt/backups/20190115/
$
Run Code Online (Sandbox Code Playgroud)
如果你必须恢复
很简单,如果您知道私钥的密码:
$ openssl rsautl -decrypt -inkey backupkey.pem -in session.key.enc |
> openssl enc -d -aes-256-cbc -in backup.bup.gz.enc -pass stdin |
> gunzip |
> restore-my-backup.sh
Enter pass phrase for backupkey.pem:
$
Run Code Online (Sandbox Code Playgroud)
我们运行“openssl rsautl”将加密的会话密钥解密到标准输出,然后运行“openssl enc -d”来解密备份文件,从标准输入读取其密钥,并将输出写入标准输出,这样它就可以传递到管道的任何其他必要的位置以将文件放置在其所属的位置。
| 归档时间: |
|
| 查看次数: |
2761 次 |
| 最近记录: |