Установка Passbolt на CentOS 7 — пошаговый гид
Passbolt — свободный менеджер паролей для команд. В этом руководстве подробно показано, как установить Passbolt на CentOS 7 под стеком LEMP (Nginx, MariaDB, PHP-FPM), настроить SSL через Let’s Encrypt, создать OpenPGP-ключ сервера, выполнить постустановку и базовую жёсткую настройку безопасности. Включены проверки, сценарии устранения неполадок, правила SELinux и шаблоны задач для ролей.
Этот материал шаг за шагом ведёт системного администратора (или инженера DevOps) через установку Passbolt на сервер CentOS 7. Здесь собраны практические команды, примеры конфигураций, рекомендации по безопасности и возможные причины ошибок с решениями.
Важно: все команды предполагают, что у вас есть root-доступ или sudo-привилегии.
Кратко о терминах
- LEMP: Linux + Nginx + MariaDB/MySQL + PHP-FPM. Простая аббревиатура для используемого стека.
- OpenPGP / GPG: криптографический стандарт для шифрования/подписывания ключей, используемый Passbolt для шифрования секретов.
Содержание
- Предварительные требования
- Шаг 1: установка зависимостей
- Шаг 2: установка и настройка MariaDB
- Шаг 3: установка Nginx и PHP-FPM
- Шаг 4: получение SSL через Let’s Encrypt
- Шаг 5: настройка Nginx и PHP-FPM
- Шаг 6: загрузка Passbolt и генерация OpenPGP-ключа
- Шаг 7: установка Passbolt
- Шаг 8: постустановка и подключение расширений браузера
- Шаг 9: дополнительные меры безопасности
- Технические примечания, отладка, резервное копирование и процедуры восстановления
- Чек-листы для ролей и план действий на случай инцидента
Предварительные требования
- Сервер с CentOS 7 (обновлённый).
- Доступ root или пользователь с sudo.
- DNS-запись домена, указывающая на сервер (например, passbolt.example.com).
- Публичный почтовый сервер или SMTP-данные для отправки писем (регистрaция, уведомления).
Совет: проводите установку на чистой виртуальной машине или в тестовой среде перед развёртыванием в продакшн.
Что мы сделаем
- Установим репозитории и зависимости.
- Установим и настроим MariaDB.
- Установим Nginx и PHP-FPM с необходимыми расширениями.
- Получим SSL-сертификат через Let’s Encrypt.
- Настроим виртуальный хост Nginx и PHP-FPM.
- Загрузим Passbolt и сгенерируем OpenPGP-ключ сервера.
- Установим Passbolt и создадим администратора.
- Завершим постустановку и подключим расширение браузера.
- Введём дополнительные меры безопасности: firewall, SELinux, резервирование ключей.
Шаг 1 — установка зависимостей
Мы установим EPEL и Remi (для современного PHP), затем основные утилиты.
Добавляем репозиторий EPEL и утилиты:
sudo yum -y install yum-utils epel-releaseДобавляем и включаем репозиторий Remi для PHP 7.2 (или другой поддерживаемой версии, советуем проверить требования Passbolt):
sudo yum -y install 'http://rpms.remirepo.net/enterprise/remi-release-7.rpm'
sudo yum-config-manager --enable 'remi-php72'Устанавливаем основные пакеты (composer, git, gcc и пр.):
sudo yum -y install unzip wget composer policycoreutils-python git gccПояснения:
- Composer — менеджер PHP-зависимостей; он понадобится для установки зависимостей Passbolt.
- policycoreutils-python — утилиты SELinux, полезны для настройки контекстов файлов.
Проверьте успешность установки командой yum и исправьте возможные сетевые проблемы перед продолжением.
Шаг 2 — установка и конфигурация MariaDB
Устанавливаем MariaDB:
sudo yum -y install mariadb-serverЗапускаем сервис и включаем автозагрузку:
sudo systemctl start mariadb
sudo systemctl enable mariadbИнициализируем безопасную конфигурацию MariaDB (включает установку root-пароля, удаление анонимных пользователей и тестовой базы):
mysql_secure_installationДалее создаём базу данных и пользователя для Passbolt (замените пароли на безопасные):
mysql -u root -p
create database passbolt;
grant all on passbolt.* to 'passbolt'@'localhost' identified by 'hakase-labs';
flush privileges;
quit;Рекомендация безопасности: используйте сложный пароль вместо примера ‘hakase-labs’ и, при необходимости, ограничьте доступ к базе только с локального IP.
Частые проблемы и их решения:
- Ошибка аутентификации: убедитесь, что вы ввели правильный root-пароль при входе в mysql.
- Если MariaDB не запускается — проверьте
journalctl -u mariadbи логи в /var/log/mariadb.
Шаг 3 — установка Nginx и PHP-FPM
Устанавливаем Nginx:
sudo yum -y install nginx
sudo systemctl start nginx
sudo systemctl enable nginxУстанавливаем PHP-FPM и расширения, которые понадобятся Passbolt (включая gpgme/gnupg):
sudo yum -y install php-fpm php-intl php-gd php-mysql php-mbstring php-pear php-devel gpgme-develПримечание: пакет php-mcrypt в новых репозиториях может отсутствовать; он не обязателен для последних версий Passbolt.
Запускаем и включаем PHP-FPM:
sudo systemctl start php-fpm
sudo systemctl enable php-fpmУбедитесь, что версии PHP совместимы с текущей версией Passbolt. Если нужно, используйте Remi для установки другой ветки PHP.
Шаг 4 — получение SSL через Let’s Encrypt
Устанавливаем certbot:
sudo yum -y install certbotОстановите nginx на время валидации (certbot будет слушать порт 80):
sudo systemctl stop nginxГенерируем сертификат для домена passbolt.example.com (замените адрес и email):
sudo certbot certonly --standalone --agree-tos --no-eff-email --email admin@example.com -d passbolt.example.comПосле успешного выполнения сертификаты будут в /etc/letsencrypt/live/passbolt.example.com/. Настройте автоматическое обновление (см. ниже в разделе о cron).
Совет: в продакшне используйте автоматическое обновление certbot (systemd timer или cron). Пример cron для обновления и перезапуска nginx:
0 3 * * * /usr/bin/certbot renew --quiet --post-hook "systemctl reload nginx"Шаг 5 — настройка PHP-FPM и Nginx
Конфигурация PHP-FPM
Редактируем пул www в /etc/php-fpm.d/www.conf и ставим пользователя nginx:
cd /etc/php-fpm.d/
sudo vim www.confИзменяем:
user = nginx
group = nginx
listen = /var/run/php-fpm/php-fpm.sock
listen.owner = nginx
listen.group = nginx
listen.mode = 0660Устанавливаем права на сессии PHP:
sudo chgrp nginx /var/lib/php/sessionУстанавливаем расширение gnupg через pecl и включаем его:
sudo pecl install gnupg
echo "extension=gnupg.so" | sudo tee /etc/php.d/gnupg.iniПерезапустите PHP-FPM:
sudo systemctl restart php-fpmКонфигурация Nginx
Создаём виртуальный хост /etc/nginx/conf.d/passbolt.conf (вставьте свою доменную зону):
server {
listen 443;
server_name passbolt.example.com;
ssl on;
ssl_certificate /etc/letsencrypt/live/passbolt.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/passbolt.example.com/privkey.pem;
ssl_protocols TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS;
ssl_session_tickets off;
root /var/www/passbolt;
location / {
try_files $uri $uri/ /index.php?$args;
index index.php;
}
location ~ \.php$ {
fastcgi_index index.php;
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(.+)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SERVER_NAME $http_host;
}
location ~* \.(jpe?g|woff|woff2|ttf|gif|png|bmp|ico|css|js|json|pdf|zip|htm|html|docx?|xlsx?|pptx?|txt|wav|swf|svg|avi|mp\d)$ {
access_log off;
log_not_found off;
try_files $uri /webroot/$uri /index.php?$args;
}
}Проверяем конфиг и перезапускаем сервисы:
sudo nginx -t
sudo systemctl restart nginx
sudo systemctl restart php-fpmСовет по безопасности: включите HSTS (строгие заголовки безопасности) и Content-Security-Policy при деплое в продакшн.
Шаг 6 — загрузка Passbolt и генерация OpenPGP-ключа сервера
Клонируем репозиторий Passbolt в /var/www/passbolt:
cd /var/www/
sudo git clone https://github.com/passbolt/passbolt_api.git passbolt/Устанавливаем haveged для достаточного энтропии при генерации ключей и запускаем:
sudo yum -y install haveged
sudo systemctl start havegedГенерируем OpenPGP-ключ (gpg). Во время генерации используйте системный email и не указывайте passphrase (Passbolt не поддерживает passphrase для серверного ключа через PHP-gnupg):
gpg --gen-keyПроверяем отпечаток (fingerprint):
gpg --list-keys --fingerprintЭкспортируем публичный и приватный ключи в каталог конфигурации Passbolt (замените email):
gpg --armor --export-secret-keys admin@example.com > /var/www/passbolt/config/gpg/serverkey_private.asc
gpg --armor --export admin@example.com > /var/www/passbolt/config/gpg/serverkey.ascУстанавливаем корректные права и владельца:
sudo chmod 640 /var/www/passbolt/config/gpg/serverkey*
sudo chown -R nginx:nginx /var/www/passboltПримечание по безопасности: приватный ключ сервера должен иметь минимально необходимые права и храниться только на сервере, к которому имеют доступ уполномоченные администраторы.
Шаг 7 — установка Passbolt
Инициализируем keyring для пользователя nginx:
sudo su -s /bin/bash -c "gpg --list-keys" nginxПереходим под пользователя nginx и в каталог приложения:
su -s /bin/bash nginx
cd /var/www/passbolt/Устанавливаем PHP-зависимости без dev-пакетов:
composer install --no-devКопируем конфигурационный файл и редактируем его:
cp config/passbolt.default.php config/passbolt.php
vim config/passbolt.phpОбратите внимание на ключевые секции:
- App.fullBaseUrl — укажите https://passbolt.example.com
- Datasources.default — параметры подключения к базе
- ssl.force — true для принудительного использования SSL
- EmailTransport / Email — параметры SMTP
- serverKey.fingerprint, public, private — вставьте отпечаток и пути к ключам
После корректной правки сохраняем файл и запускаем установку:
./bin/cake passbolt installВ процессе установки будет предложено создать администратора (email и пароль). По завершении утилита выдаст ссылку регистрации — сохраните её, она понадобится для первичной регистрации администратора в браузере.
Частые ошибки и решения:
- Ошибка при выполнении composer: проверьте версию PHP и расширения (gmp, mbstring, intl и пр.).
- Ошибка GPG: убедитесь, что ключи доступны и владелец файлов — nginx.
Шаг 8 — постустановка и подключение расширения браузера
- Установите расширение Passbolt для вашего браузера (например, Chrome или Firefox). Ссылки размещены в официальной документации.
- Откройте ссылку регистрации, которую дала утилита установки. Следуйте шагам мастера: проверка плагина, генерация пользовательского ключа, резервное копирование ключа, установка passphrase для личного ключа.
- Войдите в систему, используя passphrase, и убедитесь, что вы видите панель управления Passbolt.
Проверки работы:
- Создайте тестовую запись (логин/пароль) и сохраните.
- Поделитесь записью с другим тестовым пользователем.
- Проверьте шифрование: данные, сохранённые в базе, должны быть зашифрованы.
Шаг 9 — дополнительные меры безопасности
Настройка firewalld
Открываем HTTP/HTTPS/SMTP (если нужен):
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-service=https --permanent
sudo firewall-cmd --add-service=smtp --permanent
sudo firewall-cmd --reloadSELinux
Если SELinux включён, задаём контексты для веб-каталога Passbolt и ключей GnuPG:
sudo semanage fcontext -a -t httpd_sys_content_t '/var/www(/.*)?'
sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/passbolt/tmp(/.*)?'
sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/passbolt/logs(/.*)?'
sudo restorecon -Rv /var/www
sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/lib/nginx/.gnupg(/.*)?'
sudo restorecon -Rv /var/lib/nginx/.gnupgЕсли у вас нет semanage, установите пакет policycoreutils-python.
Автоматическое обновление сертификатов
Добавьте cron или systemd timer, чтобы certbot автоматически обновлял сертификат и перезагружал nginx:
0 3 * * * /usr/bin/certbot renew --quiet --post-hook "systemctl reload nginx"Жёсткая настройка HTTP заголовков
Добавьте в конфигурацию Nginx заголовки безопасности:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options DENY;
add_header X-XSS-Protection "1; mode=block";Резервное копирование и хранение ключей
- Резервируйте папку /var/www/passbolt/config/gpg/ в защищённое хранилище off-site.
- Храните резервные копии базы данных (dump) с шифрованием и контролем доступа.
- Тестируйте восстановление на отдельной VM.
Пример простого бэкапа базы:
mysqldump -u root -p passbolt | gzip > /root/backups/passbolt-$(date +%F).sql.gzОтладка и типичные ошибки
- Ошибка 500 в браузере:
- Проверьте логи Nginx (/var/log/nginx/error.log) и логи Passbolt (/var/www/passbolt/logs).
- Убедитесь, что права на файлы корректны (владелец nginx).
- Ошибка GPG при создании ключа или импорте:
- Проверьте, что keyring пользователя nginx и права на /var/lib/nginx/.gnupg корректны.
- Ошибки при composer install:
- Убедитесь в корректной версии PHP и доступности расширений.
- Проблемы с отправкой почты:
- Проверьте настройки SMTP, порт, TLS/SSL; попробуйте отправить тестовое письмо с помощью
swaksилиtelnet.
- Проверьте настройки SMTP, порт, TLS/SSL; попробуйте отправить тестовое письмо с помощью
Чек-лист приёмки (Критерии приёмки)
- Сертификат HTTPS выдан и корректно установлен.
- Веб-интерфейс доступен по https://passbolt.example.com.
- Админ-аккаунт создан и можно войти через расширение браузера.
- Серверный OpenPGP-ключ импортирован, fingerprint указан в config.
- База данных создана и доступна для приложения.
- SELinux и firewall настроены, если включены в системе.
- Автоматическое обновление certbot настроено и протестировано.
Чек-листы для ролей
Администратор безопасности:
- Проверить наличие и правильность отпечатков ключей.
- Убедиться в безопасном хранении приватного ключа сервера.
- Проверить политику паролей для пользователей.
Системный администратор:
- Настроить бэкапы БД и конфигураций.
- Обеспечить мониторинг и алерты для nginx/php-fpm/mariadb.
- Настроить автоматическое обновление сертификатов.
DevOps инженер:
- Автоматизировать развёртывание (Ansible/Terraform/Chef).
- Добавить интеграцию CI/CD для обновления и тестирования.
План действий при инциденте (краткий runbook)
- Если приватный ключ сервера скомпрометирован — немедленно отозвать сертификат, сгенерировать новый OpenPGP-ключ и обновить config, затем сообщить пользователям и восстановить из безопасных резервных копий.
- Если база данных утекла — изолировать сервер, оценить объём утечки, восстановить базу из резервной копии на чистом сервере, сменить ключи и пароли.
- Для подозрительной активности входа — временно отключить внешние подключения, сбросить сессии пользователей и проинформировать команду безопасности.
Мини-методология развёртывания (быстрый SOP)
- Тестовая VM: развернуть и пройти все шаги установки.
- Создать playbook/скрипты для автоматизации.
- Подготовить процесс резервного копирования и восстановления.
- Запустить в staging, прогнать acceptance тесты (чек-лист выше).
- Деплой в продакшн и включить мониторинг.
Модель зрелости безопасности (уровни)
- Уровень 1 — базовое развёртывание: HTTPS, базовые права, регулярные бэкапы.
- Уровень 2 — усиление: SELinux, HSTS, регулярные ревизии ключей, MFA для админов.
- Уровень 3 — продвинуто: изолированная PKI, аппаратные HSM для приватных ключей, SOC-интеграция.
Факто-бокс: ключевые пути и порты
- Веб-каталог: /var/www/passbolt
- Конфигурация Passbolt: /var/www/passbolt/config/passbolt.php
- Ключи GPG: /var/www/passbolt/config/gpg/
- SSL: /etc/letsencrypt/live/your-domain/
- PHP-FPM сокет: /var/run/php-fpm/php-fpm.sock
- Порты: 80 (HTTP), 443 (HTTPS), 3306 (MariaDB локально)
Схема решения проблем (Mermaid)
flowchart TD
A[Сайт недоступен по HTTPS] --> B{Nginx отвечает?}
B -- Нет --> C[Проверить nginx: systemctl status nginx]
B -- Да --> D{Ошибка 5xx?}
D -- Да --> E[Проверить логи /var/log/nginx и /var/www/passbolt/logs]
D -- Нет --> F{SSL валиден?}
F -- Нет --> G[Проверить certbot, /etc/letsencrypt и cron]
F -- Да --> H[Проверить права на файлы и владельца nginx]Краткое руководство по тестированию (acceptance / тест-кейсы)
- TC1: При первом входе через расширение пользователю предлагается сгенерировать ключ — PASS.
- TC2: Создание и сохранение записи; другая тестовая учетная запись должна видеть расшаренную запись — PASS.
- TC3: При перезапуске nginx и php-fpm приложение должно оставаться работоспособным — PASS.
- TC4: Ротация сертификатов certbot должна успешно обновлять сертификат без ручного вмешательства — PASS.
Ссылки и справка
- Официальная документация Passbolt по установке: https://help.passbolt.com/hosting/install
ВЫВОД
Passbolt — надёжное решение для командного хранения и совместного использования секретов. При аккуратном выполнении шагов выше вы получите полнофункциональную инстанцию с SSL, GPG-ключами сервера и базовой защитой. Для продакшна обязательно внедрите политику резервного копирования, мониторинга и регулярные проверки безопасности.
WIKI: сохраните конфигурационные файлы и шаги установки в вашей внутренней документации, укажите ответственных и процедуры восстановления.
Important: храните приватные ключи отдельно и защищённо.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента