答案1
有几种选择,但它们都可能在磁盘上留下一个解密文件,等待稍后恢复。 Shred 甚至可能无法安全地删除文件(如果有日志/日记、冗余写入/ RAID、临时缓存、压缩文件系统),并且 SSD 也可以悄无声息地交换扇区。即使使用文件tmpfs
系统也有可能被写入交换区。而您使用的编辑程序可能会留下更多的临时/缓存文件。如果您的整个文件系统和交换区都加密了,那会很有帮助,但您真的需要更多的加密吗?
如果您只是保存基本文本(如密码),我建议使用专门构建的程序,如 KeePass(X / XC),LastPass 等。或者使用不同的加密方法,如加密文件的方法,如 eCryptfs,EncFS,或加密设备的方法,如 LUKS 或 TrueCrypt 后继者。
但只要使用 GPG,你就可以使用以下选项之一
--passphrase-fd n
从文件描述符 n 读取密码。仅从文件描述符 n 读取第一行。如果使用 0 作为 n,则密码将从 STDIN 读取。这只能在仅提供一个密码时使用。请注意,此密码仅在指定了选项 --batch 时才使用。这与 GnuPG 版本 1.x 不同。
--passphrase-file file
从文件 读取密码file
。只会从文件 读取第一行file
。这只能在只提供一个密码时使用。显然,如果其他用户可以读取此文件,则存储在文件中的密码的安全性值得怀疑。如果可以避免,请不要使用此选项。请注意,只有在同时给出了选项 --batch 时才使用此密码。这与 GnuPG 版本 1.x 不同。--passphrase string
使用字符串作为密码。仅当只提供一个密码时才可使用此选项。显然,这在多用户系统上的安全性非常值得怀疑。如果可以避免,请不要使用此选项。请注意,仅当还给出了选项 --batch 时才使用此密码。这与 GnuPG 版本 1.x 不同。
对于上述选项,您可能需要--pinentry-mode loopback
(允许输入新信息,例如,如果存在冲突,则输入新文件名),否则--batch
gpg 将忽略密码选项并仍然向代理询问密码(在我看来是个错误)。这可能也很有用:
--passphrase-repeat n
指定 gpg 要求重复新密码的次数。这有助于记住密码。默认为 1 次重复。
您只能输入一次密码并将read
其存储在 shell/bash 变量中(例如$password
),稍后使用即可调用--passphrase="$password"
。例如
until gpg --pinentry-mode loopback --passphrase="$password" --output $file_to_edit $ecrypted_file;
do read -r password;
done
#Got out of the loop with a correct password, now
echo "Some edit" >> $file_to_edit
gpg --pinentry-mode loopback --passphrase="$password" --output $ecrypted_file --yes --symmetric $file_to_edit
(--yes
覆盖)