Сейчас у меня 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]
Готово.