Vaultwarden - менеджер паролей

22-05-2024

Официальный сайт

Vaultwarden (ранее известный как bitwarden_rs) предоставляет облегченную API-совместимую альтернативу Bitwarden.

Vaultwarden - это приложение для управления паролями с открытым исходным кодом, которое можно размещать самостоятельно и запускать в собственной инфраструктуре.

Запустив службу vaultwarden, можно использовать расширения браузера Bitwarden и мобильные приложения, поддерживаемые сервером.

Требования для установки Vaultwarden:

  • Хост-компьютер, виртуальная машина, VDS/VPS хостинг
  • Установленный Docker
  • Домен, субдомен для получения сертификата SSL
  • SSL сертификат, например Let's Encrypt
  • Учетная запись SMTP, для отправки электронных писем после создания учетных записей

Устанавливаем необходимые программы

sudo apt-get update
sudo apt-get install ca-certificates curl gnupg lsb-release argon2

Добавляем ключ GPG для Docker.

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

Добавляем репозиторий Docker.

echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Обновляем пакеты и устанавливаем Docker.

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

Настройки системы

Добавим пользователя в группу docker.

sudo usermod -aG docker ${USER}

Установка Vaultwarden

В папке opt создаем директорию vaultwarden.

sudo mkdir /opt/vaultwarden
cd /opt/vaultwarden

Меняем права для созданной директории.

sudo chown -R drhellp:drhellp /opt/vaultwarden

Настройка переменных

Настроить конфигурацию Vaultwarden можно несколькими способами:

  • через переменные среды в файле .env
  • через переменные в файле compose.yml, в секции environment
  • через Admin панель, но для этого необходимо создать ADMIN_TOKEN

Переменные среды из файла .env необходимо передавать в файл compose.yml. Но все настройки созданные в Admin панели имеют приоритет и переписывают настройки созданные другими способами, поэтому в файле .env можно создать только ADMIN_TOKEN для запуска Admin панели и несколько критичных параметров.

Для обеспечения безопасности сервера создадим зашифрованный пароль с использованием argon2. Пример из документации:

# Using the Bitwarden defaults
echo -n "MySecretPassword" | argon2 "$(openssl rand -base64 32)" -e -id -k 65540 -t 3 -p 4
# Output: $argon2id$v=19$m=65540,t=3,p=4$bXBGMENBZUVzT3VUSFErTzQzK25Jck1BN2Z0amFuWjdSdVlIQVZqYzAzYz0$T9m73OdD2mz9+aJKLuOAdbvoARdaKxtOZ+jZcSL9/N0
# Using the OWASP minimum recommended settings
echo -n "MySecretPassword" | argon2 "$(openssl rand -base64 32)" -e -id -k 19456 -t 2 -p 1
# Output: $argon2id$v=19$m=19456,t=2,p=1$cXpKdUxHSWhlaUs1QVVsSStkbTRPQVFPSmdpamFCMHdvYjVkWTVKaDdpYz0$E1UgBKjUCD2Roy0jdHAJvXihugpG+N9WcAaR8P6Qn/8

Для использования полученного значения в файле compose.yml необходимо заменить значение $ двумя $. Можно расширить предыдущую команду: | sed 's#\$#\$\$#g'.

Важные параметры

Некоторые параметры системы лучше определить сразу до запуска сервера. Список и описание параметров сервера смотрим в документации.

DOMAIN: https://vaultwarden.loc.ru
LOGIN_RATELIMIT_SECONDS: 60
LOGIN_RATELIMIT_MAX_BURST: 10
ADMIN_RATELIMIT_SECONDS: 60
ADMIN_RATELIMIT_MAX_BURST: 10
ADMIN_SESSION_LIFETIME: 20
ADMIN_TOKEN: зашифрованный пароль
SENDS_ALLOWED: false
EMERGENCY_ACCESS_ALLOWED: true
WEB_VAULT_ENABLED: true
LOG_FILE: /data/vaultwarden.log
ORG_GROUPS_ENABLED: true
ORG_CREATION_USERS: drhellp@loc.ru,drhellp@loc.com
ORG_EVENTS_ENABLED: true
TZ: "Europe/Moscow"
  • DOMAIN

Домен должен совпадать с адресом, откуда вы заходите на сервер. Рекомендуется настроить это значение, иначе некоторые функции могут не работать. Например загрузка вложений, ссылки по электронной почте и U2F. Чтобы U2F работал, сервер должен использовать HTTPS, вы можете использовать Let's Encrypt для получения бесплатных сертификатов.

Let's Encrypt имеет ограничение на количество дубликатов сертификатов - ПЯТЬ запросов в неделю для бесплатных сертификатов для одного домена. Ссылка на документацию.

Использовать самоподписанный SSL сертификат возможно, но клиент Bitwarden для Windows не работает с таким сервером, выдает ошибку.

  • LOGIN_RATELIMIT_SECONDS

Среднее количество секунд между запросами на вход с одного и того же IP-адреса до того, как сработает ограничение скорости.

  • LOGIN_RATELIMIT_MAX_BURST

Разрешить пакет запросов до этого размера, сохраняя при этом среднее значение, указанное в LOGIN_RATELIMIT_SECONDS. Обратите внимание, что это относится как к входу в систему, так и к 2FA, поэтому рекомендуется разрешить размер пакета не менее 2.

  • ADMIN_RATELIMIT_SECONDS

Это то же самое, что LOGIN_RATELIMIT_SECONDS, только для Admin панели.

  • ADMIN_RATELIMIT_MAX_BURST

Это то же самое, что LOGIN_RATELIMIT_MAX_BURST, только для Admin панели.

  • ADMIN_SESSION_LIFETIME

Установите это значение для продолжительности сеансов администратора (в минутах).

  • ADMIN_TOKEN

Токен (зашифрованный пароль) для интерфейса администратора, предпочтительно строка PCH Argon2. Панель администратора отключена, если это значение не установлено.

  • SENDS_ALLOWED

Определяет, разрешено ли пользователям создавать отправки. Этот параметр применяется глобально ко всем пользователям. Чтобы контролировать это отдельно для каждой организации, используйте политику организации «Отключить отправку».

  • EMERGENCY_ACCESS_ALLOWED

Определяет, могут ли пользователи включать экстренный доступ к своим учетным записям. Этот параметр применяется глобально ко всем пользователям.

  • WEB_VAULT_ENABLED

Этот параметр определяет, доступно ли веб-хранилище. Остановка вашего контейнера, затем переключение этого значения на false и перезапуск Vaultwarden может оказаться полезным, если вы настроили свои учетные записи и клиенты для предотвращения несанкционированного доступа.

  • LOG_FILE

Путь к файлу журнала.

  • ORG_GROUPS_ENABLED

БЕТА-ФУНКЦИЯ. Определяет, включена ли поддержка групп для организаций. Этот параметр применяется к организациям. По умолчанию отключено, поскольку это бета-функция и содержит проблемы!

  • ORG_CREATION_USERS

Определяет, какие пользователи могут создавать новые организации. Пусто или "все" означает, что все пользователи могут создавать организации (это значение по умолчанию). 'none' означает, что ни один пользователь не может создавать организации. Список, разделенный запятыми, означает, что только эти пользователи могут создавать организации.

  • ORG_EVENTS_ENABLED

Определяет, включено ли ведение журнала событий для организаций. Этот параметр применяется к организациям. По умолчанию отключено.

  • TZ

Настройка часового пояса.

Настройки, используемые для управления регистрацией учетных записей в Vaultwarden.

SIGNUPS_ALLOWED: false
SIGNUPS_VERIFY: true
SIGNUPS_VERIFY_RESEND_TIME: 3600
SIGNUPS_VERIFY_RESEND_LIMIT: 5
SIGNUPS_DOMAINS_WHITELIST: loc.ru,gmail.com
  • SIGNUPS_ALLOWED

Этот параметр определяет, могут ли новые пользователи регистрировать учетные записи без приглашения.

  • SIGNUPS_VERIFY

Определяет, необходимо ли новым пользователям подтверждать свой адрес электронной почты при регистрации. Обратите внимание, что установка для этой опции значения true предотвращает вход в систему до тех пор, пока адрес электронной почты не будет подтвержден! Приветственное письмо будет содержать ссылку для подтверждения, и попытки входа будут периодически запускать отправку еще одного письма с подтверждением.

  • SIGNUPS_VERIFY_RESEND_TIME

Если для SIGNUPS_VERIFY установлено значение true, это значение указывает, сколько секунд пользователь должен подождать, прежде чем можно будет отправить еще одно письмо с подтверждением.

  • SIGNUPS_VERIFY_RESEND_LIMIT

Если для SIGNUPS_VERIFY установлено значение true, это значение определяет максимальное количество повторных отправлений подтверждения по электронной почте.

  • SIGNUPS_DOMAINS_WHITELIST

Этот параметр представляет собой список доменов, разделенных запятыми, которые могут регистрироваться для учетных записей Vaultwarden, даже если для параметра SIGNUPS_ALLOWED установлено значение false. Это полезно, когда ваши учетные записи Vaultwarden должны использоваться именно адресами электронной почты, домены которых вы контролируете.

Настройки учетной записи электронной почты SMTP, чтобы Vaultwarden отправлял электронные письма.

SMTP_HOST: smtp.mail.com
SMTP_FROM: mail@mail.com
SMTP_FROM_NAME: Vaultwarden
SMTP_SECURITY: starttls
SMTP_PORT: 587
SMTP_USERNAME: mail@mail.com
SMTP_PASSWORD: mail_password
  • SMTP_HOST

Почтовый SMTP сервер.

  • SMTP_FROM

Адрес электронной почты, с которого будут отправляться сообщения.

  • SMTP_FROM_NAME

Имя, которое вы хотите отображать в качестве имени учетной записи электронной почты в отправленных сообщениях.

  • SMTP_SECURITY

Метод безопасности, используемый вашим SMTP сервером. Возможные значения: starttls, force_tls, off.

  • SMTP_PORT

Порт SMTP, используемый почтовым сервером. Возможные значения: 587/465.

  • SMTP_USERNAME

Логин для почтового SMTP сервера.

  • SMTP_ПАРОЛЬ

Пароль для учетных данных SMTP.

Подготовка конфигурационных файлов

Создаем файл compose.yml и добавляем в него следующие строки:

services:
  vaultwarden:
    image: vaultwarden/server:1.30.5
    container_name: vaultwarden
    restart: always
    environment:
      #
      - DOMAIN=${DOMAIN}
      - LOGIN_RATELIMIT_SECONDS=${LOGIN_RATELIMIT_SECONDS}
      - LOGIN_RATELIMIT_MAX_BURST=${LOGIN_RATELIMIT_MAX_BURST}
      - ADMIN_RATELIMIT_SECONDS=${ADMIN_RATELIMIT_SECONDS}
      - ADMIN_RATELIMIT_MAX_BURST=${ADMIN_RATELIMIT_MAX_BURST}
      - ADMIN_SESSION_LIFETIME=${ADMIN_SESSION_LIFETIME}
      - ADMIN_TOKEN=${ADMIN_TOKEN}
      - SENDS_ALLOWED=${SENDS_ALLOWED}
      - EMERGENCY_ACCESS_ALLOWED=${EMERGENCY_ACCESS_ALLOWED}
      - WEB_VAULT_ENABLED=${WEB_VAULT_ENABLED}
      - LOG_FILE=${LOG_FILE}
      - ORG_GROUPS_ENABLED=${ORG_GROUPS_ENABLED}
      - ORG_CREATION_USERS=${ORG_CREATION_USERS}
      - ORG_EVENTS_ENABLED=${ORG_EVENTS_ENABLED}
      - TZ=${TZ}
      #
      - SIGNUPS_ALLOWED=${SIGNUPS_ALLOWED}
      - SIGNUPS_VERIFY=${SIGNUPS_VERIFY}
      - SIGNUPS_VERIFY_RESEND_TIME=${SIGNUPS_VERIFY_RESEND_TIME}
      - SIGNUPS_VERIFY_RESEND_LIMIT=${SIGNUPS_VERIFY_RESEND_LIMIT}
      - SIGNUPS_DOMAINS_WHITELIST=${SIGNUPS_DOMAINS_WHITELIST}
      #
      - SMTP_HOST=${SMTP_HOST}
      - SMTP_FROM=${SMTP_FROM}
      - SMTP_FROM_NAME=${SMTP_FROM_NAME}
      - SMTP_SECURITY=${SMTP_SECURITY}
      - SMTP_PORT=${SMTP_PORT}
      - SMTP_USERNAME=${SMTP_USERNAME}
      - SMTP_PASSWORD=${SMTP_PASSWORD}
    volumes:
      - ./vw-data:/data
    ports:
      - 8080:80

В файл .env прописываем нужные переменные и их значения:

DOMAIN: https://vaultwarden.loc.ru
LOGIN_RATELIMIT_SECONDS: 60
LOGIN_RATELIMIT_MAX_BURST: 10
ADMIN_RATELIMIT_SECONDS: 60
ADMIN_RATELIMIT_MAX_BURST: 10
ADMIN_SESSION_LIFETIME: 20
ADMIN_TOKEN: 'зашифрованный пароль'
SENDS_ALLOWED: false
EMERGENCY_ACCESS_ALLOWED: true
WEB_VAULT_ENABLED: true
LOG_FILE: /data/vaultwarden.log
ORG_GROUPS_ENABLED: false
ORG_CREATION_USERS: none
ORG_EVENTS_ENABLED: true
TZ: "Europe/Moscow"
SIGNUPS_ALLOWED: false
SIGNUPS_VERIFY: true
SIGNUPS_VERIFY_RESEND_TIME: 3600
SIGNUPS_VERIFY_RESEND_LIMIT: 5
SIGNUPS_DOMAINS_WHITELIST: loc.ru
SMTP_HOST: smtp.gmail.com
SMTP_FROM: drhellp@gmail.com
SMTP_FROM_NAME: drhellp
SMTP_SECURITY: force_tls
SMTP_PORT: 465
SMTP_USERNAME: drhellp@gmail.com
SMTP_PASSWORD: Password

Отключение страницы администратора

disabling-the-admin-page

Для отключения Admin панели можно поставить знак комментария # перед ADMIN_TOKEN в файле .env и перезапустить сервер.

Удаление переменной среды ADMIN_TOKEN не приведет к отключению страницы администратора, если значение сохраняется в config.json файле. Чтобы отключить страницу администратора , следует убедиться, что переменная среды ADMIN_TOKEN не установлена ​​и не существует ключа "admin_token" в config.json, если этот файл существует.

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

Для использования gmail.com аккаунта в качестве сервера smtp, необходимо создать пароль приложения и выполнить следующие настройки:

SMTP_HOST: smtp.gmail.com
SMTP_FROM: account@gmail.com
SMTP_FROM_NAME: account
SMTP_SECURITY: force_tls
SMTP_PORT: 465
SMTP_USERNAME: account@gmail.com
SMTP_PASSWORD: APP_PASSWORD_YOU_GENERATED

Добавляем пользователя

Запускаем docker контейнер и настраиваем SSL доступ через Nginx или другой прокси.

Переходим по адресу https://vaultwarden.loc.ru/admin и вводим пароль, который шифровали. Переходим в меню Users и отправляем Invite на почту пользователю.

Проверяем почту и присоединяемся к организации. Создаем аккаунт и заходим в систему.

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

Устанавливаем и настраиваем расширение для браузера или клиент для мобильного или приложение Bitwarden.