Linux: настройка gnome-keyring в роли Freedesktop SecretService

Автор: | 26/02/2020

Сейчас у меня KeePass используется как менеджер паролей, хранилище RSA-ключей и в роли Freedesktop SecretService, см. пост KeePass: настройка MFA, хранение паролей браузера, паролей SSH ключей и интеграция Secret Service.

Первая проблема применения KeePass в роли SecretService заключается в том, что у меня его база синхронизируется между компьютерами (просто хранится в Dropbox), и он каждый раз перезаписывает данные, например для Chromium, т.к. на каждой машине Chromium генерирует собственный “Chromium Safe Storage“.

Вторая проблема это то, что KeePass запускается с залоченной базой, и другие приложения не могут её использовать, пока база не будет расшифрована.

Можно было бы использовать опцию -pw (см. KeePass options), или использовать файл типа GPG-ключа, но тогда теряется смысл шифрования базы вообще, т.к. все доступы к базе KeePass будут храниться прямо в файловой системе.

А потому – используем gnome-keyring для локальных приложений в роли SecretService.

Установка GNOME Keyring

Проверяем D-Bus org.freedesktop.secrets сейчас:

[simterm]

$ ps aux  |grep  $(qdbus --session org.freedesktop.DBus / org.freedesktop.DBus.GetConnectionUnixProcessID org.freedesktop.secrets)
setevoy     1534  0.0  0.6 705436 102524 tty1    SLl  Jan09   0:03 keepassxc

[/simterm]

Отключаем поддержку SecretService в KeePass, устанавливаем gnome-keyring:

[simterm]

$ sudo pacman -S gnome-keyring

[/simterm]

Проверяем процесс:

[simterm]

$ ps aux  |grep  $(qdbus --session org.freedesktop.DBus / org.freedesktop.DBus.GetConnectionUnixProcessID org.freedesktop.secrets)
setevoy   829496  0.0  0.0 236292  8528 ?        SLl  13:19   0:00 /usr/bin/gnome-keyring-daemon --start --foreground --components=secrets

[/simterm]

Запущен, работает, опции – --start --foreground --components=secrets – правильные.

GNOME Keyring unlock on Log In

Теперь надо настроить автозапуск и расшифровку базы при входе в систему, см. Arch Wiki и GNOME Manual.

Проверяем наличие файлов библиотеки:

[simterm]

$ ll /usr/lib/security/ | grep gnome
-rwxr-xr-x 1 root root  46768 Oct 29 11:38 pam_gnome_keyring.so

[/simterm]

Редактируем /etc/pam.d/login, добавляем в auth и session:

...
auth       optional     pam_gnome_keyring.so
...
session    optional     pam_gnome_keyring.so auto_start
...

Что бы обновлять пароль кейринга при смене пароля пользователя в системе – добавляем в /etc/pam.d/passwd:

...
password  optional     pam_gnome_keyring.so

В документации говорится о необходимости добавить вызов eval $(/usr/bin/gnome-keyring-daemon --start --components=secrets) в ~/.xinitrc (или, например, ~/.config/openbox/environment), но у меня работает и без него (Arch Linux + Openbox DE с ручным запуском через startx).

Ребутаемся и проверяем D-Bus ещё раз:

[simterm]

$ ps aux  |grep  $(qdbus --session org.freedesktop.DBus / org.freedesktop.DBus.GetConnectionUnixProcessID org.freedesktop.secrets)
setevoy     1338  0.0  0.0 236376  6932 ?        Sl   14:35   0:00 /usr/bin/gnome-keyring-daemon --daemonize --login

[/simterm]

Процессы gnome-keyring:

[simterm]

$ ps aux | grep gnome                             
setevoy     1351  0.1  0.0 236288  6776 ?        Sl   16:32   0:00 /usr/bin/gnome-keyring-daemon --daemonize --login 
setevoy     1874  0.0  0.0 235988  7244 ?        Sl   16:33   0:00 /usr/bin/gnome-keyring-daemon --start --foreground --components=secrets

[/simterm]

The Login and Default keyrings

После установки мы уже проверяли процесс, и выглядел он так:

[simterm]

$ ps aux  |grep  $(qdbus --session org.freedesktop.DBus / org.freedesktop.DBus.GetConnectionUnixProcessID org.freedesktop.secrets)
setevoy   829496  0.0  0.0 236292  8528 ?        SLl  13:19   0:00 /usr/bin/gnome-keyring-daemon --start --foreground --components=secrets

[/simterm]

Но на домашней машине “что-то пошло не так”, и gnome-keyring-daemon запущен только с --daemonize --login, без --components=secrets:

[simterm]

$ ps aux  |grep  $(qdbus --session org.freedesktop.DBus / org.freedesktop.DBus.GetConnectionUnixProcessID org.freedesktop.secrets)
setevoy      666  0.0  0.0 380756  7280 ?        Sl   21:19   0:00 /usr/bin/gnome-keyring-daemon --daemonize --login

[/simterm]

При этом в Seahorse (см. Seahorse — GUI для gnome-keyring) есть пустой Login keyring, и Default – который даже нельзя открыть:

Проверяем файлы хранилищ:

[simterm]

$ ll .local/share/keyrings/.
total 16
-rw------- 1 setevoy setevoy 2689 Dec  8 09:38 Default_keyring.keyring
-rw-r--r-- 1 setevoy setevoy   15 Dec  6 08:51 default

[/simterm]

Удаление (перенос в Backups) файлов Default_keyring.keyring и default и ре-логин в систему решили проблему.

Seahorse – GUI для gnome-keyring

Устанавливаем Seahorse:

[simterm]

$ sudo pacman -S seahorse

[/simterm]

Запускаем браузер, например Brave, проверяем кейринг с именем Login (должен создаться автоматически самим gnome-keyring после первого входа в систему):

Brave Safe Storage появился, значит Brave использует gnome-keyring, SecretService работает, всё отлично.

Файлы базы:

[simterm]

$ ll .local/share/keyrings/
total 8
-rw------- 1 setevoy setevoy 2480 Jan 10 14:38 login.keyring
-rw------- 1 setevoy setevoy  207 Jan 10 13:41 user.keystore

[/simterm]

No such secret collection at path: /

Иногда при ручном создании кейринга Seahorse может сообщить, что “No such secret collection at path: /“:

Для решения – обновляем переменные окружения D-Bus:

[simterm]

$ source /etc/X11/xinit/xinitrc.d/50-systemd-user.sh

[/simterm]

Готово.