Программно определить, будет ли gpg-agent запрашивать парольную фразу

Я gpg-agent запуск с кэшированный пароль на часок. Я шифрую пароли учетной записи электронной почты для offlineimap IMAP Sync utility и скрипт передает пароли, расшифровывая их из зашифрованного GPG файла.

так как я запускаю offlineimap с systemd, как это работа cron, он, естественно, всплывающее программу pinentry и попросить пароль. Мне было интересно, есть ли способ, чтобы programtically подтвердить, если gpg-agent нужен пароль, чтобы я мог запросить корректно завершите работу systemd / cron, если требуется интерактивный ввод парольной фразы.

кто-нибудь делал это раньше?

12
задан songei2f
07.03.2023 15:29 Количество просмотров материала 2600
Распечатать страницу

2 ответа

у меня просто есть аналогичный план для периодической выборки / синхронизации майских писем с помощью mbsync и cron. Пароли находятся под управлением pass который использует GnuPG для шифрования конфиденциальных данных.

новый GnuPG (я использую v2.1.18) должен использовать gpg-agent запрашивать необходимую парольную фразу для расшифровки закрытых ключей. И gpg-agent будет автоматически запущен, когда, например, я вызываю pass получить пароль для моей учетной записи электронной почты, и всплывет pinentry окно с запросом пароля.

я не хочу настраивать gpg-agent кэширование мою фразу слишком долго (например, 1 день или даже 1 год), и я не хочу, раздражает pinentry диалогового окна gpg-agent вызвано cron заданий, которые должны быть просто тихо.

я думаю mbsync cron работа будет синхронизировать мои письма, когда gpg можно просто расшифровать пароль для pass без срабатывания gpg-agent попросить пользователя пароль, в противном случае задание будет просто выйти.

я нашел GnuPG имеет --pinentry-mode опция, которая может иметь значения:

  • default: используйте значение по умолчанию агента ask.
  • ask : Принудьте пользу Pinentry.
  • cancel : эмуляция использования кнопки отмены Pinentry.
  • error : возвратить ошибка Pinentry (`нет Pinentry").
  • loopback : перенаправить запросы Pinentry на абонент. Обратите внимание, что в отличие от Pinentry пользователю не будет предложено снова, если он вводит плохой пароль.

поэтому я могу явно отключить использование pinentry, передав --pinentry-mode cancel или --pinentry-mode error, и пусть gpg попробуйте подписать / расшифровать сообщение. Если это удалось, то gpg-agent уже кэшированный пароль и не всплывал pinentry диалоговое окно; в противном случае тест sign/decrypt просто не удался.

например:

когда gpg-agent не кэшировать нужен пароль:

$ echo "test" | \
  gpg2 --sign --batch --no-tty --pinentry-mode error \
       --local-user <you@example.com> -o /dev/null

# Return code: 2
# OUTPUT:
# gpg: signing failed: No pinentry
# gpg: signing failed: No pinentry

, когда gpg-agent уже кэшировал парольную фразу, та же команда будет выполнена успешно и вернет код состояния 0.

если я использую --pinentry-mode cancel, потом gpg выдает Operation cancelled.

1
отвечен Aaron LI 2023-03-08 23:17

Я не знаю точно, но мне интересно, разумно ли иметь такую опцию, потому что она может легко использоваться неправильно:

#!/bin/sh
if gpg_ready_to_work_without_pinentry; then
    do_something_malicious_with_the_key;
fi

и вы не имели бы никакой шанс обнаружить неправильное использование. (На самом деле мне даже не нравится, что каждая программа в моем сеансе входа в систему имеет доступ к моему, возможно, разблокированному ключу без возможности проверить, разблокирована ли она или нет. Я нашел ваш вопрос о поиске опции gpg-agent, чтобы всплывал диалог подтверждения для каждого использования именно по этой причине.)

0
отвечен Uwe Kleine-König 2023-03-09 01:34

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх