Ubuntu Weekly Recipe

第412回 RatticWebでパスワードを管理する

この記事を読むのに必要な時間:およそ 6 分

コンピューターを使っていると様々なシーンで必要になるパスワード。安全のためには十分に長く,複雑で,サービスごとにユニークな文字列をひねり出す必要があります。しかし数多くのWebサービスを利用するのが当たり前の現在,何十という複雑怪奇な文字列を暗記するのは難しいですよね。かといって簡単なパスワードや,同じパスワードを使い回したのでは本末転倒というものです。すべてのパスワードを暗記することは諦め,パスワード管理ツールを使うのが現実的な解でしょう。

Ubuntuで使えるパスワード管理ツールにKeePassがあります。KeePassは非常に便利なソフトウェアですが,データをファイルベースで管理するアプリケーションですので「家のデスクトップでも,モバイル用のノートでも,スマホでも使いたい」となった場合,なんらかの方法でパスワードデータベースを同期する必要があります。複数人でデータを共有しようとすると「誰かがパスワードを更新したことを自動的に知る術がない」「それゆえ誰かの更新を古いデータで上書きしてしまいがち」という問題も浮上します。そこで今回は,それらの問題を解決できるパスワード管理Webアプリケーション「RatticWeb」を紹介します。

RatticWebのインストール

RatticWebはPython製のソフトウェアです。WebサーバーとしてApache,バックエンドのデータベースとしてMySQL※1を利用します。Ubuntu向けのパッケージは存在しないため,今回はGitHubで公開されているtarボールからインストールします※2)。なおUbuntuのバージョンは14.04 LTSを使用します※3)。

※1
SQLiteやPostgreSQLを使うこともできますが,本記事では割愛します。
※2
今回は家庭内にサーバーを構築し,インターネットから直接アクセスさせない(スマートフォンなどからアクセスする場合はVPNを併用する)前提のため,SSLをはじめとしたセキュリティ対策は講じていないことをご了承ください。
※3
15.10でも同様の手順でインストール自体は可能なのですが,このmod-wsgiのバグのため,そのままでは動作しません。サーバーであることや,用途を考えても,素直にLTSである14.04を使うのがおすすめです。

まずは依存パッケージ一式をインストールします。

$ sudo apt-get install python-dev python-pip python-mysqldb python-ldap libxml2-dev libxslt1-dev zlib1g-dev gettext libmysqlclient-dev

パスワードの初期化等でユーザーにメールを送る必要があるため※4),Postfixをインストールしておきます。

※4
自宅内での個人利用であれば,メール送信を使う機会はないかもしれません。もしも家庭内からメールを送信する場合は,プロバイダのOP25Bによってブロックされる可能性があることを考慮してください。その場合はPostfixをスマートホストとして構築する必要がありますが,本記事では省略します。
$ sudo apt-get install postfix

インストール中にPostfixの構成タイプとメールサーバー名を聞かれますので,それぞれ「Internet Site」とサーバーのFQDNを入力してください。

図1 外部にメールを送信するため,Internet Siteを選択する

画像

図2 メールサーバーのFQDNを入力する

画像

通知の送信にしか使用しないため,外部に対して25番ポートを晒さないよう,inet_interfacesにlocalhostを指定します。postconfで設定を行ったら,postfixを再起動します。

$ sudo postconf -e 'inet_interfaces = localhost'
$ sudo service postfix restart

続いてMySQLをインストールします。

$ sudo apt-get install mysql-server

MySQLのrootユーザーのパスワードを聞かれるので,パスワードを設定してください。

図3 MySQLのrootユーザーのパスワードを設定する

画像

MySQLを再起動した後,Rattic用のデータベースとユーザーを作成します。ここではデータベース名,ユーザー名ともに「rattic」としました。

$ mysql -u root -p
mysql> CREATE DATABASE rattic DEFAULT CHARACTER SET utf8;
mysql> GRANT ALL PRIVILEGES ON rattic.* TO 'rattic'@'localhost' IDENTIFIED BY 'ratticユーザーのパスワード' WITH GRANT OPTION;

RatticWeb本体をインストールします。インストール先は/opt/ratticとしました。ディレクトリを掘り,GitHubから現時点での最新リリースである1.3.1のtarボールを取得し,展開します。展開するとRatticWeb-1.3.1というディレクトリが作成されますが,(今後予想されるバージョンアップ後も)/opt/rattic/RatticWebというパスでアクセスしたいため,シンボリックリンクを作成しておきます。

$ sudo mkdir -p /opt/rattic/{static,media}
$ wget -O- https://github.com/tildaslash/RatticWeb/archive/v1.3.1.tar.gz | sudo tar zxvf - -C /opt/rattic/
$ sudo ln -s /opt/rattic/RatticWeb-1.3.1/ /opt/rattic/RatticWeb

RatticWebの設定ファイルは/etc/ratticweb.cfgです。以下の内容でファイルを作成してください。secretkeyにはDjangoのシークレットキーを作成して設定します※5)。[database]セクションにはデータベースにアクセスするための設定を記述します。

※5
「Django secret key generator」などでググると,ランダムなキーを生成できるサービスがいくつか見つかります。今回はそういったサービスを利用して生成しました。
[ratticweb]
debug = False
secretkey = '(シークレットキー)'
hostname = rattic.example.com
timezone = Asia/Tokyo

[filepaths]
static = /opt/rattic/static
media = /opt/rattic/media

[database]
engine = django.db.backends.mysql
name = (データベース名)
user = (データベースのユーザー名)
password = (データベースのユーザーのパスワード)

パスワードなどの情報が第三者に見られないよう,ファイルのパーミッションを変更しておきます。

$ sudo chown root:www-data /etc/ratticweb.cfg
$ sudo chmod 640 /etc/ratticweb.cfg

pipを使い,必要なPythonパッケージをインストールします。バックエンドにMySQLを使う場合に必要なパッケージ一覧がrequirements-mysql.txtとして用意されていますので,このファイルを読み込ませます。

$ sudo /usr/bin/pip install -r /opt/rattic/RatticWeb/requirements-mysql.txt

この後データベースの初期設定を行うのですが,この原稿を執筆している2016年3月現在,syncdbが動かないという問題があります。そのためワークアラウンドとして以下のコマンドを実行しておきます。

$ sudo rm -rf /usr/local/lib/python2.7/dist-packages/kombu/transport/django/migrations /usr/local/lib/python2.7/dist-packages/djcelery/migrations
$ sudo mv /usr/local/lib/python2.7/dist-packages/kombu/transport/django/south_migrations /usr/local/lib/python2.7/dist-packages/kombu/transport/django/migrations
$ sudo mv /usr/local/lib/python2.7/dist-packages/djcelery/south_migrations /usr/local/lib/python2.7/dist-packages/djcelery/migrations

manage.pyを実行します。

$ cd /opt/rattic/RatticWeb
$ sudo ./manage.py syncdb --noinput
$ sudo ./manage.py migrate --all
$ sudo ./manage.py compilemessages
$ sudo ./manage.py collectstatic -c --noinput
$ sudo ./manage.py demosetup

これでRatticWeb本体のインストールは完了です。最後にWebサーバーとしてApacheと,WSGIモジュールをインストールします。

$ sudo apt-get install apache2 libapache2-mod-wsgi

RatticWebを動かすバーチャルホストを用意します。/etc/apache2/sites-available/rattic.confに以下の内容を記述してください。この際,アクセスに使用する名前(ServerName)と/etc/ratticweb.cfgで設定したhostnameを一致させておいてください。これは,RatticWebはhostnameに指定された名前以外でのアクセスをBad Request(400)で拒否するためです。またLAN内でのみ使用する前提のため,ローカルIPアドレスでアクセス制限をかけています。ネットワークアドレスが異なる場合は適宜書き換えてください。

<VirtualHost *:80>
        ServerAdmin webmaster@example.com
        ServerName rattic.example.com

        Alias /robots.txt /opt/rattic/static/robots.txt
        Alias /favicon.ico /opt/rattic/static/favicon.ico
        AliasMatch ^/([^/]*\.css) /opt/rattic/static/styles/$1
        Alias /media/ /opt/rattic/media/
        Alias /static/ /opt/rattic/static/

        <Directory /opt/rattic/static>
                Require ip 192.168.1.0/24 127.0.0.1
        </Directory>

        <Directory /opt/rattic/media>
                Require ip 192.168.1.0/24 127.0.0.1
        </Directory>

        WSGIScriptAlias / /opt/rattic/RatticWeb/ratticweb/wsgi.py
        WSGIPassAuthorization On

        WSGIDaemonProcess rattic processes=2 threads=25 home=/opt/rattic/RatticWeb/ python-path=/opt/rattic/RatticWeb display-name=%{GROUP}
        WSGIProcessGroup rattic

        <Directory /opt/rattic/RatticWeb/ratticweb>
                <Files wsgi.py>
                        Require ip 192.168.1.0/24 127.0.0.1
                </Files>
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/rattic_error.log

        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/rattic_access.log combined
</VirtualHost>

最後に,バーチャルホストを有効にしてApacheをリロードします。

$ sudo a2ensite rattic
$ sudo service apache2 reload

以上でインストールは完了です。

著者プロフィール

水野源(みずのはじめ)

Ubuntu Japanese Teamメンバー。理想のフリーデスクトップ環境を求めて東へ西へ……のはずが,気がついたら北の大地で就職していたインフラ寄りのエンジニア。株式会社インフィニットループ所属。

コメント

コメントの記入