У меня есть скрипт 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 из командной строки. Так что мне все еще интересно узнать о лучших решениях!

1 ответ1

0

Я отвечаю на свой собственный вопрос здесь, на случай, если у кого-то еще есть подобная проблема.

Мое решение состояло в том, чтобы инициализировать python-gnupg с новым homedir. Этот новый homedir теперь принадлежит пользователю root потому что скрипт запускается как root.

Таким образом, все, что делает скрипт, не зависит от установки gpg, к которой я обращаюсь при опечатке gpg [command] в терминале. И больше нет ошибок при поиске серверов ключей.

Таким образом, изменение приведенного выше кода Python на это делает работу:

import gnupg

gpg= gnupg.GPG(gnupghome="/home/pi/gnupg_myscript")
keyserver= "pool.sks-keyservers.net"
search_string= "testuser@example.com"
print gpg.search_keys(search_string, keyserver)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .