Вызов gpg через sudo

13 сентября 2023

Подобно античному небожителю, root в Linux/Unix регулярно принимает облик простых смертных пользователей.

В этом ему помогают магический посох и волшебный кристалл утилиты su и sudo.

Однако при спуске с Олимпа запуске sudo суперпользователь может сталкиваться не только с проблемами, присущими пользователям без приставки «супер», но и с такими, которые рядовым пользователям незнакомы.

Например:

Необходимо сгенерировать связку PGP-ключей для рядового пользователя vasya.

Пробуем:

sudo -u vasya -H gpg --gen-key

GnuPG просит заполнить описание ключа, затем делает паузу и завершается с ошибкой (пример взят из CentOS 6):

You need a Passphrase to protect your secret key.

can't connect to `/home/vasya/.gnupg/S.gpg-agent': No such file or directory
gpg-agent[27060]: command get_passphrase failed: Operation cancelled
gpg: cancelled by user
gpg: Key generation canceled.

В CentOS 7 ответ станет ещё лаконичнее — из него исчезнет единственная подсказка к ответу:

Для защиты секретного ключа необходима фраза-пароль.
gpg: прервано пользователем

Причина:

GnuPG пытается защитить создаваемый закрытый ключ паролем.

Для чтения пароля утилита gpg вызывает сценарий pinentry, который в зависимости от дистибутива и окружения вызывает одну из следующих утилит:

  • pinentry-tty (в CentOS 6)
  • pinentry-curses (в CentOS 7)
  • pinentry-gnome3
  • pinentry-gtk-2
  • pinentry-x11

В текстовой консоли работают только первые две.

Однако обе они проверяют владельца консоли, и если владелец не совпадает с текущим пользователем, считают консоль небезопасной и завершаются без объяснений.

При смене текущего пользователя через su или sudo владельцем консоли будет оставаться пользователь, под которым администратор зашёл в систему, т.е. либо root, либо условный petya, имеющий право повышать свои привилегии до root и vasya.

Проверяем владельца консоли:

ls -l `tty`

Исправляем его:

chown vasya `tty`

После этого "sudo -u vasya gpg ..." вызовет pinentry без ошибок.



← Назад в Блог

Подпишитесь на новые статьи: