注意:这个问题已经讨论了相同的漏洞,但是问题的不同设置(在我的情况下,我不需要存储密码)允许使用不同的解决方案(即,使用文件描述符而不是将密码保存在一个文件,请参见ilkkachu的答案)。
假设我有一个对称加密的文件my_file
(使用gpg 1.x),其中存储了一些机密数据,并且我想使用以下脚本对其进行编辑:
read -e -s -p "Enter passphrase: " my_passphrase
gpg --passphrase $my_passphrase --decrypt $my_file | stream_editing_command | gpg --yes --output $my_file --passphrase $my_passphrase --symmetric
unset my_passphrase
在stream_editing_command
流中替换/追加内容的位置。
我的问题:这样安全吗?变量$my_passphrase
和/或解密后的输出是否将以某种方式可见/可访问?如果不安全,应该如何修改脚本?
gpg --passphrase $my_passphrase
我的问题:这样安全吗?变量$ my_passphrase和/或解密后的输出是否将以某种方式可见/可访问?
不,这不是真正安全的方法。ps
与所有其他正在运行的进程的命令行一样,该密码短语将在的输出中可见。数据本身将不可见,其他用户无法访问该管道。
该手册页gpg
有这样说--passphrase
:
--passphrase string
使用字符串作为密码。仅在仅提供一个密码短语的情况下才能使用此功能。显然,这在多用户系统上具有非常可疑的安全性。如果可以避免,请不要使用此选项。
当然,如果您在系统上没有其他用户并且信任您的服务没有受到损害,那么应该没有人关注进程列表。
但是在任何情况下,您都可以使用--passphrase-fd
并让外壳将密码短语重定向到程序。使用here字符串:
#!/bin/bash
gpg --passphrase-fd 3 3<<< "$my_passphrase" --decrypt "$my_file" |
stream_editing_command |
gpg --yes --output "$my_file" --passphrase-fd 3 3<<< "$my_passphrase" --symmetric
请注意,这仅在第二个gpg
在获取完整输入之前没有截断输出文件的情况下才有效。否则,第一个文件gpg
可能无法在被截断之前读取文件。
为避免使用命令行,您还可以将密码存储在文件中,然后使用--passphrase-file
。但是,然后您需要谨慎设置文件的访问权限,然后再删除它,并为其选择合适的位置,以便密码短语实际上不会存储在持久性存储中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句