更改python-gnupg锁定文件位置?

时间:2012-09-21 17:09:44

标签: python gnupg

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

澄清: 有人向我指出,我可能没有说清楚我在初始化对象时正在设置gnupghome,但我不希望将锁文件放在那里,因为我不想要“没人” “拥有对该位置的写入权限。

3 个答案:

答案 0 :(得分: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()),然后使用导入的密钥进行加密,在清理整个临时住所之前。

答案 1 :(得分:0)

Python-GnuPG Getting Started表示您可以设置gnupghome,如下所示:

gpg = gnupg.GPG(gnupghome='/path/to/home/directory')

答案 2 :(得分:0)

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

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

我在验证用户根本没有gnupghome的写入权限的情况下使用此功能 - 只需读取pubring.gpgtrustdb.gpg的权限:

>>> v = g.verify(open('message.gpg', 'r').read())
>>> v.valid
True