コンピューターを使っていると様々なシーンで必要になるパスワード。安全のためには十分に長く、複雑で、サービスごとにユニークな文字列をひねり出す必要があります。しかし数多くのWebサービスを利用するのが当たり前の現在、何十という複雑怪奇な文字列を暗記するのは難しいですよね。かといって簡単なパスワードや、同じパスワードを使い回したのでは本末転倒というものです。すべてのパスワードを暗記することは諦め、パスワード管理ツールを使うのが現実的な解でしょう。
Ubuntuで使えるパスワード管理ツールにKeePassがあります。KeePassは非常に便利なソフトウェアですが、データをファイルベースで管理するアプリケーションですので「家のデスクトップでも、モバイル用のノートでも、スマホでも使いたい」となった場合、なんらかの方法でパスワードデータベースを同期する必要があります。複数人でデータを共有しようとすると「誰かがパスワードを更新したことを自動的に知る術がない」「それゆえ誰かの更新を古いデータで上書きしてしまいがち」という問題も浮上します。そこで今回は、それらの問題を解決できるパスワード管理Webアプリケーション「RatticWeb」を紹介します。
RatticWebのインストール
RatticWebはPython製のソフトウェアです。WebサーバーとしてApache、バックエンドのデータベースとしてMySQL[1]を利用します。Ubuntu向けのパッケージは存在しないため、今回はGitHubで公開されているtarボールからインストールします[2]。なおUbuntuのバージョンは14.04 LTSを使用します[3]。
まずは依存パッケージ一式をインストールします。
パスワードの初期化等でユーザーにメールを送る必要があるため[4]、Postfixをインストールしておきます。
インストール中にPostfixの構成タイプとメールサーバー名を聞かれますので、それぞれ「Internet Site」とサーバーのFQDNを入力してください。
通知の送信にしか使用しないため、外部に対して25番ポートを晒さないよう、inet_interfacesにlocalhostを指定します。postconfで設定を行ったら、postfixを再起動します。
続いてMySQLをインストールします。
MySQLのrootユーザーのパスワードを聞かれるので、パスワードを設定してください。
MySQLを再起動した後、Rattic用のデータベースとユーザーを作成します。ここではデータベース名、ユーザー名ともに「rattic」としました。
RatticWeb本体をインストールします。インストール先は/opt/ratticとしました。ディレクトリを掘り、GitHubから現時点での最新リリースである1.3.1のtarボールを取得し、展開します。展開するとRatticWeb-1.3.1というディレクトリが作成されますが、(今後予想されるバージョンアップ後も)/opt/rattic/RatticWebというパスでアクセスしたいため、シンボリックリンクを作成しておきます。
RatticWebの設定ファイルは/etc/ratticweb.cfgです。以下の内容でファイルを作成してください。secretkeyにはDjangoのシークレットキーを作成して設定します[5]。[database]セクションにはデータベースにアクセスするための設定を記述します。
パスワードなどの情報が第三者に見られないよう、ファイルのパーミッションを変更しておきます。
pipを使い、必要なPythonパッケージをインストールします。バックエンドにMySQLを使う場合に必要なパッケージ一覧がrequirements-mysql.txtとして用意されていますので、このファイルを読み込ませます。
この後データベースの初期設定を行うのですが、この原稿を執筆している2016年3月現在、syncdbが動かないという問題があります。そのためワークアラウンドとして以下のコマンドを実行しておきます。
manage.pyを実行します。
これでRatticWeb本体のインストールは完了です。最後にWebサーバーとしてApacheと、WSGIモジュールをインストールします。
RatticWebを動かすバーチャルホストを用意します。/etc/apache2/sites-available/rattic.confに以下の内容を記述してください。この際、アクセスに使用する名前(ServerName)と/etc/ratticweb.cfgで設定したhostnameを一致させておいてください。これは、RatticWebはhostnameに指定された名前以外でのアクセスをBad Request(400)で拒否するためです。またLAN内でのみ使用する前提のため、ローカルIPアドレスでアクセス制限をかけています。ネットワークアドレスが異なる場合は適宜書き換えてください。
最後に、バーチャルホストを有効にしてApacheをリロードします。
以上でインストールは完了です。
ユーザーとグループを作成する
ブラウザからRatticWebにアクセスして、管理者でログインしましょう。管理者のIDはadmin、初期パスワードはratticです。なにはともあれadminのパスワードを変更しておきましょう。「Profile」→「Change password」をクリックして、現在のパスワードと新しいパスワードを入力してください。ちなみにProfile画面ではパスワード変更の他に、1ページあたりのパスワード表示件数、お気に入りのタグ[6]、2要素認証の有効化[7]、APIキーの発行、セッションの管理などが行えます。
次に、自分用の一般ユーザーアカウントを作成しましょう。ページ上部の「Staff Management」から「Add User」をクリックしてください。ユーザー名、パスワードリセット時にメールを送るメールアドレス、所属するグループ(後述)、パスワードを入力します。ここで「Staff status」にチェックを入れると、そのユーザーにユーザーやグループの作成権限を持たせることができます。
これからパスワードを登録していくわけですが、RatticWebに登録されるパスワード情報は、必ずひとつのグループに所属している必要あります。そして同じグループに参加しているユーザーだけが、パスワードの閲覧や変更ができるというわけです。初期状態ではグループがひとつも登録されていないため、ユーザーの他にグループも作成しましょう[8]。「Staff Management」から「Add Group」をクリックして、グループ名を入力してください。
グループを作成したら[9]、「Staff Management」の「Users」一覧からグループに所属させたいユーザーの「Edit」をクリックし、「Groups」に作成したグループを足してください。これでこのユーザーがグループに所属し、そのグループが所持しているパスワードデータにアクセスできるようになりました。
自分が所属しているグループはページ左の「Groups」以下に一覧表示され、そのグループの所持する全パスワードに素早くアクセスできるようになります。グループで全パスワードを分類し、よく使うパスワードはタグで管理するのが基本です。
パスワードを登録する
パスワードを登録するには、「Passwords」をクリックしてから「Add New」をクリックします。Create Passwordのページが開いたら、以下の項目を入力してください。各項目には日本語も使用できます[10]。
Title |
任意の名前(必須) |
Url |
そのパスワードを利用するURL[11] |
Username |
ユーザーID |
Password |
パスワード |
Markdown Description |
DescriptionをMarkdownで記述できるようにするフラグ |
Description |
パスワードに関する任意のメモ |
Owner Group |
このパスワードが所属するグループ(必須) |
Viewers Groups |
このパスワードを閲覧できるグループ |
Tags |
任意の検索用タグ |
Icon |
一覧に表示する際のアイコン |
Ssh key |
SSH秘密鍵 |
Attachment |
任意の添付ファイル |
名前とオーナーグループは必須になっています。また見ての通り、パスワードだけでなく、SSHログイン用の秘密鍵なども登録できます。Viewer Groupsは、このパスワード情報を閲覧できるグループの指定です。たとえば開発チームでは、開発サーバーのrootパスワードやクラウドサービスの契約情報など、あらゆるパスワードを管理しているとしましょう。この中にある「テスト中のアプリケーションのログインパスワード」だけはテストチームに共有したいけれど、それ以外の情報は見せたくないのでグループに参加させるわけにはいかない、というようなシチュエーションはよくありますよね。そのような場合、見せたいパスワードのViewer Groupsにテストチームを足すことで、このパスワード情報のみをテストチームのユーザーに見せることができます。
RatticWebのバックアップとリストア
パスワードを集中管理できるのは便利ですが、言いかえれば障害時にすべてのパスワード情報を失う可能性があるということも意味します。言うまでもないことですが、くれぐれもバックアップをしっかり取っておきましょう。RatticWebはすべてのデータがMySQLに保存されているので、データベースをバックアップしておけば、簡単にデータを復元できます[12]。
とはいえデータベースの中身はパスワードというセンシティブな情報ですので、バックアップの取り扱いにも十分注意が必要です。このような理由から、RatticはデータベースのダンプをGPGで暗号化するようになっています。GPGの鍵を持っていない場合は本連載の第28回を参考に、鍵ペアを作成してください[13]。そして以下のコマンドを実行し、暗号化に使う(自分自身の)鍵IDを控えておきます。
/etc/ratticweb.cfgに以下の記述を追加してください。
manage.py backupコマンドを実行することでデータベースのバックアップと暗号化が行われ、dirに指定したディレクトリに保存されます。
ディスク故障などの物理的障害を考えると、バックアップはローカルでなくリモートに保存したいですよね。実はRatticWebのバックアップは、ローカルでなくAmazon S3へ保存することもできます。/etc/ratticweb.cfgのbackupセクションに、以下の記述を追加してください。
バケットへのアクセス権限があるIAMユーザーを作成し、アクセスキーIDとシークレットキーを控えておいてください[14]。これをそれぞれ環境変数AWS_ACCESS_KEY_IDとAWS_SECRET_ACCESS_KEYにセットした上で、manage.pyを実行してください。バックアップファイルがS3へアップロードされます[15]。実運用では環境変数をexportした上でmanage.pyを叩くラッパースクリプトを用意して、cronから実行することになるでしょう。バックアップされたデータの中身は、単なるMySQLのダンプです。なのでデータをリストアしたい場合は、以下のように復号したデータをmysqlコマンドに流し込んでください。
RatticWebを使えば、Webベースで簡単にパスワードの共有ができます。kdb形式からのインポート機能もありますので、KeePassに不満があるような場合は、乗り換えを検討してみてはいかがでしょうか?