Self-hosted Apps

Bitwarden

Менеджер паролей с открытым кодом и сквозным шифрованием, который можно использовать в облаке или развернуть на своём сервере.

Что такое Bitwarden

Bitwarden — менеджер паролей с открытым исходным кодом. Хранит пароли, ключи, заметки и коды двухфакторной аутентификации в зашифрованном хранилище и синхронизирует его между устройствами: браузерные расширения, приложения для Windows, macOS, Linux, iOS и Android, веб-версия и CLI.

От конкурентов вроде 1Password и LastPass отличается двумя вещами: код открыт и проверяем, а сервер при желании разворачивается на своём железе. Есть бесплатный тариф в облаке Bitwarden и платные подписки для семей и организаций.

Zero-knowledge: почему серверу можно не доверять

Модель шифрования здесь важнее функций, потому что именно она отвечает на вопрос «а не утекут ли мои пароли вместе с сервером».

Мастер-пароль никогда не покидает устройство. Из него на клиенте выводится ключ (через PBKDF2 или Argon2), этим ключом хранилище шифруется до отправки, и на сервер уезжает уже шифротекст. Сервер физически не может прочитать ваши записи — он хранит непрозрачный блоб.

Отсюда два следствия:

  • Компрометация сервера сама по себе не раскрывает пароли — атакующему достанется зашифрованный набор данных.
  • Забытый мастер-пароль означает потерю хранилища. Восстановления нет ни у кого, включая Bitwarden. Это не недоработка, а прямое следствие архитектуры.

Про конфиденциальность это говорит важную вещь: self-hosting Bitwarden нужен не столько ради секретности содержимого, сколько ради контроля над доступностью и независимости от чужого сервиса.

Bitwarden vs Vaultwarden

Ключевой факт для тех, кто хочет поднять Bitwarden у себя: официальный сервер тяжёлый. Это многоконтейнерная .NET-инсталляция, для которой нужен ещё и installation id с сайта Bitwarden.

Поэтому на практике на своём VPS чаще ставят Vaultwarden — неофициальную реализацию серверного API Bitwarden на Rust (раньше проект назывался bitwarden_rs). Официальные клиенты Bitwarden работают с ним как с обычным сервером: вы просто указываете адрес своего инстанса.

Bitwarden (официальный) Vaultwarden
Реализация .NET, несколько контейнеров Rust, один контейнер
База MS SQL; в unified-сборке также PostgreSQL, MySQL, SQLiteSQLite по умолчанию, есть PostgreSQL/MySQL
Аппетит к RAM заметный очень скромный, хватает самого дешёвого VPS
Функции организаций по лицензии доступны без лицензии
Поддержка вендором сообществом
Кому подходит компания с требованием вендорской поддержки команда, домашняя лаборатория

Обратная сторона Vaultwarden очевидна: это сторонний проект, а не продукт Bitwarden, и отвечать за него будете вы.

Практика самостоятельного развёртывания

Хранилище паролей — не тот сервис, который поднимают «на посмотреть» и забывают. Минимальный набор требований:

  • HTTPS обязателен. Клиенты не подключатся к серверу без TLS, и это правильно. SSL-сертификат выпускают Let's Encrypt, а терминацию вешают на Traefik или Nginx.
  • Бэкап — до первого пароля, а не после. Потерянная база = потерянные пароли от всего. Резервируйте файл базы и каталог с ключами (rsa_key* у Vaultwarden — без него токены сессий станут невалидны).
  • Закройте регистрацию. SIGNUPS_ALLOWED=false после создания своей учётки: иначе открытый в интернет инстанс станет чужим хранилищем.
  • Включите 2FA на самом хранилище и не выставляйте админ-панель наружу.
  • Считайте свой сервер точкой отказа. Он недоступен — вы не залогинитесь никуда. Клиенты держат локальную копию, но это слабое утешение при потере данных.

Ресурсы: Vaultwarden — один из самых лёгких сервисов, которые вообще можно поставить, ему достаточно минимального VPS. Официальный Bitwarden требует полноценной машины.

Bitwarden — не Vault

Частая путаница. Bitwarden решает задачу «человек и его пароли»: интерфейсы, автозаполнение в браузере, общий доступ внутри команды. HashiCorp Vault решает задачу «приложение и его секреты»: динамические учётки с TTL, выдача сертификатов, аудит машинных обращений.

Подменять одно другим больно в обе стороны. В нормальном контуре живут оба.

Связанные термины

Готовы запустить GPU-задачу?

Запустить GPU-сервер