From b9d6db30ed1ac82995c5568e00fdc3fa5d2909ba Mon Sep 17 00:00:00 2001 From: He4eT Date: Sat, 27 Jul 2024 03:04:50 +0200 Subject: [PATCH] posts: wrapped_bw: @shofel review --- src/pages/posts/2024/wrapped_bw.md | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/pages/posts/2024/wrapped_bw.md b/src/pages/posts/2024/wrapped_bw.md index 0834d6a..1bf688d 100644 --- a/src/pages/posts/2024/wrapped_bw.md +++ b/src/pages/posts/2024/wrapped_bw.md @@ -16,7 +16,7 @@ description: 'Превращаем fully-featured Bitwarden command-line interfa Менеджер паролей - это специальное приложение, которое помогает делать вид, что я помню разные пароли для разных аккаунтов, а не ввожу везде один и тот же. Мне нравится Bitwarden: открытый исходный код, возможность поднять собственный сервер, клиенты под разные устройства и расширения под разные браузеры. -Самым удобным, внезапно, оказался клиент для Android, который не заставляет меня каждый раз вводить 57895 знаков мастер-пароля и может быть разблокирован с помощью биометрии. Похожего удобства захотелось достичь и на Linux. +Самым удобным, внезапно, оказался клиент для Android, который не заставляет меня каждый раз вводить 12+ знаков мастер-пароля (такую длину требуют Bitwarden и здравый смысл), а может быть разблокирован с помощью биометрии. Похожего удобства захотелось достичь и на Linux. ## Дикий CLI @@ -45,13 +45,15 @@ Bitwarden CLI поддерживает [механизм сессий](https://b - Меньше сторонних зависимостей. - Стандартные интерфейсы идеально подходят для автоматизации. -Идея сделать Bitwarden CLI удобнее, разумеется, пришла в голову не только мне, так что на GitHub предсказуемо быстро нашёлся [скрипт-обёртка](https://gist.github.com/loeschzwerg/c2b9d0b50f712a026aa6454af3b58598) от [@loeschzwerg](https://github.com/loeschzwerg). Этот ZSH-скрипт менее требователен к пользователю и позволяет в случае, когда под запрос подходит несколько аккаунтов, выбрать нужный из списка и автоматически скопировать логин, пароль и даже TOTP в буфер обмена. +Идея сделать Bitwarden CLI удобнее, разумеется, пришла в голову не только мне, так что на GitHub предсказуемо быстро нашёлся [скрипт-обёртка](https://gist.github.com/loeschzwerg/c2b9d0b50f712a026aa6454af3b58598) от [@loeschzwerg](https://github.com/loeschzwerg). Этот ZSH-скрипт менее требователен к пользователю и позволяет в случае, когда под пользовательский поисковый запрос подходит несколько аккаунтов, выбрать нужный из списка и автоматически скопировать логин, пароль и даже TOTP в буфер обмена. К сожалению, найденный скрипт никак не решал проблему управления сессиями, так что я решил его немного доработать, избавив заодно от избытка многоточий в интерфейсе. ### "Безопасное" хранение сессионного ключа -Как я писал выше, мне нравится подход Android-клиента: нужно один раз ввести свой невероятно длинный мастер-пароль, после чего можно разблокировать хранилище отпечатком пальца. В ходе непродолжительных размышлений я решил, что самое простое и надёжное подобие для приложения в терминале - получить сессионный ключ и сохранить его в файл, который будет доступен для чтения только пользователю `root`. +Как я писал выше, мне нравится подход Android-клиента: нужно один раз ввести свой невероятно длинный мастер-пароль, после чего можно разблокировать хранилище отпечатком пальца. В ходе непродолжительных размышлений я решил, что самое простое и надёжное подобие для приложения в терминале - один раз получить сессионный ключ и сохранить его в файл, который будет доступен для чтения только пользователю `root` и недоступен любым другим приложениям запущенным от имени текущего пользователя. + +Приятный бонус для владельцев биометрических сканеров: они отлично интегрируются с утилитой `sudo`. В результате скрипт обогатился двумя функциями и одной проверкой: @@ -68,9 +70,8 @@ save_sessionkey () { sudo chmod 600 $sessionfile sudo sh -c "echo $sessionkey > $sessionfile" } - -# Check the session key - +``` +``` local sessionkey=$(get_saved_sessionkey) if [[ -z $sessionkey ]] ; then @@ -94,6 +95,11 @@ fi .bitwarden_session: Permission denied ``` +Парольный менеджер и скрипт-обёртка запускаются от имени текущего пользователя, повышение привелегий требуется только в момент записи и чтения сессионного ключа. + +Деактивировать сохранённый ключ можно с помощью команды `bw lock`. +К сожалению, я так и не понял, как с помощью утилиты `bw` можно проверить, валиден ли ключ, так что после деактивации придётся удалить файл `~/.bitwarden_session` вручную, иначе скрипт так и будет подставлять протухший сохранённый ключ, а `bw` будет каждый раз игнорировать его и настойчиво спрашивать мастер-пароль. + ## Применять с осторожностью Взаимодействие с менеджером паролей выглядит для меня теперь примерно так: @@ -116,6 +122,8 @@ Password copied to clipboard. Настоятельно рекомендую читать любой код перед тем, как запускать его. Особенно в тех случаях, когда речь идёт о настолько чувствительных данных. +**Важно!** На системах без шифрования диска все эти танцы с правами на доступ к файлу не несут никакой пользы и превращают затею в увлекательный цирк. + Нельзя исключать, что я что-то совершенно неправильно понимаю в принципах работы системы прав доступа в Linux и совершил какие-нибудь грубейшие ошибки с точки зрения настоящих специалистов по информационной безопасности. Пожалуйста, сообщите, если я где-то неправ. Нужно помнить, что такое упрощение жизни ведёт к новым рискам: теперь любой, кто знает ваш пароль для учётной записи системного пользователя и имеет доступ к компьютеру, будет также иметь доступ и ко всем паролям, сохранённым в Bitwarden.