0

我正在尝试部署一个使用 GPG 加密发送到 SOAP WebService 的数据的项目。当我尝试加密该文件时,我发现它python-gnupg试图将一个锁定文件放入我的gnupghome目录中,该目录对于运行 Apache 的用户是不可写的。我宁愿不给“nobody”写权限,那么有没有办法改变 python-gnupg 用来存储锁定文件的位置?

澄清: 有人向我指出,我gnupghome在初始化对象时可能没有明确说明我当前正在设置,但我不希望将锁定文件放置在那里,因为我不希望“nobody”拥有对该位置的写访问权。

4

3 回答 3

3

锁定文件由 gnupg 创建,而不是 python 包装器,它总是在 GNUPGHOME 路径中创建,默认为~/.gnupghome.

您无法阻止锁定文件,但可以将目录设置为临时目录。缺点是它无法加载默认密钥环,因此您需要显式传递它,告诉 GNUPG忽略默认文件(如果您不这样做,它会痛苦地抱怨):

import tempfile
import shutil

home = tempfile.mkdtemp()
try:
    gpg = gnupg.GPG(gnupghome=home, keyring='/path/to/keyring/file',
        options=['--no-default-keyring'])
finally:
    shutil.rmtree(home)

事实上,我已经为密钥环使用了一个临时文件。使用该tempfile.mkstemp()函数在上面生成的临时目录中创建一个空文件,将密钥(从数据库中提取)导入该密钥环(使用.import_keys()),然后使用导入的密钥进行加密,然后清理整个临时主目录。

于 2012-09-21T17:26:41.603 回答
0

Python-GnuPG Getting Started显示您可以gnupghome这样设置:

gpg = gnupg.GPG(gnupghome='/path/to/home/directory')
于 2012-09-21T17:17:37.213 回答
0

如果您使用的是python-gnupg0.3.1 或更高版本并因此具有options参数,则可以使用此解决方案,前提是您需要的密钥环是可读的:

>>> g = gnupg.GPG(gnupghome='/path/to/gnupghome', options=['--lock-never'])

我在验证用户根本没有写入权限的情况下使用它gnupghome- 只是读取pubring.gpg和的权限trustdb.gpg

>>> v = g.verify(open('message.gpg', 'r').read())
>>> v.valid
True
于 2012-11-14T16:42:43.137 回答