Хостим Bitwarden — open-source менеджер паролей

  • Tutorial


Менеджеры паролей действительно полезны и важны как для отдельных пользователей, так и для организаций, и они пригодятся, когда у вас много разных учетных записей и паролей. Обычно люди не любят пользоваться сторонними менеджерами паролей с сервисной архитектурой — неизвестно, что происходит с данными на чужом сервере, и не будет ли он скомпрометирован. Самое безопасное решение это разместить менеджер на своём собственном (как следует защищенном) сервере. Разумеется, к такому self-hosted варианту возникает много требований, и большой список решений с открытым исходным кодом довольно быстро сужается до нескольких известных, проверенных продуктов. Среди них мне больше всего нравится Bitwarden, и сейчас я объясню почему.

Каким должен быть идеальный менеджер паролей?


  • Разумеется, безопасным. Нельзя даже рассматривать не-опенсорсные варианты, ведь предназначение любого закрытого кода это сливать ваши данные или внедрять всякие неприятные штуки в систему. И пароли — лучшее место, чтобы дать волю паранойе, поэтому отметаем непопулярные продукты и форки, если нет желания читать все исходники целиком и собирать проект из исходников.
  • Второй очевидный и обязательный аспект безопасности — шифрование. Было бы глупо настроить супер-секьюрную систему на сервере и потерять пароли из-за MITMа злоумышленника или провайдера.
  • Бывает, что нужно хранить не только пароли. Важная и чувствительная информация может быть представлена в виде текста (например, токены), и этот текст должно быть удобно хранить в менеджере.
  • Любые данные могут использоваться несколькими людьми. Например, любые чувствительные данные, относящиеся к IT-инфраструктуре бизнеса, не могут быть доступны одному конкретному админу. Отсюда вытекает необходимость делиться защищёнными данными с несколькими аккаунтами в организации.
  • Особенно важный пункт для лично использования: кроссплатформенность. Мы используем одни и те же аккаунты с разных устройств, и в идеале менеджер паролей должен работать на всех возможных платформах и в как можно большем количестве браузеров и приложений.
  • Также для self-hosted хранилища нужно делать регулярные бекапы. И вообще было бы неплохо, чтобы вся система устанавливалась без лишнего геморроя. В конце концов, не все мы красноглазые героические админы и девопсы.

Обычно у айтишников (особенно, у повёрнутых на безопасности) возникают и более детальные, личные требования. Я привёл лишь те, которые кажутся мне самыми распространёнными и важными. И, конечно, Bitwarden удовлетворяет им всем, иначе я бы нашёл вариант получше. Вообще у него есть и сервисная часть, и даже платные планы, но базового функционала бесплатного плана нам вполне хватит. При этом self-hosted версия вообще никак не связана с серверами bitwarden.com (исходный код которых также открыт и проходит регулярные аудиты безопасности).

Разворачиваем свой инстанс


Bitwarden распространяется в виде пачки Docker-контейнеров и многофункционального скрипта для установки, настройки и управления инстансом. Всё работает из коробки, кроме одного — для подтверждения регистрации аккаунта сервер должен отправить email на указанный адрес. Кроме того, для доступа к админ-панели на электропочту админа отправляется временная ссылка для входа, поэтому помимо основной установки нам потребуется настроенный email-сервер. Почтовых серверов очень много, как и мануалов по их установке, останавливаться на их выборе я не буду — подойдёт любой send-only или полноценный вариант. Мне понравилось пользоваться docker-mailserver, в котором всё работает практически из коробки, поэтому для меня итоговая схема выглядит так:



Подготовка


В первую очередь нам понадобится docker и docker-compose:

  #Docker engine
  sudo apt-get update
  
  sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common
  
  curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -

  sudo add-apt-repository \
    "deb [arch=amd64] https://download.docker.com/linux/debian \
    $(lsb_release -cs) \
    stable"

  sudo apt-get update
  
  sudo apt-get install docker-ce docker-ce-cli containerd.io

  #Docker-compose
  sudo curl -L "https://github.com/docker/compose/releases/download/1.28.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  sudo chmod +x /usr/local/bin/docker-compose

Затем, чтобы не работать из-под рута, создадим пользователя bitwarden и продолжим работу под ним:

  sudo adduser bitwarden

  sudo passwd bitwarden

Создадим группу docker, если она ещё не существует, и добавим в неё пользователя:

  sudo groupadd docker

  sudo usermod -aG docker bitwarden

Создадим рабочую директорию для bitwarden:

  sudo mkdir /opt/bitwarden

  sudo chmod -R 700 /opt/bitwarden

  sudo chown -R bitwarden:bitwarden /opt/bitwarden


Установка


Скачаем и запустим установочный скрипт:

  curl -Lso bitwarden.sh https://go.btwrdn.co/bw-sh \
    && chmod 700 bitwarden.sh

  ./bitwarden.sh install

Заполняем поля в установщике:

  1. В качестве доменного имени можно указать любой адрес или домен, но в качестве стандарта принято использовать bitwarden.yourdomain.tld.
  2. Можно использовать как существующий SSL-сертификат, так и сгенерировать новый, самоподписанный. На втором шаге будет предложено использовать Let's Encrypt.
  3. Дальше установщик запросит id и ключ установки. Их нужно получить на bitwarden.com/host, указав контактный email (подтверждение не требуется).

Вскоре на указанном домене будет создан и запущен работающий инстанс Bitwarden, но нам ещё нужно настроить почту. Устанавливаем и конфигурируем почтовый сервер, затем отправляемся редактировать файл /opt/bitwarden/bwdata/env/global.override.env (с заменой всех плейсхолдеров, разумеется):

  globalSettings__mail__replyToEmail=no-reply@bitwarden.yourdomain.tld
  globalSettings__mail__smtp__host=smtp.example.com
  globalSettings__mail__smtp__username=root_email_username
  globalSettings__mail__smtp__password=p@ssword
  globalSettings__mail__smtp__ssl=true
  globalSettings__mail__smtp__port=587
  globalSettings__mail__smtp__useDefaultCredentials=false

  adminSettings__admins=admin_email_username@example.com

После любых изменений в конфигах нужно пересобрать сервис:

  ./bitwarden.sh rebuild

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


Теперь всё готово к работе с менеджером и можно отправляться в веб-интерфейс регистрироваться. После регистрации нас сразу пустит в рабочую панель, но для синхронизации данных между устройствами нужно будет подтвердить email:



После подтверждения аккаунт становится доступен для входа с других устройств. Во всех клиентах Bitwarden (десктопные и мобильные приложения, веб-интерфейсы, расширения) есть кнопка настроек в углу, где мы указываем адрес нашего инстанса:



Бэкапы


Вариантов настройки бэкапов много, но как минимум нам надо сохранять всё содержимое папки /opt/bitwarden/bwdata. При этом Bitwarden сам ежедневно бэкапит содержимое ./bwdata/mssql/data, где хранится база данных. Для восстановления данных нужно вытащить пароль к бд из global.override.env (значение в строке globalSettings__sqlServer__connectionString=...Password=), подключиться к контейнеру bitwarden-mssql и найти нужный файл для бэкапа (по дате в названии):

  docker exec -it bitwarden-mssql /bin/bash

Запускаем sqlcmd:

  /opt/mssql-tools/bin/sqlcmd -S localhost -U user -P password

Вместо user и password подставляем значения User= и Password= из global.override.env

В открывшейся оболчке выполняем следующие команды:

  1> use master
  2> GO
  1> alter database vault set offline with rollback immediate
  2> GO
  1> restore database vault from disk='/etc/bitwarden/mssql/backups/vault_FULL_{Backup File Name}.BAK' with replace
  2> GO
  ​1> alter database vault set online
  2> GO
  1> exit

Обязательно перезапускаем инстанс:

  ./bitwarden.sh restart

Заключение


Для self-hosted версии доступен полноценный функционал кроссплатформенного менеджера паролей. Все изменения синхронизируются между клиентами, а данные можно раздавать пользователям в своей организации. Вся установка занимает минут 10-15, и сервис почти никогда не требует администрирования — настроил и забыл. Я считаю, это очень круто. Приятного пользования!



На правах рекламы


Для размещения Bitwarden, а также для множества других целей и задач, вы можете использовать наши легендарные эпичные серверы. Большое количество преимуществ: современное железо с процессорами AMD Epyc, защита от DDoS-атак из коробки, возможность автоматически или вручную создать резервные копии в виде снимков сервера, удобная панель управления серверами собственной разработки. Эпичненько.

VDSina.ru
Серверы в Москве и Амстердаме

Comments 37

    +1
    Использую в проде bitwarden_rs уже пару лет, реализация сервера bitwarden на rust, нереально быстр, много не кушает и не тянет за собой монстра mssql.

    github.com/dani-garcia/bitwarden_rs
      +1

      Я считаю, для менеджера паролей критично прохождение независимоого аудита безопасности. Для официального сервера его делали дважды, а тут нет

        0
        С другой стороны тащить на сервер .Net не очень хочется. Помимо реализации на Rust, есть еще реализации на Go и на Ruby on Rails. И согласен с Михаилом по сравнению с официальными у них общий недостаток — отсутствие аудита. Реализации можно чуть больше доверять, ее делал для личного использования разработчик OpenBSD.
          0
          Реализации можно чуть больше доверять

          Про какую ты реализацию в итоге?

            +1
            Которая на RoR
              0
              github.com/jcs/rubywarden/issues/122
              А он рекомендует использовать ту что rust :)
                0
                есть пруфы?
                  0

                  Так ссылка выше или чукча не читатель?


                  In light of this, I am no longer maintaining this project. I encourage everyone using rubywarden to switch to bitwarden_rs or the official hosted Bitwarden service.
          +1

          С end-to-end шифрованием по идее критичен только аудит клиента. К серверу же требования смягчаются до обеспечения целостности, предотвращения стороннего вандализма и не быть дырой для атаки на другой софт на той же машине. Понятно, что безопасности много не бывает, но всё-таки критичное — клиент.

        0

        Существует легковесная неофициальная имплементация серверного API Bitwarden на Rust. Хороший вариант для домашнего использования, у меня крутится уже год без проблем. Все клиенты и веб-морда работают.

          0

          А мог бы кто-нибудь написать чуть подробнее — как это всё завязано на «официалов»? А то вроде self-hosted и из исходников, но нужны какие-то id с оф.сервера? Как клиенты настраиваются на self-hosted сервер? Официальный iOS клиент из AppStore просто даст ввести адрес моего сервера вместо родного?

            0

            Да, и в статье это сказано.

              +2

              Наверное туманно выразился. Что id от официалов нужен — видел, вопрос — для чего? Self-hosted сервер будет как-то связан с официальным? Или это просто лицензионный ключ чтобы посчитать self-hosted пользователей?

          0
          Пользуюсь (и хостю) bitwarden уже около двух лет, впечатления только хорошие. Хотел бы ещё добавить что на гитхабе есть неофициальная имплементация на Rust: github.com/dani-garcia/bitwarden_rs
          Из плюсов: гораздо меньшее потребление ресурсов и сразу открыты премиум фичи за которые надо платить (например 2FA).
            0

            только хотел спросить про 2FA, которым активно пользуюсь :)

            +2
            Дальше установщик запросит id и ключ установки.

            Кто может объяснить, self-hosted решение разве предполагает получение каких-то ключей с оф. сервера резработчика? Без этого ключа, установка невозможна?

            С информации на оф. сайте, выглядит это так, что нужно только чтобы собрать email адниминистраторов, для важных объявлений и не более того. Так ли это?
              0
              Проверил, не устанавливается без ID и ключа с сервера разработчика.

              Если ввести неправильные значения:

              image

              Установка обрывается.

              Если попытаться пропустить ввод:

              image

              Установка обрывается.

              Похоже, не такое и self-hosted официальное решение у Bitwarden. Если их сайт перестанет работать, установить этот официальный «open-source» нельзя будет.

              Однако, есть неофициальный сервер (без аудита безопасности) github.com/dani-garcia/bitwarden_rs

              +2
              Подскажите, есть ли там поддержка
              LDAP аутентификации
              Разграничение по access листам (ACL — сетевикам одни пароли, админам доступны другие, хелпдеску третьи и т.п.)
                0

                Все есть за деньги. Об этом тактично умолчали, а жаль. Ну то есть фичи там есть, но все очень дико урезано. LDAP, SSO есть, бесплатно нет, но для этнерпрайза есть квота на целых 2 юзера.


                https://bitwarden.com/help/article/about-bitwarden-plans/


                Планы для "дома" на 1 юзера.
                image

                  0
                  очень жаль. интересно как реализовано плата за self-hosted решение, если я решу развернуть её у себя в закрытой инфраструктуре без доступа к инету?
                +1
                В homeassistant есть addon с ним, ставится вообще в 1,5 клика
                github.com/hassio-addons/addon-bitwarden
                  0
                  Менеджер паролей на хостинге? Или на вашем личном сервере, который стоит физически у вас в офисе или дома?

                  Если на хостинге — то есть, вы создавая его там, на каком-то шаге, всё равно вводите *какой-то* мастер пароль, по которому можно будет расшифровать всё. Что мешает хостеру этот пароль перехватить? Сервер-то в его распоряжение и, по-умолчанию, нужно считать, что хостер видит всё. И где же тут безопасность-то? Вы свои пароли хостеру заливаете добровольно.
                    +2
                    Что мешает хостеру этот пароль перехватить?

                    То, что этот мастер-пароль никогда не уходит за пределы клиента. Клиент занимается шифрованием и расшифровкой полностью самостоятельно.

                      0
                      На хостинге работает приложение, которое оперируют полностью зашифрованными данными, и которые создаётся таковыми на вашем личном компьютере?
                        0

                        Я полный аудит всех реализаций не проводил, но насколько я могу судить по мониторингу сети — именно так. Нешифрованными светится только всякая бесполезная мета-информация, вроде идентификаторов организаций

                    –6
                    docker?
                    отказать

                    www.passwordstore.org

                    Не требует никаких Docker, Kubernetes, AWS, OMG-technology. Гарантированно запустится где угодно, где есть gnupg и bash. Если настроить git-репозиторий, пароли можно _в_зашифрованном_ виде передавать по сети и иметь историю изменений. Unix-way в чистом виде, расшифрованный пароль можно запайпить другой программе, например mutt, mcabber, etc.
                      0

                      Вышупомянутый bitwarden_rs успешно запускается без докера


                      А passwordstore вообще из другой оперы

                      0
                      Я бы посоветовал вам поменять название ваших серверов. Всё «эпичное» берут лишь люди недалёкого ума, как мне кажется, кто любит броское и яркое, а не логичное и функциональное.
                        0
                        Да нет, много клиентов без лишних клише заказывают данные серверы ;)
                        0
                        как вы ограничивается свой self-hosted от левых пользователей?
                          0

                          В смысле? Регистрация отключена.

                            0
                            и если нужен новый пользователь — включать, заводить и потом выключать?
                              0

                              Наверное, не я вам должен отвечать :) Подозреваю, что вас интересует корпоративное облако, а у меня семейное. Новые пользователи ну уж очень редко заводятся

                                0

                                Через управление организацией можно отослать инвайт на e-mail

                                  0
                                  это платная история
                                    0

                                    В bitwarden_rs бесплатная

                          Only users with full accounts can post comments. Log in, please.