Bug 41509 - gnupg2: restore setting GPG_TTY in profile.d
Summary: gnupg2: restore setting GPG_TTY in profile.d
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: gnupg2 (show other bugs)
Version: unstable
Hardware: x86_64 Linux
: P5 normal
Assignee: Alexey Gladkov
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2021-12-06 13:41 MSK by viy
Modified: 2021-12-09 02:42 MSK (History)
2 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description viy 2021-12-06 13:41:54 MSK
gpg-agent-info и seahorse-agent протухли, поэтому в 2.2.26-alt1 были удалены gnupg-agent.sh и gnupg-agent-wrapper. С gnupg-agent-wrapper все понятно, но у gnupg-agent.sh была еще одна полезная функция, которая, к сожалению, была утеряна с его удалением - установка GPG_TTY.
gpg-agent(1):
...
 You should always add the following lines to your .bashrc  or  whatever
 initialization file is used for all shell invocations:

   GPG_TTY=$(tty)
   export GPG_TTY
...
Поскольку я часто подписываю пакеты на удаленной машине, хотел бы вернуть
автоустановку GPG_TTY

Для этого подготовил патч в 
/people/viy/packages/gnupg2.git

commit db6f87051fe790714cac6806ebda96a9313f6306 (HEAD -> sisyphus, tag: 2.2.32->
Author: Igor Vlasenko <viy@altlinux.org>
Date:   Mon Dec 6 12:02:27 2021 +0200

    set GPG_TTY in profile.d for gpg-agent

также доступно как task
#291478 FAILED #1 [test-only] sisyphus gnupg2.git=2.2.32-alt1.gnupg-agent
собралось (build Ok), но FAILED sisyphus-check, так как я не менял Release, просто патч к текущему)
Comment 1 Alexey Gladkov 2021-12-06 15:02:23 MSK
+if [ -z "${GPG_TTY-}" -a -d "$GNUPGHOME" ]; then
+       GPG_TTY="$(tty)"; export GPG_TTY
+fi

И после этого gpg-agent будет выводить диалог на этом tty даже если запрос придёт с другого tty.

На мой взгляд гораздо правильнее использовать pinentry, который при запуске бы вычислил активный tty.
Comment 2 viy 2021-12-06 15:16:25 MSK
а в консоли на удаленной машине будет работать?

а то я только что обновился на p10, все выглядит сломанным и непривычным,
старые скрипты и привычки с gpg надо закапывать и переходить на gpg2,
пытаюсь разобраться, что теперь.
Comment 3 Alexey Gladkov 2021-12-06 16:49:01 MSK
(Ответ для viy на комментарий #2)
> а в консоли на удаленной машине будет работать?

Честно сказать не пробовал.

> а то я только что обновился на p10, все выглядит сломанным и непривычным,
> старые скрипты и привычки с gpg надо закапывать и переходить на gpg2,
> пытаюсь разобраться, что теперь.

Давай попробуем придумать способ.
Comment 4 viy 2021-12-06 18:00:13 MSK
(Ответ для Alexey Gladkov на комментарий #3)
> > а в консоли на удаленной машине будет работать?
> Честно сказать не пробовал.
> Давай попробуем придумать способ.

Попробовал, действительно не работает. 
Итак, я захожу на удаленную машину. Работаю под tmux.
Есть нюанс, удаленная машина под p9 и там все работает, подписывается, и т.д.
там gnupg2-2.2.19-alt2.x86_64
но думаю, это не принципиально.

Моделирую указанную ситуацию.
1) Сделал
git config --global gpg.program gpg2
теперь
git config --global gpg.program     
gpg2
чтобы исключить gnupg v1.

2)gpgconf --kill gpg-agent
проверил, что
в ps -fu больше нет gpg-agent
убил выставленные старым кривым скриптом переменные
export GPG_AGENT_INFO=
export GPG_TTY=

3)
git tag -s -m 0.027-alt1 0.027-alt1
error: gpg failed to sign the data
error: unable to sign the tag

поймал проблему.

если же делаю 
export GPG_TTY=`tty`
git tag -s -m 0.027-alt1 0.027-alt1
то тут же вылезает ncurses pinentry и все подписывается.
Comment 5 viy 2021-12-06 18:37:26 MSK
Это воспроизвелось и на p10 c gnupg2-2.2.29-alt1.x86_64

Как воспроизвести:
1)
git config --global gpg.program gpg2

иначе git вызовет не gpg2, а gpg из gnupg-1.4.23-alt4.x86_64, 
а gpg умеет в таком случае просто спросить в консоли.

2) CTRL+ALT+3,
залогиниться в текстовую консоль.

3)
unset GPG_TTY
на всякий, если оно было выставлено ранее 

4)
git tag -s -m test test1
error: gpg failed to sign the data
error: unable to sign the tag

если же делаю 
export GPG_TTY=`tty`
то работает.
Comment 6 viy 2021-12-06 18:41:20 MSK
вместо
git config --global gpg.program gpg2
можно указывать в опции git:

git tag -c gpg.program=gpg2 -s -m test test1
Comment 7 Alexey Gladkov 2021-12-06 19:21:59 MSK
Правильно ли я понимаю, что gpg-agent запускается на удалённой машине так же как и сам gpg2 ?
Comment 8 viy 2021-12-06 20:35:32 MSK
(Ответ для Alexey Gladkov на комментарий #7)
> Правильно ли я понимаю, что gpg-agent запускается на удалённой машине так же
> как и сам gpg2 ?

В комментарии 4
https://bugzilla.altlinux.org/show_bug.cgi?id=41509#c4
там да, там я привел пример с работой на удаленной машине.

В комментариях 5-6 я привел пример на локальной машине, на которой сейчас работаю.
Comment 9 viy 2021-12-06 20:37:15 MSK
(Ответ для viy на комментарий #8)
> 
> В комментарии 4
> https://bugzilla.altlinux.org/show_bug.cgi?id=41509#c4
> там да, там я привел пример с работой на удаленной машине.
и там да, gpg-agent запускается на удалённой машине так же как и сам gpg2.

> В комментариях 5-6 я привел пример на локальной машине, на которой сейчас
> работаю.

В них, естественно, gpg-agent и gpg2 работают на локальной машине.
Comment 10 Alexey Gladkov 2021-12-06 21:51:36 MSK
А запуск агента на удалённой машине это принципиальное решение ?
Не пробовал прокидывать сокет агента на удалённую машину прокидывать ?

https://wiki.gnupg.org/AgentForwarding

Спрашиваю потому что на локальной машине можно использовать не только ncurses и tty.
Comment 11 viy 2021-12-06 22:25:18 MSK
(Ответ для Alexey Gladkov на комментарий #10)
> Спрашиваю потому что на локальной машине можно использовать не только
> ncurses и tty.

Мне это нужно не только для себя, но и для работы girar-tools.
Я сидел на p9, и тут мне внезапно начали поступать сообщения, что
в сизифе girar-tools сломаны и не запускают агента как раньше,
автоматически. Задним числом понятно, что это вышел 2.2.26-alt1.

Т.е таких как я не один, и для этого неустановленного числа лиц надо бы
добавить поддержку консоли. 

По поводу прокидывать сокет агента на удалённую машину тема хорошая, я и сам попробую, и потестирую girar-tools. 
Но она не отменяет проблемы с консолью в gpg2. 
К примеру, вряд ли буду прокидывать сокет агента на удалённую машину везде, кроме разве своих домашних машин. Ведь у меня много контейнеров с роботами, в которых свои имена пользователя и свои независимые ключи, и их работу надо подписывать их ключами, не моим.

В принципе, я в основном пользуюсь girar-tools, и могу их захакать, добавив export GPG_TTY внутрь соответствующих утилит.
Это будет работающее для меня решение, но странное.
Comment 12 Alexey Gladkov 2021-12-07 00:03:28 MSK
Если вы запускаешь агента там, то даже если экспортировать GPG_TTY как у тебя работает ssh, logout, ssh обратно на эту же машину ?

Агент будет запущен с одним значением GPG_TTY, во второй сессии будет другое значение.
Comment 13 manowar@altlinux.org 2021-12-07 00:06:10 MSK
(Ответ для Alexey Gladkov на комментарий #10)
> А запуск агента на удалённой машине это принципиальное решение ?
> Не пробовал прокидывать сокет агента на удалённую машину прокидывать ?
> 
> https://wiki.gnupg.org/AgentForwarding

Я так делал, и у меня получалось. Правда, это было на p9.
Comment 14 viy 2021-12-07 00:41:59 MSK
(Ответ для Alexey Gladkov на комментарий #12)
> Если вы запускаешь агента там, то даже если экспортировать GPG_TTY как у
> тебя работает ssh, logout, ssh обратно на эту же машину ?
> Агент будет запущен с одним значением GPG_TTY, во второй сессии будет другое
> значение.

Над этим моментом не задумывался.
Действительно, у меня работает. Не знаю почему, возможно, потому что pinentry умный, или еще что-то.

Провел эксперимент. захожу по ssh (на p9)
в gpg-agent.conf указал чтобы пароль быстро тух
default-cache-ttl 2

убил агента gpgconf --kill gpg-agent
запустил агента (в p9)
gpg-connect-agent                
gpg-connect-agent: агент gpg не работает - запускаем '/usr/bin/gpg-agent'
gpg-connect-agent: ожидаю подключения agent ... (5с)
gpg-connect-agent: соединение с agent установлено

tty
/dev/pts/2

запустил еще сессию.
tty
/dev/pts/4
агент старый
 gpg2 --decrypt ~/test.txt.gpg
спросил пароль на /dev/pts/4
(если не уменьшать default-cache-ttl, то агент
просто отдает закешированный пароль).

git tag -s -m test test1           

Необходима фраза-пароль для доступа к секретному ключу пользователя: "Igor Vlasenko <viy@altlinux.org>"
1024-битный ключ DSA, ID 845A2763, создан 2004-09-24

тег появился и подписан:
git show test1:

tag test1
Tagger: Igor Vlasenko <viy@altlinux.org>
Date:   Mon Dec 6 23:21:26 2021 +0200

test
-----BEGIN PGP SIGNATURE-----

iEYEABECAAYFAmGuftYACgkQDX9MpIRaJ2OQ8ACeIXOkXDMJyuUlaULMhFcxhQrw
7GMAoJhEDpaBAjDYFSUszn4Kweoh9jc1
=AXP0
-----END PGP SIGNATURE-----


Надо смотреть исходники, без этого непонятно, почему все работает.
может быть gpg2 передает правильный GPG_TTY агенту?

1 сеанс
echo $GPG_TTY
/dev/pts/2

2 сеанс
echo $GPG_TTY
/dev/pts/4
Comment 15 viy 2021-12-07 01:01:22 MSK
(Ответ для viy на комментарий #14)
> Надо смотреть исходники, без этого непонятно, почему все работает.
> может быть gpg2 передает правильный GPG_TTY агенту?

похоже так и есть. посмотрел в исходники,
(см. agent/command.c) там обрабатывается команда OPTION.
и там 
 OPTION ttyname
как раз и переустанавливает GPG_TTY.
там и $DISPLAY перекрывается, и $TERM.

поэтому pinentry выводится не на том терминале, с которого когда-то был запущен
gpg-agent,
а на терминале, на котором реально происходит подписывание с помощью gpg2.
Конечно, при условии, что при логине profile выставляет GPG_TTY.
Comment 16 Alexey Gladkov 2021-12-07 17:29:43 MSK
(Ответ для viy на комментарий #15)
> похоже так и есть. посмотрел в исходники,
> (см. agent/command.c) там обрабатывается команда OPTION.
> и там 
>  OPTION ttyname
> как раз и переустанавливает GPG_TTY.
> там и $DISPLAY перекрывается, и $TERM.

Да, действительно.

Я верну gnupg-agent.sh и верну выставление GPG_TTY.
Comment 17 Alexey Gladkov 2021-12-09 02:00:47 MSK
Fixed in 2.2.33-alt1
Comment 18 viy 2021-12-09 02:17:24 MSK
Благодарю! И в p10 скопируйте, пожалуйста.
Comment 19 Alexey Gladkov 2021-12-09 02:20:37 MSK
(Ответ для viy на комментарий #18)
> Благодарю! И в p10 скопируйте, пожалуйста.

Это уже не ко мне.
Comment 20 viy 2021-12-09 02:42:48 MSK
ок, тогда я отправил.

task #291675: added #100: build tag "2.2.33-alt1" from /gears/g/gnupg2.git
task #291675: try #1 is AWAITING, result will be emailed to viy@altlinux.org