Удельта

Пошаговая инструкция · Самостоятельная установка

Как установить Passbolt на Ubuntu для общих паролей команды

Пошаговая инструкция для самостоятельной установки. Установим Passbolt Community Edition, создадим первого администратора и проверим общий пароль двух сотрудников. Настроим HTTPS и почту, а в резервную копию включим базу и ключи сервера.

Первый общий секрет помещён в защищённое хранилище с отдельными ключами доступа участников

Что подготовить и как читать инструкцию #

Passbolt организует общие секреты команды с доступом через браузерное расширение и учётные записи сотрудников. Здесь ставим Community Edition на один узел с MariaDB; коммерческие возможности Pro автоматически не появляются. До переноса настоящих паролей проверим обмен между двумя пробными пользователями и восстановление их доступа.

Нужны чистая Ubuntu 26.04 LTS, SSH, домен passwords.example.com, Docker Engine, Compose v2 и Nginx из общей подготовки сервера. Дополнительно подготовьте рабочий SMTP-сервис: приглашения и уведомления входят в пользовательский путь. Проверьте синхронизацию времени хоста — неверные часы могут нарушить GPG-аутентификацию.

Команды выполняйте в терминале сервера после подключения по SSH, если шаг не указывает другое место. sudo даёт команде права администратора. Действия в браузере выполняйте на своём компьютере. Домены, IP-адреса и значения ВАШ_ПАРОЛЬ из примеров заменяйте своими до выполнения команды.

Двигайтесь по одному шагу и проверяйте результат перед следующим. Блок с <<EOF или другим именем завершения копируйте целиком: он записывает содержимое одного файла. При работе в nano сохраняйте файл клавишами Ctrl+O, Enter и выходите Ctrl+X. Если прервали SSH-сеанс, снова перейдите в указанный каталог; переменные предыдущего сеанса потребуется задать заново.

Настройка внешнего доступа использует обратный прокси Nginx и Certbot для Nginx. Приложение остаётся доступным на локальном порту; снаружи открыт его HTTPS-домен.

Шаг 1. Создайте каталог Passbolt #

Все команды Compose выполняем в ~/services/passbolt. В папке будут описание установки и секреты.

Создайте каталог Passbolt
mkdir -p ~/services/passbolt
cd ~/services/passbolt

Вы находитесь в нужном каталоге.

Шаг 2. Создайте пароль базы #

Случайный пароль попадёт в закрытый .env. Это пароль MariaDB, а не парольная фраза личного ключа Passbolt.

Создайте пароль базы
umask 077
printf 'DB_PASSWORD=%s
' "$(openssl rand -hex 24)" > .env

DB_PASSWORD заполнен; файл не передавайте пользователям.

Шаг 3. Добавьте SMTP-настройки #

Откройте nano .env и добавьте строки ниже, заменив примеры реквизитами своего почтового сервиса. Пример использует STARTTLS; порт и TLS должны соответствовать провайдеру. Почта нужна приглашениям и регистрации.

Добавьте SMTP-настройки
EMAIL_DEFAULT_FROM=passbolt@example.com
EMAIL_DEFAULT_FROM_NAME=Passbolt
EMAIL_TRANSPORT_DEFAULT_HOST=smtp.example.com
EMAIL_TRANSPORT_DEFAULT_PORT=587
EMAIL_TRANSPORT_DEFAULT_USERNAME=passbolt@example.com
EMAIL_TRANSPORT_DEFAULT_PASSWORD=REPLACE_WITH_SMTP_PASSWORD
EMAIL_TRANSPORT_DEFAULT_TLS=true

В .env сохранён пароль базы и добавлены SMTP-параметры.

Шаг 4. Сохраните Compose #

Откройте nano compose.yaml и вставьте YAML. APP_FULL_BASE_URL должен содержать ваш HTTPS-домен passwords.example.com. MariaDB хранит данные, каталоги GPG/JWT — серверные ключи.

Сохраните Compose
services:
  db:
    image: mariadb:10.11
    restart: unless-stopped
    environment:
      MYSQL_RANDOM_ROOT_PASSWORD: 'true'
      MYSQL_DATABASE: passbolt
      MYSQL_USER: passbolt
      MYSQL_PASSWORD: ${DB_PASSWORD:?set database password}
    volumes:
      - database:/var/lib/mysql
  passbolt:
    image: passbolt/passbolt:5.16.0-1-ce
    restart: unless-stopped
    env_file: .env
    environment:
      APP_FULL_BASE_URL: https://passwords.example.com
      DATASOURCES_DEFAULT_HOST: db
      DATASOURCES_DEFAULT_USERNAME: passbolt
      DATASOURCES_DEFAULT_PASSWORD: ${DB_PASSWORD}
      DATASOURCES_DEFAULT_DATABASE: passbolt
      PASSBOLT_SSL_FORCE: 'true'
      PASSBOLT_SECURITY_PROXIES_ACTIVE: 'true'
      PASSBOLT_PLUGINS_SELF_REGISTRATION_ENABLED: 'false'
      DEBUG: 'false'
    command: ['/usr/bin/wait-for.sh', '-t', '0', 'db:3306', '--', '/docker-entrypoint.sh']
    ports:
      - '127.0.0.1:8088:80'
    volumes:
      - gpg:/etc/passbolt/gpg
      - jwt:/etc/passbolt/jwt
    depends_on:
      - db
volumes:
  database:
  gpg:
  jwt:

Все переменные берутся из .env; порт приложения доступен только локально.

Шаг 5. Проверьте описание установки #

Compose проверит структуру YAML и наличие параметров.

Проверьте описание установки
docker compose config --quiet

config --quiet завершился без ошибки.

Шаг 6. Загрузите образы #

Скачиваем согласованные версии Passbolt и базы; пока не регистрируем пользователей.

Загрузите образы
docker compose pull

pull завершился успешно.

Шаг 7. Запустите контейнеры #

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

Запустите контейнеры
docker compose up -d

Контейнеры созданы; ждём проверки состояния.

Шаг 8. Проверьте запуск #

ps и журнал помогут отличить обычную подготовку базы от повторяющейся ошибки.

Проверьте запуск
docker compose ps
docker compose logs --tail=100 passbolt

База и Passbolt работают без цикла перезапусков.

Шаг 9. Ограничьте первоначальный доступ #

До регистрации администратора разрешите HTTPS только своему IP в firewall провайдера. Порт 80 оставьте для выпуска сертификата.

Первоначальная настройка доступна только вам.

Шаг 10. Сохраните сайт Nginx #

Установите Nginx и Certbot по подготовке Ubuntu, если ещё не установили. Откройте sudo nano /etc/nginx/sites-available/passbolt и вставьте файл ниже. Замените все домены своими. Nginx передаёт приложению домен, адрес клиента и протокол; Upgrade и Connection сохраняют WebSocket. До получения сертификата условие $scheme блокирует обычные HTTP-запросы кодом 403, чтобы вход не происходил без шифрования.

Файл /etc/nginx/sites-available/passbolt
map $http_upgrade $passbolt_connection_upgrade {
    default upgrade;
    "" close;
}

server {
    listen 80;
    server_name passwords.example.com;
    client_max_body_size 100m;
    location / {
        if ($scheme = http) { return 403; }
        proxy_pass http://127.0.0.1:8088;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $passbolt_connection_upgrade;
        proxy_read_timeout 3600s;
        proxy_send_timeout 3600s;
        proxy_buffering off;
    }
}

Сохраните Ctrl+O, Enter, Ctrl+X. В файле пока нет путей к сертификатам: Nginx сможет проверить его до выпуска HTTPS.

Шаг 11. Подключите сайт и проверьте HTTP #

Ссылка подключает сохранённый сайт. nginx -t проверяет все настройки сервера; && разрешает перечитать их только при успешной проверке. curl проверяет ответ для вашего домена. При ошибке остановитесь, исправьте указанную строку и повторите проверку.

Подключите сайт и проверьте HTTP
sudo ln -sfn /etc/nginx/sites-available/passbolt /etc/nginx/sites-enabled/passbolt
sudo nginx -t && sudo systemctl reload nginx
curl -I http://passwords.example.com/

Ожидается successful от nginx -t и HTTP 403 для обычного запроса: до HTTPS это намеренная блокировка. DNS должен указывать на сервер, TCP 80/443 — быть доступен у провайдера. Ничего не вводите в форму входа по HTTP.

Шаг 12. Получите сертификат и включите HTTPS #

Каждое имя из команды должно указывать на этот сервер. Certbot проверит домены, сам добавит сертификат в сайт Nginx и включит перенаправление HTTP → HTTPS. Укажите свою почту при запросе и подтвердите условия Let’s Encrypt. Это отдельное действие после успешной проверки HTTP.

Получите сертификат и включите HTTPS
sudo /snap/bin/certbot --nginx -d passwords.example.com --redirect

Certbot сообщил об успешной установке. Откройте HTTPS-адрес со своего компьютера: браузер не должен предупреждать о сертификате. Для закрытой панели используйте разрешённый IP. При ошибке исправьте DNS, в том числе AAAA, либо доступ к TCP 80; не повторяйте запросы выпуска подряд.

Шаг 13. Проверьте продление сертификата #

Certbot из snap создаёт службу автоматического продления. Dry-run выполняет пробное продление: настоящие сертификаты не заменяются. Затем проверьте, что таймер планирует следующий запуск. Сохраняйте доступ к TCP 80 для следующих проверок домена.

Проверьте продление сертификата
sudo /snap/bin/certbot renew --dry-run
systemctl list-timers --all 'snap.certbot.renew*'

Пробное продление успешно, у таймера есть следующий запуск. Если тест не прошёл, проверьте /var/log/letsencrypt/letsencrypt.log; сначала исправьте причину. После этого можно создавать учётную запись и приглашать пользователей.

Шаг 14. Создайте администратора #

Замените admin@example.com настоящим адресом. Команда register_user выводит персональную ссылку завершения регистрации. Это временный доступ, а не публичная ссылка на главную страницу.

Создайте администратора
docker compose exec --user www-data passbolt   /usr/share/php/passbolt/bin/cake passbolt register_user   -u admin@example.com -f Server -l Administrator -r admin

Ссылка относится к вашему HTTPS-домену; открывайте её только в своей сессии.

Шаг 15. Создайте личный ключ #

Перейдите по ссылке. Установите официальное расширение Passbolt из магазина браузера и завершите мастер создания ключа. Выберите уникальную парольную фразу: она защищает ваши зашифрованные ресурсы.

Мастер завершён и открыт личный интерфейс Passbolt.

Шаг 16. Сохраните recovery kit #

Скачайте комплект восстановления и храните отдельно от сервера и браузера. Личный закрытый ключ и его парольная фраза нужны для доступа к вашим ресурсам; резервная копия сервера не заменяет этот комплект.

Комплект сохранён; повторный вход с расширением и парольной фразой работает.

Шаг 17. Проверьте состояние Passbolt #

Штатный healthcheck проверяет конфигурацию и окружение. Предупреждения о HTTPS, ключах и почте нужно разобрать до приглашения команды.

Проверьте состояние Passbolt

docker compose exec --user www-data passbolt   /usr/share/php/passbolt/bin/cake passbolt healthcheck

Проверки успешны; понятна причина оставшихся предупреждений.

Шаг 18. Создайте тестовый пароль и поделитесь #

Добавьте вымышленную тестовую запись. Пригласите второго пользователя и выдайте доступ только к ней. В его браузере проверьте чтение; при выборе роли без изменения он не должен редактировать запись.

Приглашение доставлено, доступ соответствует выбранным правам.

Шаг 19. Остановите приложение для копии #

Создадим закрытый каталог и остановим только Passbolt; база продолжит работать для выгрузки.

Остановите приложение для копии
umask 077
mkdir -p "$HOME/backups/passbolt"
docker compose stop passbolt

Веб-приложение остановлено, MariaDB доступна.

Шаг 20. Выгрузите базу #

mariadb-dump читает реквизиты из окружения контейнера: пароль не нужно вставлять в командную строку.

Выгрузите базу
docker compose exec -T db sh -c   'MYSQL_PWD="$MYSQL_PASSWORD" mariadb-dump --single-transaction -u "$MYSQL_USER" "$MYSQL_DATABASE"'   > "$HOME/backups/passbolt/database.sql"

database.sql создан без ошибки и не пуст.

Шаг 21. Сохраните серверные ключи и конфигурацию #

Скопируем GPG, JWT, .env и compose.yaml. База без этих ключей не является полной серверной копией. Ограничьте доступ ко всему каталогу копий.

Сохраните серверные ключи и конфигурацию
docker compose cp passbolt:/etc/passbolt/gpg "$HOME/backups/passbolt/gpg"
docker compose cp passbolt:/etc/passbolt/jwt "$HOME/backups/passbolt/jwt"
cp .env compose.yaml "$HOME/backups/passbolt/"

Все четыре части сохранены. Перенесите каталог в закрытое внешнее хранилище.

Шаг 22. Верните сервис и проверьте копию #

Запустите приложение. На отдельном сервере той же версии проверьте восстановление базы и серверных ключей вместе; затем вход и чтение тестовой записи. Пользовательские recovery kit сохраняются отдельно.

Верните сервис и проверьте копию
docker compose start passbolt

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

Если результат шага отличается #

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

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

Настройки внешнего доступа храните вместе с копией приложения: /etc/nginx/sites-available/passbolt и /etc/letsencrypt содержат сайт и сертификаты с закрытыми ключами. Архивируйте их с sudo в закрытое хранилище. После восстановления подключите сайт через sites-enabled, выполните sudo nginx -t, затем перечитайте Nginx. Для ошибки 502 сначала проверьте локальное приложение и /var/log/nginx/error.log; для сертификата — /var/log/letsencrypt/letsencrypt.log и таймер продления.

Обсудить установку и настройку

Материал был полезен?

Сообщить об ошибке или задать вопрос редакции

Сообщение увидит редакция. Не указывайте пароли и личные данные. Текст удаляется через 180 дней.

О материале

ИнфраструктураРуководствоЗадача: установитьУровень: практикаPassbolt

Последнее обновление:

Обсуждение

Комментарии проходят подтверждение адреса и проверку редакцией.