У меня есть скрипт Python, который должен быть запущен от имени пользователя root (для доступа к кадровому буферу на Raspberry Pi с небольшим сенсорным экраном). Этот сценарий также должен искать ключи на сервере ключей. Чтобы добиться этого, я использую функцию search_keys()
из python-gnupg.
Следующий скрипт отлично работает, когда я выполняю его с python gpg_test.py
:
import gnupg
gpg= gnupg.GPG(gnupghome="/home/pi/.gnupg")
keyserver= "pool.sks-keyservers.net"
search_string= "testuser@example.com"
print gpg.search_keys(search_string, keyserver)
Это печатает список, содержащий несколько ключей.
Однако, если я запускаю тот же скрипт с sudo python gpg_test.py
, я просто получаю пустой список.
Кто-то знает причину такого поведения? А может быть решение, чтобы заставить его работать при запуске от имени root?
Редактировать: я посмотрел на источник python-gnupg и обнаружил, что результат search_keys()
включает вывод stderr базового вызова pgp. Присваивая результат 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 другого пользователя (pi
вместо root
).
Изменить: Изменение владельца /home/pi/.gnupg
на root исправил это, но это кажется ужасным "решением". И это также заставляет меня использовать sudo gpg ...
вместо gpg ...
когда я хочу использовать gpg из командной строки. Так что мне все еще интересно узнать о лучших решениях!