🔐 Как установить Passbolt с PostgreSQL на сервер Ubuntu

Мануал

Passbolt – это менеджер паролей с открытым исходным кодом, который позволяет безопасно хранить и передавать учетные данные для входа на сайт, пароль роутера, пароль Wi-Fi и т.д.

В этом руководстве будет показано, как установить Passbolt Community Edition (CE) на Ubuntu 22.04 с сервером базы данных PostgreSQL, который обычно быстрее, чем сервер базы данных MariaDB/MySQL.

Особенности Passbolt

  • Бесплатный и с открытым исходным кодом
  • Пароли шифруются с помощью OpenPGP, проверенного криптографического стандарта.
  • Браузерные расширения доступны для Firefox, Google Chrome, Microsoft Edge и Brave Browser.
  • Мобильное приложение доступно для iOS и Android.
  • Легко делитесь учетными данными для входа в систему со своей командой без ущерба для безопасности.
  • Удобный интерфейс.
  • Импорт и экспорт паролей. Вы можете экспортировать пароли в файлы формата .kdbx или .csv для использования в KeepassX, LastPass или 1password.
  • Вы можете вручную добавить учетные данные для входа в систему.

Внимание: Совместимость Passbolt с PostgreSQL является экспериментальной. Если вы не хотите рисковать своими данными, используйте базу данных MariaDB/MySQL.

Требования

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

Вам также понадобится доменное имя, чтобы иметь возможность безопасного доступа к Passbolt из любого места по веб-браузеру.

После того как все вышеперечисленные требования будут выполнены, следуйте приведенным ниже инструкциям, чтобы установить Passbolt.

Шаг 1: Cкачайте Passbolt на ваш сервер Ubuntu 22.04

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

Если это вас не устраивает, скачайте последнюю стабильную версию с Github, выполнив следующие команды на своем сервере.

sudo apt install git

sudo mkdir -p /var/www/

sudo chown www-data:www-data /var/www/ -R

cd /var/www/

sudo -u www-data git clone https://github.com/passbolt/passbolt_api.git

Файлы будут сохранены в каталоге passbolt_api.

Мы переименуем его в passbolt.

sudo mv passbolt_api passbolt

Затем сделайте пользователя веб-сервера (www-data) владельцем этого каталога.

sudo chown -R www-data:www-data /var/www/passbolt

Выполните следующую команду для установки модулей PHP, необходимых или рекомендуемых Passbolt

sudo apt install php-imagick php-gnupg php8.1-common php8.1-mysql php8.1-fpm php8.1-ldap php8.1-gd php8.1-imap php8.1-curl php8.1-zip php8.1-xml php8.1-mbstring php8.1-bz2 php8.1-intl php8.1-gmp php8.1-xsl

Если вы столкнулись с ошибкой:

Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package php8.1-common
E: Couldn't find any package by glob 'php8.1-common'
E: Unable to locate package php8.1-mysql
E: Couldn't find any package by glob 'php8.1-mysql'
E: Unable to locate package php8.1-fpm
E: Couldn't find any package by glob 'php8.1-fpm'
E: Unable to locate package php8.1-ldap
E: Couldn't find any package by glob 'php8.1-ldap'
E: Unable to locate package php8.1-gd
E: Couldn't find any package by glob 'php8.1-gd'
E: Unable to locate package php8.1-imap
E: Couldn't find any package by glob 'php8.1-imap'
E: Unable to locate package php8.1-curl
E: Couldn't find any package by glob 'php8.1-curl'
E: Unable to locate package php8.1-zip
E: Couldn't find any package by glob 'php8.1-zip'
E: Unable to locate package php8.1-xml
E: Couldn't find any package by glob 'php8.1-xml'
E: Unable to locate package php8.1-mbstring
E: Couldn't find any package by glob 'php8.1-mbstring'
E: Unable to locate package php8.1-bz2
E: Couldn't find any package by glob 'php8.1-bz2'
E: Unable to locate package php8.1-intl
E: Couldn't find any package by glob 'php8.1-intl'
E: Unable to locate package php8.1-gmp
E: Couldn't find any package by glob 'php8.1-gmp'
E: Unable to locate package php8.1-xsl
E: Couldn't find any package by glob 'php8.1-xsl'

Используйте следующий вариант:

sudo apt update && apt install -y software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt update && apt install -y php8.1
php -v

Затем перезапустите Apache. (Если вы используете Nginx, вам не нужно перезапускать Nginx).

sudo systemctl restart apache2

Смените каталог.

cd /var/www/passbolt/

Установите Composer – менеджер зависимостей PHP.

sudo apt install composer

Создайте каталог кэша для Composer.

sudo mkdir -p /var/www/.composer

Сделайте www-data владельцем.

sudo chown -R www-data:www-data /var/www/.composer

Шаг 2: Создание базы данных и пользователя для Passbolt

Выполните следующую команду для установки сервера базы данных Postgresql.

PostgreSQL и MariaDB могут работать на одном сервере.

sudo apt install -y postgresql postgresql-contrib

Вам не нужно удалять MariaDB.

Установите PHP-модуль PostgreSQL.

sudo apt install php8.1-pgsql

Войдите в PostgreSQL под пользователем postgres.

sudo -u postgres psql

Создайте базу данных passbolt.

CREATE DATABASE passbolt TEMPLATE template0 ENCODING 'UNICODE';

Создайте пользователя.

CREATE USER passbolt WITH PASSWORD 'passbolt_password';

Предоставьте права доступа пользователю базы данных.

ALTER DATABASE passbolt OWNER TO passbolt;
GRANT ALL PRIVILEGES ON DATABASE passbolt TO passbolt;

Нажмите Ctrl+D, чтобы выйти из консоли PostgreSQL.

Выполните следующую команду, чтобы проверить, можете ли вы войти в PostgreSQL.

psql -h 127.0.0.1 -d passbolt -U passbolt -W

Шаг 3: Сгенерируйте ключ OpenPGP

Если вы используете VPS (виртуальный выделенный сервер), рекомендуется установить пакет haveged для генерации достаточного количества энтропии.

sudo apt install haveged

Служба haveged.service автоматически запускается после установки.

Вы можете проверить его состояние с помощью:

sudo systemctl status haveged

Затем выполните следующую команду для генерации новой пары ключей.

sudo -u www-data gpg --quick-gen-key --pinentry-mode=loopback 'first_name last_name <you@example.com>' default default never

Введите свое имя и фамилию.

Замените you@example.com на свой настоящий адрес электронной почты.


Если вас попросят задать кодовую фразу, пропустите ее, нажав Enter, потому что модуль php-gnupg в настоящее время не поддерживает использование кодовой фразы.

Скопируйте закрытый ключ в местоположение конфигурации passbolt.

sudo -u www-data gpg --armor --export-secret-keys you@example.com | sudo tee /var/www/passbolt/config/gpg/serverkey_private.asc > /dev/null

И также скопируйте открытый ключ.

sudo -u www-data gpg --armor --export you@example.com | sudo tee /var/www/passbolt/config/gpg/serverkey.asc > /dev/null

Инициализируйте связку ключей пользователя www-data.

sudo su -s /bin/bash -c "gpg --list-keys" www-data

Шаг 4: Настройте Passbolt

Убедитесь, что вы находитесь в каталоге /var/www/passbolt/.

cd /var/www/passbolt/

Скопируйте файл конфигурации

sudo cp config/passbolt.default.php config/passbolt.php

Отредактируйте файл конфигурации с помощью текстового редактора командной строки, например, Nano.

sudo nano config/passbolt.php

Сначала найдите следующую строку.

'fullBaseUrl' => 'https://www.passbolt.test',

Замените URL на свой собственный URL, например, https://passbolt.yourdomain.com.

Не забудьте создать запись DNS A для этого поддомена в редакторе зоны DNS.

В разделе конфигурации базы данных введите имя базы данных, имя пользователя базы данных и пароль, которые вы создали в шаге 2.

 // Database configuration.
    'Datasources' => [
        'default' => [
            'host' => 'localhost',
            'driver' => \Cake\Database\Driver\Postgres::class,
            //'port' => 'non_standard_port_number',
            'port' => '5432',
            'username' => 'user',
            'password' => 'secret',
            'database' => 'passbolt',
        ],
    ],

Обратите внимание, что вам нужно добавить следующие две строки, чтобы указать Passbolt использовать PostgreSQL вместо MariaDB.

'driver' => \Cake\Database\Driver\Postgres::class,
'port' => '5432',

В разделе конфигурации электронной почты,

  • Укажите имя хоста SMTP, номер порта, учетные данные для входа в систему, чтобы ваш passbolt мог отправлять электронные письма. Обычно для отправки электронной почты на удаленный SMTP-сервер используется порт 587. Убедитесь, что вы установили tls в true, так что транзакция SMTP будет зашифрована. Если вы пользуетесь бесплатной службой SMTP-ретрансляции Sendinblue, введите здесь свои учетные данные Sendinblue.
  • Также задайте адрес электронной почты From: и имя From.
// Email configuration.
    'EmailTransport' => [
        'default' => [
            'host' => 'smtp-relay.sendinblue.com',
            'port' => 587,
            'username' => 'smtp_username',
            'password' => 'smtp_password',
            // Is this a secure connection? true if yes, null if no.
            'tls' => true,
            //'timeout' => 30,
            //'client' => null,
            //'url' => null,
        ],
    ],
    'Email' => [
        'default' => [
            // Defines the default name and email of the sender of the emails.
            'from' => ['passbolt@example.com' => 'Passbolt'],
            //'charset' => 'utf-8',
            //'headerCharset' => 'utf-8',
        ],
    ],

Примечание: Если passbolt установлен на том же сервере, что и ваш почтовый сервер, то вам не нужно указывать имя пользователя и пароль в EmailTransport. Просто используйте //, чтобы закомментировать эти две строки.

В разделе gpg введите отпечаток ключа GPG, как показано ниже.

Вам необходимо удалить все пробелы в отпечатке.

'fingerprint' => '33B2E593371DE65A35C0B90B5A1F3AF795D461A7',

Вы можете получить отпечаток ключа с помощью следующей команды.

При генерации пары ключей PGP замените you@example.com на свой адрес электронной почты.

sudo su -s /bin/bash -c "gpg --list-keys" www-data

После ввода отпечатка пальца раскомментируйте следующие две строки.

'public' => CONFIG . 'gpg' . DS . 'serverkey.asc',
'private' => CONFIG . 'gpg' . DS . 'serverkey_private.asc',

Сохраните и закройте файл.

Шаг 5: Запустите сценарий установки

Запустите скрипт установки от имени пользователя www-data.

sudo su -s /bin/bash -c "/var/www/passbolt/bin/cake passbolt install --force" www-data

Подсказка: если есть много ошибок deprecated, вы можете их игнорировать.

Во время установки вам будет предложено создать учетную запись администратора.

После создания учетной записи вам будет предоставлен URL-адрес для завершения установки в веб-браузере.

Перед этим нам необходимо настроить веб-сервер, используя Apache или Nginx.

Шаг 6: Создание виртуального хоста Apache или конфигурационного файла Nginx для Passbolt

Apache

Если вы предпочитаете использовать веб-сервер Apache, установите Apache.

sudo apt install apache2

Создайте виртуальный хост для Passbolt.

sudo nano /etc/apache2/sites-available/passbolt.conf

Поместите в файл следующий текст.

Замените passbolt.example.com на ваше настоящее доменное имя и не забудьте установить для него запись DNS A.

Также обратите внимание, что корнем для Passbolt является /var/www/passbolt/webroot/, а не /var/www/passbolt/.

<VirtualHost *:80>
  ServerName passbolt.exmaple.com
  DocumentRoot /var/www/passbolt/webroot/

  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined

  <Directory />
    Options FollowSymLinks
    AllowOverride All
  </Directory>

  <Directory /var/www/passbolt/>
    Options FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    allow from all
  </Directory>

</VirtualHost>

Сохраните и закройте файл. Затем включите этот виртуальный хост с помощью:

sudo a2ensite passbolt.conf

Перезагрузите Apache, чтобы изменения вступили в силу.

sudo systemctl reload apache2

Nginx

Если вы используете веб-сервер Nginx, установите Nginx.

sudo apt install nginx

Создайте виртуальный хост для Passbolt.

sudo nano /etc/nginx/conf.d/passbolt.conf

Поместите в файл следующий текст. Замените passbolt.example.com на ваше настоящее доменное имя и не забудьте установить для него запись DNS A.

Также обратите внимание, что веб-корнем для Passbolt является /var/www/passbolt/webroot/, а не /var/www/passbolt/.

server {
   listen 80;
   listen [::]:80;
   server_name passbolt.example.com;

   root /var/www/passbolt/webroot/;
   error_log /var/log/nginx/passbolt.error;
   access_log /var/log/nginx/passbolt.access;

   index index.php index.html index.htm index.nginx-debian.html;

   location / {
     try_files $uri $uri/ /index.php?$query_string;
   }

   location ~ \.php$ {
     # try_files $uri =404;
     fastcgi_split_path_info ^(.+\.php)(/.+)$;
     # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini

     fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
     fastcgi_index index.php;
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
     include fastcgi_params;

     fastcgi_buffer_size 128k;
     fastcgi_buffers 256 16k;
     fastcgi_busy_buffers_size 256k;
     fastcgi_temp_file_write_size 256k;
   }

    # Don't log favicon
    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }

    # Don't log robots
    location = /robots.txt  {
        access_log off;
        log_not_found off;
    }

    # Deny all attempts to access hidden files/folders such as .htaccess, .htpasswd, .DS_Store (Mac), etc...
    location ~ /\. {
        deny all;
        access_log off;
        log_not_found off;
    }

    # Deny all grunt, composer files
    location ~* (Gruntfile|package|composer)\.(js|json)$ {
        deny all;
        access_log off;
        log_not_found off;
    }

     # A long browser cache lifetime can speed up repeat visits to your page
  location ~* \.(jpg|jpeg|gif|png|webp|svg|woff|woff2|ttf|css|js|ico|xml)$ {
       access_log        off;
       log_not_found     off;
       expires           360d;
  }
}

Сохраните и закройте файл. Затем протестируйте конфигурацию Nginx.

sudo nginx -t

Если проверка прошла успешно, перезагрузите Nginx, чтобы изменения вступили в силу.

sudo systemctl reload nginx

Шаг 7: Включение HTTPS

Для шифрования HTTP-трафика мы можем включить HTTPS, установив бесплатный TLS-сертификат, выданный Let’s Encrypt.

Выполните следующую команду для установки клиента Let’s Encrypt (certbot) на сервер Ubuntu 22.04.

sudo apt install certbot

Если вы используете Nginx, то вам также необходимо установить плагин Certbot Nginx.

sudo apt install python3-certbot-nginx

Затем выполните следующую команду для получения и установки сертификата TLS.

sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email you@example.com -d passbolt.example.com

Если вы используете Apache, установите плагин Certbot Apache.

sudo apt install python3-certbot-apache

И выполните эту команду для получения и установки сертификата TLS.

sudo certbot --apache --agree-tos --redirect --hsts --staple-ocsp --email you@example.com -d passbolt.example.com

Теперь сертификат должен быть получен и автоматически установлен.

см. также:

Добавить комментарий