这是关于 gpg 的问题。当我以特定用户(“opsacc”)身份登录 Linux 系统时,我可以使用 gpg 加密文件。然后我可以解密文件而无需提供密码。此用户的 gpg 公钥/私钥不是我创建的。问题是我想在以其他帐户登录时复制此场景,但无法这样做,因为我总是需要提供密码。即,当以其他用户身份登录时,我想设置 gpg,以便我可以加密文件,然后解密它们而无需提供密码。gpg 手册和其他研究似乎表明这是不可能的。
有人能建议如何加密文件以便无需提供密码即可解密(仅由同一用户)吗?或者如何设置必要的密钥对以实现此方案?
就我而言,最初为帐户“opsacc”设置密钥对的用户似乎生成了多个公钥/私钥对。我不确定这是否是解密文件而不提供密码的必要条件。该文件可能是在另一个存在类似名称帐户的 Linux 系统上创建的。也可能是其中一个密钥对是在另一个系统上创建的,并在此处导出/导入。
有关更多信息,请参见以下命令行的输出:
我以用户“opsacc”身份登录“服务器”,并使用 gpg 版本 1.4.5:
[opsacc@server1 ~]$ gpg --version
gpg (GnuPG) 1.4.5
Copyright (C) 2006 Free Software Foundation, Inc.
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions. See the file COPYING for details.
Home: ~/.gnupg
Supported algorithms:
Pubkey: RSA, RSA-E, RSA-S, ELG-E, DSA
Cipher: 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH
Hash: MD5, SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
Compression: Uncompressed, ZIP, ZLIB, BZIP2
[opsacc@server1 ~]$
我使用 gpg 在命令行上从 stdin 创建了一个加密文件:
[opsacc@server1 ~]$ gpg -o .SecretFile.gpg -r opsacc -e
my_secret_word
[opsacc@server1 ~]$
[opsacc@server1 ~]$ ls -l .SecretFile.gpg
-rw-rw-r-- 1 opsacc opsacc 595 Mar 6 11:50 .SecretFile.gpg
[opsacc@server1 ~]$
[opsacc@server1 ~]$ file .SecretFile.gpg
.SecretFile.gpg: GPG encrypted data
[opsacc@server1 ~]$
然后我可以不提供密码就解密文件:
[opsacc@server1 ~]$ gpg --decrypt --no-secmem-warning -q $HOME/.SecretFile.gpg
my_secret_word
[opsacc@server1 ~]$
以下是公钥/私钥的详细信息:
[opsacc@server1 ~]$ gpg -k
/opt/home/opsacc/.gnupg/pubring.gpg
----------------------------------
pub 1024D/3B50F829 2009-03-25
uid opsacc <[email protected]>
sub 2048g/63B0BE4D 2009-03-25
pub 1024D/82406185 2009-03-25
uid opsacc <[email protected]>
sub 2048g/766F847E 2009-03-25
[opsacc@server1 ~]$
[opsacc@server1 ~]$ gpg -K
/opt/home/opsacc/.gnupg/secring.gpg
----------------------------------
sec 1024D/3B50F829 2009-03-25
uid opsacc <[email protected]>
ssb 2048g/63B0BE4D 2009-03-25
sec 1024D/82406185 2009-03-25
uid opsacc <[email protected]>
ssb 2048g/766F847E 2009-03-25
[opsacc@server1 ~]$
我只希望用户解密他加密的文件。我没有意识到私钥可以在没有密码的情况下创建。这显然是我上面描述的场景中发生的事情。
因此,当 opsacc 用户解密他之前加密的文件时,无需输入密码。我已经为另一个用户复制了这个场景。我使用此方法来保护多用户系统上的文件。即,当以这种方式加密时,文件只能由所有者解密,而无需提供密码(当文件需要由自动脚本读取时非常方便),并且系统上的其他用户无法解密文件。但是我想知道这种情况下的主要安全风险是什么 - 黑客需要做什么才能访问 opsacc 的加密文件并解密它?
答案1
默认情况下,每个系统用户都有自己的主目录,因此也有自己的 GnuPG 主目录。在每个 GnuPG 主目录中,您可以存储密钥的单独副本。
如果不需要密码,则密钥似乎未使用密码加密。导出密钥( )gpg --export-secret-keys [key-id]
,然后为其他用户(到他自己的 GnuPG 主目录,gpg --import
)导入该密钥,该用户应输入密码。现在编辑密钥(gpg --edit-key [key-id]
)并添加密码(passwd
在 GnuPG 编辑外壳内)。
另一个用户必须输入密码才能访问其密钥副本。由于他没有权限访问opsacc
未加密版本,因此如果没有密码,他将无法解密文件。
但请注意,一旦他获得了密码,他当然可以轻松地将其删除。