Jump to content

# GNOME (Русский)/Keyring (Русский)

From ArchWiki
< GNOME (Русский)

Related articles

- GnuPG
- OpenPGP

GNOME Keyring - это «набор компонентов в GNOME, которые хранят пароли, ключи, сертификаты и делают их доступными для приложений».

Он предоставляет org.freedesktop.secrets, API, который позволяет клиентским приложениям безопасно хранить пароли, используя службу, работающую в сессии входа пользователя в систему.

## Безопасность

### Защита от вредоносных приложений

В прошлом сообщалось о проблеме безопасности (известной как CVE-2018-19358), связанной с поведением GNOME/Keyring API. Любое приложение может легко прочитать любой пароль, если связка ключей разблокирована. А если пользователь вошел в систему, то разблокирована коллекция логинов/дефолтов. Доступные механизмы защиты D-Bus (включающие XML-элементы busconfig и policy) не используются по умолчанию и в любом случае легко обходятся.

Проект GNOME не согласен с этим сообщением об уязвимости, поскольку, согласно заявленной ими модели безопасности, недоверенным приложениям не должно быть позволено общаться с секретной службой.

Приложения, помещенные в песочницу с помощью Flatpak, имеют только фильтрованный доступ к шине сессий.

### Связка ключей не блокируется, когда сессия заблокирована

Когда сессия заблокирована, связка ключей не блокируется автоматически.[1] Это означает, что пароли остаются в памяти, что открывает систему для атаки DMA.

## Установка

gnome-keyring входит в группу gnome и поэтому обычно присутствует на системах с GNOME. В противном случае пакет может быть установлен самостоятельно. libsecret также должен быть установлен, для предоставления другим приложениям доступа к вашим связкам ключей. Хотя libgnome-keyring устарел (и заменен на libsecret), он все еще может быть необходим некоторым приложениям.

Демон gnome-keyring-daemon автоматически запускается через пользовательскую службу systemd при входе в систему. Он также может быть запущен по запросу через сокет.

Дополнительные утилиты, связанные с GNOME Keyring, включают:

- secret-tool — Доступ к GNOME Keyring (и любой другой службе, реализующей DBus Secret Service API) из командной строки.

  https://wiki.gnome.org/Projects/Libsecret || libsecret

- lssecret — Список всех секретных элементов, использующих libsecret (например, GNOME Keyring).

  https://gitlab.com/GrantMoyer/lssecret || lssecret-gitAUR

## Управление с помощью графического интерфейса

Вы можете управлять содержимым GNOME Keyring с помощью Seahorse; установив пакет seahorse.

Пароли для связок ключей (например, для связки по умолчанию «Login») можно изменять и даже удалять. Дополнительную информацию см. в разделах Создать новую связку ключей и Обновить пароль связки ключей в Справке GNOME.

## Использование keyring

Модуль PAM (Русский) pam_gnome_keyring.so частично инициализирует GNOME Keyring, разблокируя при этом связку ключей login. Демон gnome-keyring-daemon автоматически запускается с помощью пользовательской службы systemd.

### Шаг PAM

Note Чтобы использовать автоматическую разблокировку без автоматического входа, пароль учетной записи пользователя должен быть таким же, как и у связки ключей login. Смотрите #Автоматическая смена пароля связки ключей на пароль пользователя.
Tip

- Чтобы использовать автоматическую разблокировку с автоматическим входом в систему, можно задать пустой пароль для связки ключей. Обратите внимание, что в этом случае содержимое связки ключей хранится в незашифрованном виде.
- В качестве альтернативы, при использовании GDM и LUKS, GDM может разблокировать вашу связку ключей, если он соответствует вашему паролю LUKS. Чтобы это работало, необходимо использовать systemd init в mkinitcpio.conf, а также appropriate kernel parameters. Более подробную информацию см. в [2].
- Если вы хотите пропустить шаг 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

Note Если используется менеджер входа greetd, то файл, который необходимо изменить, - это `/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

Все, что вам нужно сделать, это:

1. Включить `gcr-ssh-agent.socket` systemd user unit.
2. Запустить один раз `gcr-ssh-agent.socket` systemd user unit. При этом будет создан файл сокета `$XDG_RUNTIME_DIR/gcr/ssh`. После создания файла достаточно выполнить 1 шаг для автоматического запуска блока сокетов.
3. Ручная настройка переменной окружения `SSH_AUTH_SOCK` не требуется, если активен блок `gcr-ssh-agent.socket`. Значение переменной окружения `SSH_AUTH_SOCK` должно быть установлено в `$XDG_RUNTIME_DIR/gcr/ssh` после выхода и входа пользователя. Известно, что это работает с приложением Gnome `Console` для пользователей, использующих `fish` в качестве оболочки по умолчанию.

Существует множество способов для установки переменных среды и тот, который вы будете использовать, будет зависеть от ваших конкретных настроек и предпочтений.

### Использование

Вы можете запустить

    $ ssh-add -L

для получения списка загруженных SSH-ключей в запущенном агенте. Это поможет убедиться, что вы запустили соответствующую службу и правильно установили `SSH_AUTH_SOCK`.

Чтобы навсегда сохранить ключевую фразу в связке ключей, используйте ssh-askpass из пакета seahorse:

    $ /usr/lib/seahorse/ssh-askpass my_key

Tip В некоторых ситуациях (например, когда вы не используете менеджер входа или среду рабочего стола) альтернативой может быть использование Seahorse secret-tool. для сохранения парольной фразы.

Чтобы вручную добавить ключ SSH из другого каталога:

    $ ssh-add ~/.private/id_rsa
    Enter passphrase for ~/.private/id_rsa:

Note Соответствующий файл .pub должен находиться в том же каталоге, что и приватный ключ (`~/.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 [3].

Для отключения gcr-ssh-agent, убедитесь, что `gcr-ssh-agent.socket` и `gcr-ssh-agent.service` отключены и остановлены в systemd.

## Советы и рекомендации

### Интеграция с приложениями

- Chromium

### Блокировка связки ключей

    $ 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.

### Автоматическая смена пароля связки ключей на пароль пользователя

Note Это касается только связки ключей login..

Добавить `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, ...)

#### Запуск

The factual accuracy of this article or section is disputed.

Reason: По крайней мере, xinit и SDDM выполняют все скрипты из `/etc/X11/xinit/xinitrc.d/`, а sway предоставляет `/etc/sway/config.d/50-systemd-user.conf`, так что проблема не в "вне настольного окружения". Если gnome-keyring требует XDG Autostart, в разделе установки/конфигурации должно быть указано это. (Discuss in Talk:GNOME (Русский)/Keyring (Русский)#Использование_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

The factual accuracy of this article or section is disputed.

Reason: Изменяет файлы пакетов в `/usr/share`, будет отменено при обновлении pacman (Discuss in Talk:GNOME (Русский)/Keyring (Русский))

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

Это сообщение «можно смело игнорировать», если нет других связанных с ним проблем [4].

### No such secret collection at path: /

Если вы попытаетесь добавить новый брелок с помощью Seahorse, вы можете получить эту ошибку по следующим причинам:

- Директория `~/.local/share/keyrings/` не существует. Создайте её, если она отсутствует.
- Используется пользовательский `~/.xinitrc`. Эту проблему можно решить, добавив следующую строку [5].

    ~/.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

Для решения этой проблемы, сделайте следующее:

1. Перезапустите пользовательский юнит systemd `gnome-keyring-daemon.service`. Это должно правильно инициализировать связку ключей login.
2. Перезапустите пользовательский юнит systemd `gcr-ssh-agent.service`, если он используется. Другие агенты также могут нуждаться в перезапуске.

Если это не устранит проблему, рассмотрите переустановку связки ключей.

## Смотри также

- https://help.gnome.org/users/seahorse/stable/
- GNOME вики-страница (архивная)
- Пакеты, предоставляющие org.freedesktop.secrets

Categories:

- GNOME (Русский)
- OpenPGP (Русский)

Hidden category:

- Pages or sections flagged with Template:Accuracy

GNOME (Русский)/Keyring (Русский)
Add topic