続・パスワード管理ツール「Passbolt」を導入してみた


いざ!passbolt!!の前のnginxの.confファイルの設定

nginxのバーチャルホストの設定をするだけでしょ?と思ったらつまづいた…ので一から丁寧に設定してみた。

導入環境

EC2
CentOS7
PHP7
MariaDB
Nginx

参考

passbotl How to install passbolt on your own server
URLリライティング

手順

  1. nginx上でPHPが動いているのか確認する。
  2. CakePHPのindex.phpに接続する。

だけのはずなのに…

1. nginx上でPHPが動いているのか確認する。

パスワード管理ツール「Passbolt」を導入してみた
でpassboltのインストールが終わっているところからの手順です。

まず/var/www/index.php を作成し表示させてみる。中身は何でもよい。
続いてnginxの*.confファイルをコピーして作成する。default.confはじゃまなのでdefault.conf.ORGなどリネームしておいた。

cp /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/passbolt.conf

passbolt.conf を編集する。

  • rootのパスをindex.phpを置いているパスに変更する。
  • location ~ .php$ のコメントアウトを外す
  • fastcgi_paramもindex.phpを置いているパスに変更する。
    location / {
        root   /var/www;
        index  index.php;
    }

    location ~ \.php$ {
        root           html;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /var/www$fastcgi_script_name;
        include        fastcgi_params;
    }    

ブラウザから接続してみるとPHPがnginx上で動作していることとバーチャルホスト設定がうまくいっていることが確認できる。
今回はechoで「testtest」と表示されれば設定がうまくいったことになる。

testtest

2. CakePHPのindex.phpに接続する。

CackPHPのrootは /passboltをインストールしたディレクトリ/passbolt/app/webroot の中の index.php なのでそのように設定をする。
パスをpassboltように変更しただけではCakePHPは表示できないようなので、公式ページを参考に書き直す。
公式ページ
ついでにlogのファイル設定もする。

  root   /passboltがあるところのパス/app/webroot;
  index  index.php;

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

    location ~ \.php$ {
        try_files $uri =404;
        include        fastcgi_params;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /passboltがあるところのパス/app/webroot$fastcgi_script_name;
    }

nginxを再起動する。

systemctl restart nginx

ブラウザから確認したら真っ白だったので app/Config/core.php を編集してエラーが出るようにした。1がエラーが表示されるデバッグモード。

Configure::write('debug', 1);

もう一度確認するとエラーが大量にでた。

Warning: _cake_core_ cache was unable to write 'cake_dev_ja' to File cache in /.../passbolt/lib/Cake/Cache/Cache.php on line 327

Warning: /.../passbolt/app/tmp/cache/persistent/ is not writable in /.../passbolt/lib/Cake/Cache/Engine/FileEngine.php on line 385

Fatal error: Uncaught CacheException: Cache engine "_cake_core_" is not properly configured. Ensure required extensions are installed, and credentials/permissions are correct in /.../passbolt/lib/Cake/Cache/Cache.php:186 Stack trace: #0 /.../passbolt/lib/Cake/Cache/Cache.php(151): Cache::_buildEngine('_cake_core_') #1 /.../passbolt/app/Config/core.php(400): Cache::config('_cake_core_', Array) #2 /.../passbolt/lib/Cake/Core/Configure.php(72): include('/.../p...') #3 /.../passbolt/lib/Cake/bootstrap.php(432): Configure::bootstrap(true) #4 /.../passbolt/app/webroot/index.php(95): include('/.../p...') #5 {main} thrown in /.../passbolt/lib/Cake/Cache/Cache.php on line 186

このエラーが表示された時の原因は主に3つ。
1. Permissionがrootになっている。
2. Permissionに書き込み権限がない。
3. SELinuxが有効になっている。

Permissionの変更

app/tmp/cache以下にいつのまにか作られていたフォルダが作られていた。

  • models
  • persistent

app/tmp/cache/ 以下の権限を変更し、変更されたことを確認する。

chown -R nginx:nginx app/tmp/cache/
chmod -R 766 app/tmp/cache/

SELinuxを無効にする

今回はEC2上にインストールしている。EC2はデフォルトでSELinuxがenforcingになっていて、それが原因でアクセスできないらしい。
まずはサーバーのSELinuxの状態を確認する。

getenforce

このコマンドでEnforcingと表示されればSELinuxが有効になっている。

Enforcing

/etc/selinux/config を編集して無効の状態にする。
permissiveは警告はするけど無効という状態。

SELINUX=permissive

SELinuxの変更を反映させるためにサーバーを再起動させる。

reboot

nginx、mariadb、php-fpmをstartさせる。

systemctl start nginx
service mariadb start
service php-fpm start

もう一度ブラウザから接続すると別のエラーがでた。

The GPG Server key defined in the config is not found in the gpg keyring

Error: An Internal Error Has Occurred.

Stack Trace

APP/Controller/Component/Auth/GpgAuthenticate.php line 49 → GpgAuthenticate->_initKeyring()
CORE/Cake/Controller/Component/AuthComponent.php line 770 → GpgAuthenticate->authenticate(CakeRequest, CakeResponse)
CORE/Cake/Controller/Component/AuthComponent.php line 611 → AuthComponent->identify(CakeRequest, CakeResponse)
APP/Controller/AuthController.php line 35 → AuthComponent->login()
[internal function] → AuthController->login()
CORE/Cake/Controller/Controller.php line 491 → ReflectionMethod->invokeArgs(AuthController, array)
CORE/Cake/Routing/Dispatcher.php line 193 → Controller->invokeAction(CakeRequest)
CORE/Cake/Routing/Dispatcher.php line 167 → Dispatcher->_invoke(AuthController, CakeRequest)
APP/webroot/index.php line 110 → Dispatcher->dispatch(CakeRequest, CakeResponse)

調べてみると、前回設定したはずの /opt/passbolt/.gnupg のPermissionが不足していた。

chmod -R 777 /opt/passbolt/.gnupg/

これでやっとつながった…が、「ユーザーが一人も作成されていませんよ?」的な警告を受けたのでそちらの手順も残しておくことにした。
管理者を作成する前にメールの設定も行っておくと、登録時のメールアドレスにpassboltからメールが送信されるのでそちらもしておく。

cp app/Config/email.php.default app/Config/email.php
vim app/Config/email.php

passboltの公式サイトを参考に設定する。

public $default = array(
    'transport' => 'Smtp',
    'from' => array('[email protected]' => 'Passbolt'),
    'host' => 'メールを送信するサーバーのホスト名',
    'port' => 587,
    'timeout' => 30,
    'username' => 'ユーザー名',
    'password' => 'パスワード名',
);

cronで送信を実行するコマンドも設定してあげる。

* * * * * /passboltまでのパス/app/Console/cake EmailQueue.sender > /passboltまでのパス/app/log/sendmail.log

メール送信の設定がうまく行われていれば、次のコマンドで管理者を作成後に指定したメールアドレスにpassboltからメールが届く。

app/Console/cake passbolt register_user -u 登録する人のメールアドレス -f myFirtsname -l myLastname -r admin

あとはメールに記載されているリンクからpassboltに接続をして完了。