python-gnupg search_keys () повертає інший результат при запуску як root


0

У мене є скрипт python, який повинен бути запущений як root (для доступу до framebuffer на малині pi з a невеликий сенсорний екран ). Цей скрипт також повинен шукати ключі на сервері ключів. Для цього я використовую цю функцію 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?


Edit: Я подивився на джерело 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 корінь виправити, але це схоже на жахливе "рішення". І це також змушує мене використовувати sudo gpg ... замість gpg ... коли я хочу використовувати gpg з командного рядка. Тому я все ще цікавлюся більш якісними рішеннями!

Відповіді:


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)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.