python-gnupg search_keys() 以 root 身份运行时返回不同的结果

python-gnupg search_keys() 以 root 身份运行时返回不同的结果

我有一个需要以 root 身份运行的 python 脚本(用于访问带有小触摸屏)。此脚本还需要在密钥服务器上搜索密钥。为了实现此目的,我使用search_keys()python-gnupg

当我使用以下命令执行以下脚本时,它可以正常工作python gpg_test.py

import gnupg

gpg= gnupg.GPG(gnupghome="/home/pi/.gnupg")
keyserver= "pool.sks-keyservers.net"
search_string= "[email protected]"
print gpg.search_keys(search_string, keyserver)

这将打印出包含几个键的列表。

但是,如果我使用 运行相同的脚本sudo python gpg_test.py,我只会得到一个空列表。有人知道这种行为的原因吗?也许有解决方案可以让它在以 root 身份运行时正常工作?


编辑:我查看了 python-gnupg 的源代码,发现的结果search_keys()包括底层 pgp 调用的 stderr 输出。将 search_keys() 的结果分配给变量result并调用print result.stderr会打印以下内容:

gpg: WARNING: unsafe ownership on homedir `/home/pi/.gnupg'
gpg: external program calls are disabled due to unsafe options file permissions
gpg: keyserver communications error: general error
gpg: keyserver search failed: general error

所以在我看来,问题在于我正尝试访问不同用户的 pgp homedir(pi而不是root)。


编辑:将所有者更改/home/pi/.gnupg为 root 解决了这个问题,但这似乎是一个糟糕的“解决方案”。当我想从命令行使用 gpg 时,它还迫使我使用sudo gpg ...而不是。所以我仍然对更好的解决方案感到好奇!gpg ...

答案1

我在这里回答我自己的问题,以防其他人遇到类似的问题。

root我的解决方案是使用新的主目录初始化 python-gnupg。由于脚本以 root 身份运行,因此该新主目录现在属于用户。

这样,脚本所做的一切都与我在终端中输入时访问的 gpg 安装无关gpg [command]。搜索密钥服务器时不会再出现错误。

因此,将上面的 Python 代码改为这样就可以了:

import gnupg

gpg= gnupg.GPG(gnupghome="/home/pi/gnupg_myscript")
keyserver= "pool.sks-keyservers.net"
search_string= "[email protected]"
print gpg.search_keys(search_string, keyserver)

相关内容