Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

このページの内容:

Table of Contents
exclude概要|手順

検証環境:

  • OS

    Info

    CentOS 7.4.1708にて検証を行いました。
    本検証環境はミニマムインストールを行ったOSを使用しています。


  • MariaDB

    Info

    passboltのバックエンドにMariaDB5.5.56を使用しております。


  • nginx、php-fpm

    Info

    Webサーバとしてnginx version 1.12.2-1、PHP-FPM version 5.4.16-43を使用して検証しております。


依存関係

  • PHPやgccなどのツール

    Info

    yum install php-intl php-gd php-mysql php-mcrypt php-pear php-devel gcc gpgme-devel policycoreutils-python


  • gnupg

    Info

    pecl install gnupg


  • MySQL、MariaDB

    • MySQL 5.6以上が求められます。


使用するツール

  • git

    Info

    yum install git


  • rng-tools

    Info

    yum install rng-tools

    • エントロピー生成を高速化するために使用します

passboltのインストール

セキュリティアップデート


Code Block
languagebash
linenumberstrue
yum update


Info

セキュリティパッチをあてたり必要なSoftwareのバージョンアップするために実施します。


EPELのインストール


Code Block
languagebash
linenumberstrue
yum install epel-release


PHPなどの必要なSoftwareのインストール

  1. passboltなどで必要なSoftwareのインストール

    Code Block
    languagebash
    linenumberstrue
    # PHPやgccなどのツールをインストール
    yum install php-intl php-gd php-mysql php-mcrypt php-pear php-devel gcc gpgme-devel policycoreutils-python
    
    # pecl-gnupgをインストール
    pecl install gnupg
    echo "extension=gnupg.so" > /etc/php.d/gnupg.ini# rng-toolsのインストール
    
    
    # タイムゾーン設定
    echo 'date.timezone = "Asia/Tokyo"' > /etc/php.d/timezone.ini
    
    
    # rng-toolsのインストール
    yum install rng-tools
    
    # rngデーモンの起動と自動起動設定
    systemctl enable rngd
    systemctl start rngd
    


DBのインストールとセットアップ

  1. MariaDBインストール

    Code Block
    languagebash
    linenumberstrue
    # MariaDBのインストール
    yum install mariadb-server
    
    # MariaDBの起動と自動起動設定
    systemctl start mariadb
    systemctl enable mariadb


  2. DBとユーザ作成

    Code Block
    languagesql
    linenumberstrue
    # MySQLログイン
    mysql -u root -p
    
    # passbolt用のDB作成
    CREATE DATABASE passbolt;
    
    # passbolt用のユーザ作成(パスワードは適宜設定してください)
    GRANT ALL ON passbolt.* to passbolt@'localhost' identified by 'password';


GPGキーの作成

  1. batch用ファイル作成(gpgkey.conf)

    Code Block
    languagebash
    linenumberstrue
    # プライマリキーをRSA 4096 bitに指定
    Key-Type: RSA
    Key-Length: 4096
    
    # サブキーをRSA 4096 bitに指定
    Subkey-Type: RSA
    Subkey-Length: 4096
    
    # プライマリキー及びサブキーの有効期間を設定(0は無期限です、適宜指定してください。)
    # 0  = 無期限
    # N  = N日
    # Nw = N週間
    # Nm = Nヶ月
    # Ny = N年
    Expire-Date: 0
    
    # 名前とメールアドレスを設定(メールアドレスは適宜指定してください)
    Name-Real: test
    Name-Email: test@example.com
    
    # パスフレーズを設定(passboltではパスフレーズ有りのGPGキーを使用できません)
    # Passphrase: test
    
    # 上記の内容の鍵ペアを作成
    %commit
    
    # 終了した場合 doneと表示します。
    %echo done


    Note

    passboltではパスフレーズ有りのGPGキーを使用できません。(2018年3月現在)


  2. GPGキー生成

    Code Block
    languagebash
    linenumberstrue
    # GPGキー生成
    gpg --gen-key --batch gpgkey.conf
    
    # 設定ファイル削除
    rm gpgkey.conf
    1. GPGキーの生成が終わらない場合、下記のコマンドを別セッションのターミナルで実行してください

      Expand

      Include Page
      GnuPGにて鍵作成する際にエントロピーを増加する方法
      GnuPGにて鍵作成する際にエントロピーを増加する方法


Webサーバのインストール


Code Block
languagebash
linenumberstrue
# nginxのインストール
yum install nginx

# PHP-FPMのインストール
yum install php-fpm


passboltのインストール


Code Block
languagebash
linenumberstrue
# passboltのプログラムをgitコマンドでクローンする
git clone https://github.com/passbolt/passbolt_api.git /var/www/passbolt

# 秘密鍵をコピー
gpg --armor --export-secret-keys test@example.com > /var/www/passbolt/app/Config/gpg/server_private_key.key

# 公開鍵をコピー
gpg --armor --export test@example.com > /var/www/passbolt/app/Config/gpg/server_public_key.key

# passboltのファイルの所有者をnginxユーザに変更
chown -R nginx.nginx /var/www/passbolt/

# passboltのtmpディレクトリを書き込み権限を付与
chmod +w -R /var/www/passbolt/app/tmp

# publicディレクトリに書き込み権限を付与
chmod +w /var/www/passbolt/app/webroot/img/public

# 設定ファイルのコピー
cd /var/www/passbolt/app/Config
cp core.php.default core.php
cp database.php.default database.php
cp app.php.default app.php
cp email.php.default email.php

GPGキーのインポート


Code Block
languagebash
linenumberstrue
# GPGキーのインポート
sudo su -s /bin/bash -c "gpg --home /var/lib/nginx/.gnupg --import /var/www/passbolt/app/Config/gpg/server_private_key.key" nginx


Info

GPGキーのホームディレクトリ設定は後ほどpassboltの設定「/var/www/passbolt/app/Config/app.php」時に使用します。


GPGキーフィンガープリント確認


Code Block
languagebash
linenumberstrue
gpg --list-key --fingerprint test@example.com
# 末尾にメールアドレスを入れることで対象を絞ることが出来ます。


Panel
title実行例


No Format
[root@localhost Config]# gpg --list-key --fingerprint test@example.com
pub   2048R/82D0E7B6 2018-03-15
   フィンガー・プリント = F936 2CA2 28E4 A7E1 B9C9  E112 CFA6 472D 82D0 E7B6
uid                  test <test@example.com>
sub   2048R/5CC851A5 2018-03-15



Info

フィンガープリントは後ほどpassboltの設定「/var/www/passbolt/app/Config/app.php」時に使用します。


passboltの設定ファイルの書き換え

  1. /var/www/passbolt/app/Config/core.php(変更点のみ)

    Code Block
    languagetext
    // 下記の項目を適宜変更します。
    // SALT値設定
    Configure::write('Security.salt', 'DYhG93b0qyJfIxfs2guVoUubWwvniR2G0FgaC9mi');
    // SEED値設定
    Configure::write('Security.cipherSeed', '76859309657453542496749683645');


  2. /var/www/passbolt/app/Config/database.php(変更点のみ)

    Code Block
    languagetext
    // 下記の項目を適宜変更します。
    // DB設定
            public $default = array(
                    'datasource' => 'Database/Mysql',
                    'persistent' => false,
                    'host' => 'localhost', // ホスト名は適宜変更してください
                    'login' => 'passbolt', // ユーザ名は適宜変更してください
                    'password' => 'password', // パスワードは適宜変更してください
                    'database' => 'passbolt', // DB名は適宜変更してください
                    'prefix' => '',
                    'encoding' => 'utf8',
            );


  3. /var/www/passbolt/app/Config/app.php

    Code Block
    languagetext
    // 下記の項目を適宜変更します。
    $config = [
            // General App Details
            'App' => [
                    'ssl' => [
                            'force' => false, // httpで接続する場合は、この項目をfalseにしてください
                    ],
    //==中略==
            ],
            'GPG' => [
                    'env' => [
                            'home' => '/var/lib/nginx/.gnupg', // GPGキーの設定位置を適宜設定してください
                    ],
                    // GPGキー
                    'serverKey' => [
                            // Server private key location and fingerprint
                            'fingerprint' => 'F9362CA228E4A7E1B9C9E112CFA6472D82D0E7B6', // GPGキーのフィンガープリントを適宜設定してください
                            'public' => APP . 'Config' . DS . 'gpg' . DS . 'server_public_key.key', // GPGキー公開鍵のファイル名とpathを適宜設定してください
                            'private' => APP . 'Config' . DS . 'gpg' . DS . 'server_private_key.key', // GPGキー秘密鍵のファイル名とpathを適宜設定してください
                            'passphrase' => '' // パスフレーズは現時点ではサポートされていませんので設定しないでください
                    ]
            ]
    ];


  4. /var/www/passbolt/app/Config/email.php
    1. E Mailの設定(SMTP等)はこの設定ファイルで行います。本項では割愛します。

passboltのセットアップ開始


Code Block
languagebash
linenumberstrue
su -s /bin/bash -c "/var/www/passbolt/app/Console/cake install --no-admin" nginx


Info

上記コマンド実行中に、匿名の利用統計を送信してよいか確認されます。
適宜返答を行うことで、インストールが完了します。


Expand
title実行例(長いので閉じてます。)


Panel
title実行例


No Format
[root@localhost Config]# su -s /bin/bash -c "/var/www/passbolt/app/Console/cake
install --no-admin" nginx
---------------------------------------------------------------
     ____                  __          ____
    / __ \____  _____ ____/ /_  ____  / / /_
   / /_/ / __ `/ ___/ ___/ __ \/ __ \/ / __/
  / ____/ /_/ (__  |__  ) /_/ / /_/ / / /
 /_/    \__,_/____/____/_.___/\____/_/\__/

 Open source password manager for teams
---------------------------------------------------------------
 Install shell
---------------------------------------------------------------
 Avatar deleted!
Installing schema / database
---------------------------------------------------------------

Cake Schema Shell
---------------------------------------------------------------

The following table(s) will be dropped.
roles
users
authentication_tokens
profiles
email_queue
resources
secrets
groups
groups_users
gpgkeys
comments
permissions_types
permissions
controller_logs
user_agents
favorites
schema_migrations
Dropping table(s).
roles updated.
users updated.
authentication_tokens updated.
profiles updated.
email_queue updated.
resources updated.
secrets updated.
groups updated.
groups_users updated.
gpgkeys updated.
comments updated.
permissions_types updated.
permissions updated.
controller_logs updated.
user_agents updated.
favorites updated.
schema_migrations updated.

The following table(s) will be created.
roles
users
authentication_tokens
profiles
email_queue
resources
secrets
groups
groups_users
gpgkeys
comments
permissions_types
permissions
controller_logs
user_agents
favorites
schema_migrations
Creating table(s).
Table roles created
roles updated.
Table users created
users updated.
Table authentication_tokens created
authentication_tokens updated.
Table profiles created
profiles updated.
Table email_queue created
email_queue updated.
Table resources created
resources updated.
Table secrets created
secrets updated.
Table groups created
groups updated.
Table groups_users created
groups_users updated.
Table gpgkeys created
gpgkeys updated.
Table comments created
comments updated.
Table permissions_types created
permissions_types updated.
Table permissions created
permissions updated.
Table controller_logs created
controller_logs updated.
Table user_agents created
user_agents updated.
Table favorites created
favorites updated.
Table schema_migrations created
Execute specific schema PermissionsSchema (ok)
schema_migrations updated.
End create.
passbolt schema deployed

Cake Schema Shell
---------------------------------------------------------------

The following table(s) will be dropped.
cake_sessions
Dropping table(s).
cake_sessions updated.

The following table(s) will be created.
cake_sessions
Creating table(s).
cake_sessions updated.
End create.
passbolt session table deployed

Cake Schema Shell
---------------------------------------------------------------

The following table(s) will be dropped.
file_storage
Dropping table(s).
file_storage updated.

The following table(s) will be created.
file_storage
Creating table(s).
file_storage updated.
End create.
plugins schemas deployed

Installing data set:default
---------------------------------------------------------------
Data for model SchemaMigration inserted (11)
Data for model Role inserted (4)
Data for model User inserted (1)
Data for model Gpgkey inserted (0)
Data for model PermissionType inserted (3)
Data for model Profile inserted (1)

 Datasource : default
 File :/var/www/passbolt/app/tmp/schema/default_default.sql
 Success: the database was saved on file!
We need you to help make passbolt better by sending anonymous usage statistics. Ok?
(see: https://www.passbolt.com/privacy#statistics) (y/n)
[n] > y
---------------------------------------------------------------

 Passbolt installation success! Enjoy! ?





passbolt設定状態確認


Code Block
languagebash
linenumberstrue
su -s /bin/bash -c "/var/www/passbolt/app/Console/cake passbolt healthcheck" nginx


Info

上記のコマンドで設定状態が確認できます。
「su -s /bin/bash -c "/var/www/passbolt/app/Console/cake install --no-admin" nginx」コマンドで失敗したときや、
セキュリティ的な懸念があれば、レポートに表示されます。


Expand
title実行例(長いので閉じてます。)


Panel
title実行例


No Format
[root@localhost Config]# su -s /bin/bash -c "/var/www/passbolt/app/Console/cake passbolt healthcheck" nginx
---------------------------------------------------------------
     ____                  __          ____
    / __ \____  _____ ____/ /_  ____  / / /_
   / /_/ / __ `/ ___/ ___/ __ \/ __ \/ / __/
  / ____/ /_/ (__  |__  ) /_/ / /_/ / / /
 /_/    \__,_/____/____/_.___/\____/_/\__/

 Open source password manager for teams
---------------------------------------------------------------
 Healthcheck shell
---------------------------------------------------------------

 Environment

 [PASS] PHP version 5.4.16
 [PASS] PCRE compiled with unicode support
 [PASS] The temporary directory and its content are writable
 [PASS] The public image directory and its content are writable

 Config files

 [PASS] The core config file is present
 [PASS] The database config file is present
 [PASS] The email config file is present
 [PASS] The application config file is present

 Core config

 [PASS] Debug mode is off.
 [PASS] Cache is working.
 [PASS] Unique value set for security.salt
 [PASS] Unique value set for security.cipherSeed
 [PASS] Full base url is set to http://localhost
 [FAIL] App.fullBaseUrl does not validate. http://localhost.
  [HELP] Edit App.fullBaseUrl in app/Config/core.php
  [HELP] Select a valid domain name as defined by section 2.3.1 of http://www.ietf.org/rfc/rfc1035.txt
 [PASS] /healthcheck/status is reachable.

 SSL Certificate

 [PASS] SSL peer certificate validates
 [PASS] Hostname is matching in SSL certificate.
 [PASS] Not using a self-signed certificate

 Database

 [PASS] Configured to use a supported database backend
 [PASS] The application is able to connect to the database
 [PASS] Not using a prefix for database tables
 [PASS] 20 tables found
 [PASS] Some default content is present
 [PASS] The database schema up to date.

 GPG Configuration

 [PASS] PHP GPG Module is installed and loaded
 [PASS] The server gpg key is not the default one
 [PASS] The environment variable GNUPGHOME is set to /var/lib/nginx/.gnupg
 [PASS] The directory /var/lib/nginx/.gnupg containing the keyring is writable by the user the webserver is running as.
 [PASS] The public key file is defined in app/config.php and readable.
 [PASS] The private key file is defined in app/config.php and readable.
 [PASS] The server key fingerprint matches the one defined in app/config.php.
 [PASS] The server key defined in the app/Config.php is in the keyring.
 [PASS] There is a valid email id defined for the server key.
 [PASS] The public key can be used to encrypt and sign a message.
 [PASS] The private key can be used to decrypt a message.

 Application configuration

 [FAIL] This installation is not up to date. Currently using 1.6.9 and it should be v2.0.0-rc2.
  [HELP] See. https://www.passbolt.com/help/tech/update
 [FAIL] Passbot is not configured to force SSL use
  [HELP] Set App.ssl.force to true in app/Config/app.php
 [FAIL] App.fullBaseUrl is not set to HTTPS
  [HELP] Check App.fullBaseUrl url scheme in app/Config/core.php
 [PASS] Selenium API endpoints are disabled.
 [PASS] Search engine robots are told not to index content.
 [PASS] Registration is closed, only administrators can add users.
 [PASS] Serving the compiled version of the javascript app
 [PASS] All email notifications will be sent.

 Development Tools (optional)

 [PASS] Phpunit is installed
 [PASS] Phpunit version is 3.7.38

  4 error(s) found. Hang in there!




nginx設定

  1. 「/etc/nginx/conf.d/passbolt.conf」設定

    Code Block
    languagetext
    linenumberstrue
    server {
      listen 80;
    
      client_body_buffer_size     100K;
      client_header_buffer_size   1k;
      client_max_body_size        100k;
      client_body_timeout   10;
      client_header_timeout 10;
      keepalive_timeout     5 5;
      send_timeout          10;
      root /var/www/passbolt;
    # X-Frame-Options is to prevent from clickJacking attack
      add_header X-Frame-Options SAMEORIGIN;
    #  disable content-type sniffing on some browsers.
      add_header X-Content-Type-Options nosniff;
    # This header enables the Cross-site scripting (XSS) filter
      add_header X-XSS-Protection "1; mode=block";
    
    location / {
        try_files $uri $uri/ /index.php?$args;
        index index.php;
      }
    location ~ \.php$ {
        fastcgi_index           index.php;
        fastcgi_pass            127.0.0.1:9000;
        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 /app/webroot/$uri /index.php?$args;
      }
    }


SELinux設定


Code Block
languagebash
linenumberstrue
# /var/www配下をWebサーバ用のコンテキストに変更
semanage fcontext -a -t httpd_sys_content_t '/var/www(/.*)?'

# tmpディレクトリを書き換え可能にする
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/passbolt/app/tmp(/.*)?'

# コンテキスト設定を保存されたものに変更
restorecon -Rv /var/www

# GPGキーのホームディレクトリを操作可能にするため設定変更
semanage fcontext -a -t httpd_sys_rw_content_t '/var/lib/nginx/.gnupg(/.*)?'

# コンテキスト設定を保存されたものに変更
restorecon -Rv /var/lib/nginx/.gnupg


PHP-FPM設定

  1. 「/etc/php-fpm.d/www.conf」の設定

    Code Block
    languagetext
    linenumberstrue
    listen = 0.0.0.0:9000
    listen.allowed_clients = 127.0.0.1
    user = nginx
    group = nginx
    
    pm = dynamic
    pm.max_children = 50
    pm.start_servers = 5
    pm.min_spare_servers = 5
    pm.max_spare_servers = 35
    slowlog = /var/log/php-fpm/www-slow.log
    php_admin_value[error_log] = /var/log/php-fpm/www-error.log
    php_admin_flag[log_errors] = on
    php_value[session.save_handler] = files
    php_value[session.save_path] = /var/lib/php/session


Webサーバ起動


Code Block
languagebash
linenumberstrue
# PHP-FPMの起動と自動起動設定
systemctl enable php-fpm
systemctl start php-fpm

# nginxの起動と自動起動設定
systemctl enable nginx
systemctl start nginx

Firewall設定

Code Block
languagebash
linenumberstrue
# 80番ポートの開放
firewall-cmd --add-port=80/tcp --zone=public --permanent


# firewallの設定再読込
firewall-cmd --reload

adminユーザ作成

Code Block
languagebash
linenumberstrue
su -c "/var/www/passbolt/app/Console/cake passbolt register_user -u admin@example.com -f test -l test -r admin" -s /bin/bash nginx


Panel
title実行例


No Format
[root@localhost Config]# su -c "/var/www/passbolt/app/Console/cake passbolt register_user -u admin@example.com -f test -l test -r admin" -s /bin/bash nginx
---------------------------------------------------------------
     ____                  __          ____
    / __ \____  _____ ____/ /_  ____  / / /_
   / /_/ / __ `/ ___/ ___/ __ \/ __ \/ / __/
  / ____/ /_/ (__  |__  ) /_/ / /_/ / / /
 /_/    \__,_/____/____/_.___/\____/_/\__/

 Open source password manager for teams
---------------------------------------------------------------
The user has been registered with success, to complete the registration process follow the link : http://localhost/setup/install/5aab439f-3560-48ec-a271-23737f000001/903b036d-6a66-4f33-a61a-495331c3b210
The user has been notified by email to complete his registration process.



ログイン

Info
http://<サーバIP or ホスト名>/setup/install/5aab439f-3560-48ec-a271-23737f000001/903b036d-6a66-4f33-a61a-495331c3b210
上記のURLにアクセスすることで設定が開始されます。(上記のURLは自動生成されます。ユーザ登録操作で生成されたURLにアクセスしてください)
  1. PluginチェックとURIチェック
    1. passbolt用のPluginとURIが正しいものか確認したら①のチェックを入れてください
    2. 問題がなければ②の「Next」ボタンを押下し、次に進みます
  2. ユーザ情報確認
    1. ユーザ情報を確認します。問題がなければ③の「Next」ボタンを押下し次に進みます。
  3. パスワード登録
    1. ④のテキストフォームに使用したいパスワードを入力してください。
      パスワードは8文字以上、小文字大文字記号の混合である必要があります。
    2. パスワードにて問題がなかったら⑤の「Next」ボタンを押下し次に進みます。
  4. バックアップページ
    1. ⑥では、個人の秘密鍵をバックアップできます。後ほどの復旧で使用するため必要であればDLします。
    2. 問題がなければ、⑦の「Nextボタン」を押下し次に進みます。
  5. セキュリティトークン設定
    1. ⑧にて、カラーを選択してください。それがセキュリティトークンになります。
    2. カラー設定が終わったら⑨の「Next」ボタンを押下して次に進みます。
  6. ログイン画面
    1. ユーザ設定を終えるとログイン画面に移行します。
      この画面の⑩のログイン画面で必要な情報を入力したらpassboltの画面になります。


環境変数の設定

 特になし