Менеджеры паролей действительно полезны и важны как для отдельных пользователей, так и для организаций, и они пригодятся, когда у вас много разных учетных записей и паролей. Обычно люди не любят пользоваться сторонними менеджерами паролей с сервисной архитектурой — неизвестно, что происходит с данными на чужом сервере, и не будет ли он скомпрометирован. Самое безопасное решение это разместить менеджер на своём собственном (как следует защищенном) сервере. Разумеется, к такому 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-атак из коробки, возможность автоматически или вручную создать резервные копии в виде снимков сервера, удобная панель управления серверами собственной разработки. Эпичненько.