GNOME (Русский)/Keyring (Русский)
GNOME Keyring - это «набор компонентов в GNOME, которые хранят пароли, ключи, сертификаты и делают их доступными для приложений».
Он предоставляет org.freedesktop.secrets, API, который позволяет клиентским приложениям безопасно хранить пароли, используя службу, работающую в сессии входа пользователя в систему.
Безопасность
Защита от вредоносных приложений
В прошлом сообщалось о проблеме безопасности (известной как CVE-2018-19358), связанной с поведением GNOME/Keyring API. Любое приложение может легко прочитать любой пароль, если связка ключей разблокирована. А если пользователь вошел в систему, то разблокирована коллекция логинов/дефолтов. Доступные механизмы защиты D-Bus (включающие XML-элементы busconfig и policy) не используются по умолчанию и в любом случае легко обходятся.
Проект GNOME не согласен с этим сообщением об уязвимости, поскольку, согласно заявленной ими модели безопасности, недоверенным приложениям не должно быть позволено общаться с секретной службой.
Приложения, помещенные в песочницу с помощью Flatpak, имеют только фильтрованный доступ к шине сессий.
Связка ключей не блокируется, когда сессия заблокирована
Когда сессия заблокирована, связка ключей не блокируется автоматически. Это означает, что пароли остаются в памяти, что открывает систему для атаки DMA.
Установка
gnome-keyring входит в группу gnome и поэтому обычно присутствует на системах с GNOME. В противном случае пакет может быть установлен самостоятельно. libsecret также должен быть установлен, для предоставления другим приложениям доступа к вашим связкам ключей. Хотя libgnome-keyring устарел (и заменен на libsecret), он все еще может быть необходим некоторым приложениям.
Демон gnome-keyring-daemon автоматически запускается через пользовательскую службу systemd при входе в систему. Он также может быть запущен по запросу через сокет.
Дополнительные утилиты, связанные с GNOME Keyring, включают:
- secret-tool — Доступ к GNOME Keyring (и любой другой службе, реализующей DBus Secret Service API) из командной строки.
- lssecret — Список всех секретных элементов, использующих libsecret (например, GNOME Keyring).
Управление с помощью графического интерфейса
Вы можете управлять содержимым GNOME Keyring с помощью Seahorse; установив пакет seahorse.
Пароли для связок ключей (например, для связки по умолчанию «Login») можно изменять и даже удалять. Дополнительную информацию см. в разделах Создать новую связку ключей и Обновить пароль связки ключей в Справке GNOME.
Использование keyring
Модуль PAM (Русский) pam_gnome_keyring.so частично инициализирует GNOME Keyring, разблокируя при этом связку ключей login. Демон gnome-keyring-daemon автоматически запускается с помощью пользовательской службы systemd.
Шаг PAM
- Чтобы использовать автоматическую разблокировку с автоматическим входом в систему, можно задать пустой пароль для связки ключей. Обратите внимание, что в этом случае содержимое связки ключей хранится в незашифрованном виде.
- В качестве альтернативы, при использовании GDM и LUKS, GDM может разблокировать вашу связку ключей, если он соответствует вашему паролю LUKS. Чтобы это работало, необходимо использовать systemd init в mkinitcpio.conf, а также appropriate kernel parameters. Более подробную информацию см. в .
- Если вы хотите пропустить шаг PAM, связка ключей должна быть разблокирована вручную или другим способом. См. #Использование_gnome-keyring-daemon_вне_окружения_рабочего_стола_(KDE,_GNOME,_XFCE,_...) и GnomeKeyring wiki.
При использовании менеджера дисплеев связка ключей работает «из коробки» в большинстве случаев. GDM, LightDM, LXDM и SDDM уже имеют необходимую конфигурацию PAM. Для менеджера дисплеев, который не разблокирует связку ключей автоматически, отредактируйте соответствующий файл вместо /etc/pam.d/login
, как указано ниже.
При использовании входа через консоль отредактируйте /etc/pam.d/login
:
Добавьте auth optional pam_gnome_keyring.so
в конец раздела auth
и session optional pam_gnome_keyring.so auto_start
в конец раздела session
.
/etc/pam.d/login
#%PAM-1.0 auth required pam_securetty.so auth requisite pam_nologin.so auth include system-local-login '''auth optional pam_gnome_keyring.so''' account include system-local-login session include system-local-login '''session optional pam_gnome_keyring.so auto_start'''
/etc/pam.d/greetd
, а не /etc/pam.d/login
.SSH ключи
GNOME Keyring может выступать в качестве обертки для ssh-agent. В этом режиме он будет отображать диалог ввода пароля в графическом интерфейсе каждый раз, когда вам нужно разблокировать SSH-ключ. Диалог включает в себя флажок запоминания введенного пароля, который, если его выбрать, позволит использовать этот ключ без пароля в будущем, пока ваша связка ключей для входа в систему разблокирована.
Функциональность SSH отключена по умолчанию в сборках gnome-keyring-daemon начиная с версии 1:46. Она была перенесена в /usr/lib/gcr-ssh-agent
, который является частью пакета gcr-4.
Установка gcr
Все, что вам нужно сделать, это:
- Включить
gcr-ssh-agent.socket
systemd user unit. - Запустить один раз
gcr-ssh-agent.socket
systemd user unit. При этом будет создан файл сокета$XDG_RUNTIME_DIR/gcr/ssh
. После создания файла достаточно выполнить 1 шаг для автоматического запуска блока сокетов. - Ручная настройка переменной окружения
SSH_AUTH_SOCK
не требуется, если активен блокgcr-ssh-agent.socket
. Значение переменной окруженияSSH_AUTH_SOCK
должно быть установлено в$XDG_RUNTIME_DIR/gcr/ssh
после выхода и входа пользователя. Известно, что это работает с приложением GnomeConsole
для пользователей, использующихfish
в качестве оболочки по умолчанию.
Существует множество способов для установки переменных среды и тот, который вы будете использовать, будет зависеть от ваших конкретных настроек и предпочтений.
Использование
Вы можете запустить
$ ssh-add -L
для получения списка загруженных SSH-ключей в запущенном агенте. Это поможет убедиться, что вы запустили соответствующую службу и правильно установили SSH_AUTH_SOCK
.
Чтобы навсегда сохранить ключевую фразу в связке ключей, используйте ssh-askpass из пакета seahorse:
$ /usr/lib/seahorse/ssh-askpass my_key
Чтобы вручную добавить ключ SSH из другого каталога:
$ ssh-add ~/.private/id_rsa Enter passphrase for ~/.private/id_rsa:
~/.ssh/id_rsa.pub
в примере). Также убедитесь, что открытый ключ - это имя файла приватного ключа плюс .pub (например, my_key.pub
).Чтобы отключить все добавленные вручную ключи:
$ ssh-add -D
Отключение
Если вы хотите запустить альтернативный SSH-агент (например, ssh-agent напрямую или gpg-agent), будет полезно отключить обертку ssh-agent в GNOME Keyring. Это не является строго необходимым, поскольку каждый агент слушает на разных сокетах, и SSH_AUTH_SOCK
можно использовать для выбора между ними, но это может облегчить отладку проблем. Обратите внимание, что реализация GNOME не поддерживает многие функции сценариев, например BatchMode .
Для отключения gcr-ssh-agent, убедитесь, что gcr-ssh-agent.socket
и gcr-ssh-agent.service
отключены и остановлены в systemd.
Советы и рекомендации
Интеграция с приложениями
Блокировка связки ключей
$ dbus-send --session --dest=org.freedesktop.secrets \ --type=method_call \ /org/freedesktop/secrets \ org.freedesktop.Secret.Service.Lock \ array:objpath:/org/freedesktop/secrets/collection/login
Эта команда выполняет вызов метода D-Bus для блокировки связки ключей login. В качестве альтернативы, если вы хотите использовать графический интерфейс, можно использовать Seahorse для блокировки связки ключей.
Удаление парольных фраз
$ gnome-keyring-daemon -r -d
Эта команда запускает gnome-keyring-daemon, завершая работу ранее запущенных экземпляров.
Интеграция git
Связка ключей GNOME полезна в сочетании с Gitом при работе по HTTPS. Пакет libsecret должен быть установлен, чтобы эта функциональность стала доступна.
Настройте Git на использование помощника libsecret:
$ git config --global credential.helper /usr/lib/git-core/git-credential-libsecret
В следующий раз, когда вы запустите git push
, вам будет предложено разблокировать связку ключей, если она еще не разблокирована.
Интеграция GnuPG
Некоторые приложения, использующие GnuPG, требуют установки pinentry-program
. Установите следующее значение, чтобы использовать GNOME 3 pinentry для GNOME Keyring для управления запросами парольной фразы.
~/.gnupg/gpg-agent.conf
pinentry-program /usr/bin/pinentry-gnome3
Другой вариант - принудительная петля для GPG, которая позволит вводить ключевую фразу в приложении.
Переименование связки ключей
Отображаемое имя брелока (т. е. имя, которое отображается в Seahorse и в file
) можно изменить, изменив значение display-name в незашифрованном файле брелока. Обычно брелоки хранятся в ~/.local/share/keyrings/
с расширением файла .keyring.
Автоматическая смена пароля связки ключей на пароль пользователя
Добавить password optional pam_gnome_keyring.so
в /etc/pam.d/passwd
:
/etc/pam.d/passwd
... password optional pam_gnome_keyring.so
Использование gnome-keyring-daemon вне окружения рабочего стола (KDE, GNOME, XFCE, ...)
Запуск
Если вы используете sway, i3 или любой другой оконный менеджер, который не выполняет
/etc/xdg/autostart/gnome-keyring-*.desktop
/etc/X11/xinit/xinitrc.d/50-systemd-user.sh
вашему оконному менеджеру необходимо выполнить следующие команды во время его запуска. Команды необязательно должны выполняться в каком-либо определенном порядке.
dbus-update-activation-environment DISPLAY XAUTHORITY WAYLAND_DISPLAY
или
dbus-update-activation-environment --all
Эта команда передает переменные окружения из оконного менеджера в сессию dbus. Без этого GUI-запросы не могут быть вызваны через DBus. Например, это необходимо для запроса пароля seahorse.
Это необходимо потому, что сессия dbus запускается до запуска графического окружения. Таким образом, сессия dbus не знает о графическом окружении, в котором вы находитесь. Кто-то или что-то должно научить сессию dbus графическому окружению, передавая переменные окружения, описывающие графическое окружение, в сессию dbus.
gnome-keyring-daemon --start --components=secrets
Во время входа в систему PAM запускает gnome-keyring-daemon --login
, отвечающий за поддержание gnome-keyring разблокированным с помощью пароля для входа. Если gnome-keyring-daemon --login
не подключается к сессии dbus в течение нескольких минут, gnome-keyring-daemon --login
умирает. Если gnome-keyring-daemon --start ...
запущен против сессии dbus в оконном менеджере, gnome-keyring-daemon --login
подключается к сессии dbus. Если ваша сессия входа не запустится gnome-keyring-daemon --start ...
до того, как gnome-keyring-daemon --login
выйдет из системы, вы также можете использовать любую программу, использующую gnome-keyring или API службы паролей до того, как gnome-keyring-daemon --login
умрет.
GNOME связка ключей XDG Portal
GNOME Keyring открывает бэкенд XDG Portal (например, для использования с приложениями, помещенными в песочницу через flatpak). Чтобы он работал вне GNOME, необходимо добавить свое окружение рабочего стола в конфигурационный файл /usr/share/xdg-desktop-portal/portals/gnome-keyring.portal
, изменив ключ UseIn
. Например, чтобы добавить sway:
/usr/share/xdg-desktop-portal/portals/gnome-keyring.portal
[portal] DBusName=org.freedesktop.secrets Interfaces=org.freedesktop.impl.portal.Secret UseIn=gnome;sway
Дополнительную информацию о бэкендах XDG Desktop Portal см. в разделе XDG Desktop Portal#Backends.
Устранение неполадок
Пароли не запоминаются
Если после входа в систему вам предлагается ввести пароль и вы обнаруживаете, что ваши пароли не сохраняются, возможно, вам нужно создать/установить связку ключей по умолчанию. Чтобы сделать это с помощью Seahorse (он же Пароли и ключи), смотрите Создание новой связки ключей и Изменение связки ключей по-умолчанию в справке GNOME.
Сброс связки ключей
Вам необходимо изменить пароль связки ключей для входа, если вы получаете следующее сообщение об ошибке: «Пароль, используемый для входа на компьютер, больше не соответствует паролю вашего брелока для входа».
В качестве альтернативы вы можете удалить файлы login.keyring
и user.keystore
из ~/.local/share/keyrings/
. Предупреждаем, что при этом все сохраненные ключи будут удалены навсегда. После удаления файлов просто выйдите из системы и войдите снова.
Unable to locate daemon control file
После входа в систему в journal может появиться следующая ошибка:
gkr-pam: unable to locate daemon control file
Это сообщение «можно смело игнорировать», если нет других связанных с ним проблем .
No such secret collection at path: /
Если вы попытаетесь добавить новый брелок с помощью Seahorse, вы можете получить эту ошибку по следующим причинам:
- Директория
~/.local/share/keyrings/
не существует. Создайте её, если она отсутствует. - Используется пользовательский
~/.xinitrc
. Эту проблему можно решить, добавив следующую строку .
~/.xinitrc
source /etc/X11/xinit/xinitrc.d/50-systemd-user.sh
Терминал выдает сообщение "discover_other_daemon: 1"
Это происходит из-за того, что gnome-keyring-daemon запускается во второй раз. Поскольку вместе с демоном поставляется служба systemd, вам не нужно запускать её другим способом. Поэтому убедитесь, что команда start удалена из ваших .zshenv
, .bash_profile
, .xinitrc
, config.fish
или других подобных файлов. Также вы можете отключить пользовательские модули gnome-keyring-daemon.service
и gnome-keyring-daemon.socket
.
Неправильная инициализация связки ключей
Есть несколько симптомов этого:
- Такие программы, как SSH или Git, зависают, ожидая, пока связка ключей предоставит пароль, и в итоге завершаются с ошибками типа "agent refused operation".
- Seahorse не отображает никаких связок ключей, и ручное создание связки ключей с именем «login», похоже, ничего не дает.
- В выводе seahorse появляется следующее сообщение об ошибке:
couldn't load all secret collections: No such secret collection at path: /org/freedesktop/secrets/collection/login
Для решения этой проблемы, сделайте следующее:
- Перезапустите пользовательский юнит systemd
gnome-keyring-daemon.service
. Это должно правильно инициализировать связку ключей login. - Перезапустите пользовательский юнит systemd
gcr-ssh-agent.service
, если он используется. Другие агенты также могут нуждаться в перезапуске.
Если это не устранит проблему, рассмотрите переустановку связки ключей.