パスワードの安全な管理は頭の痛い問題ですよね。そもそも今時であれば、パスワードレス認証に移行すべきではあるのでしょう。ですが世の中のサービスすべてが、すぐにパスワードレス認証に対応してくれるわけでもありません。まだまだしばらく人類とパスワードの戦いは続きそうです。
パスワードを少しでも安全に使うためには、
そこで登場するのが
個人利用であれば、password-storeは非常に便利で気に入っているのですが、いくつか問題もあります。まず万人向けではない点です。会社などの組織では、部門でパスワードを共有したい場合もあるでしょう。ですが全員にGitとGPGの使用を強制するのは、少しハードルが高いと言わざるをえません。
次に、フォーマットが自由すぎる問題です。password-storeの中身はテキストファイルのため、フリーフォーマットで記述できます。フォーマットを強制する仕組みがないため、あらかじめ決めたルールを自主的に守らないと、簡単に管理は破綻します。Android用クライアントが長らく更新されておらず、機能的に不満がある点もマイナスです。
こうした背景もあり、筆者はもう少し一般向けのパスワードマネージャーへの乗り換えを決意しました。そしてその乗り換え先がBitwarden
Vaultwardenとは
Bitwardenは、クライアントサーバー方式を採用している、オープンソースのパスワードマネージャーです。SaaSとしてサービスが提供されているため、ユーザー登録だけで簡単に使いはじめられます。サーバーサイドでデータを管理するため、複数デバイスやユーザー間でのパスワードの共有がしやすく便利です。
個人であればこうしたSaaSの利用がおすすめなのですが、企業などでは
前フリが長くなりましたが、ここでようやく登場するのがVaultwardenです。これは非公式なBitwardenサーバーの代替実装です。ユーザー登録といった面倒な作業なしに使えますし、もちろん機能制限もありません。そしてAPIに互換性があるため、スマホアプリも含めたBitwarden用のクライアントをそのまま流用できます。
Vaultwardenのインストール
Vaultwardenは、HTTPSコンテキストでのみ使用できる暗号化APIを使用しているため、適切に動作させるにはHTTPS化が必須です。そして今時のWebアプリあるあるですが、自己署名証明書を使うと、クライアントの様々な警告を黙らせる必要があり、逆に面倒です。そこでLet's Encryptによる正規のSSL証明書を取得することにします。サーバーがインターネットからアクセスできること、またドメインを所持しており、サーバーの名前解決が可能であることを前提に解説しますのでご了承ください。
なおSSLの処理は前段にリバースプロキシを配置して、そちらに任せることにします。使用するリバースプロキシはnginxです。ベースOSにはUbuntu 22.
以下のコマンドで、必要なパッケージをインストールします。
$ sudo apt install -y nginx podman certbot python3-certbot-nginx
certbot
コマンドでSSL証明書を発行します。-d
オプションで、サーバーのFQDNを指定してください。いくつか質問が表示されますので、対話的に回答を入力してください。
$ sudo certbot --nginx -d サーバーのFQDN
/etc/server_
や証明書のパスには、サーバーのFQDNを指定する必要があります。お使いのサーバーのドメイン名にあわせて、適宜変更してください。
upstream vaultwarden-default {
zone vaultwarden-default 64k;
server 127.0.0.1:8080;
keepalive 2;
}
map $http_upgrade $connection_upgrade {
default upgrade;
'' "";
}
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
location / {
try_files $uri $uri/ =404;
}
}
server {
listen [::]:443 ssl ipv6only=on;
listen 443 ssl;
server_name サーバーのFQDN;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
ssl_certificate /etc/letsencrypt/live/サーバーのFQDN/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/サーバーのFQDN/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
location / {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://vaultwarden-default;
}
}
server {
listen 80 ;
listen [::]:80 ;
server_name サーバーのFQDN;
if ($host = サーバーのFQDN) {
return 301 https://$host$request_uri;
}
return 404;
}
nginxを再起動します。
$ sudo systemctl restart nginx
/srv/
$ sudo install -o root -g root -d -m 700 /srv/vault
PodmanでVaultwardenのコンテナを起動します。--restart always
」
$ sudo podman run -d --name vaultwarden -v /srv/vault/:/data/ --restart always -p 8080:80 docker.io/vaultwarden/server:latest
Vaultwardenの使い方
Webブラウザから、
メールアドレス、名前、マスターパスワードを入力して
アカウントの作成が完了したら、再度ログイン画面に戻り、メールアドレスとマスターパスワードを入力してください。Vaultwardenにログインできます。
Vaultwardenでは、ログイン情報やカード情報といった機密情報を
新しいアイテムの作成ダイアログが表示されるので、必要な情報を入力していきましょう。アイテムのタイプは
アイテムは
ユーザー名、パスワード、認証キー、URLなどを入力しましょう。パスワードはランダムなものをこの場で生成したり、そのパスワードが流出していないか確認することもできます。なお認証キーを入力しておくと、自動的に6桁のTOTPを計算してくれ、コピペが可能になります。非常に便利な機能ですが、本家Bitwardenでは、この機能は有償プランを契約しないと使えません。この点もVaultwardenのアドバンテージですね。ただし2要素認証のシークレットは、パスワードマネージャーに登録した時点で、2要素認証の体を成さなくなってしまう点には注意が必要です。
「カスタムフィールド」
登録したアイテムは、保管庫内に一覧表示されます。より詳しい使い方は、Bitwardenのマニュアルを参照してください。
会社など複数人でパスワード共有したい場合は、
Bitwardenクライアントのインストール
VaultwardenはWebブラウザでも利用できますが、専用のクライアントアプリも存在します。UbuntuではSnapパッケージでインストールできます。
$ sudo snap install bitwarden
アプリを起動すると、ログイン画面が表示されます。
ユーザー名とパスワードを入力してログインします。Web UIをそのままアプリ内に落とし込んだような作りのため、特に戸惑うこともなく使えるでしょう。
Ubuntuで動くBitwardenクライアントには、大きく
コマンドラインクライアントを使う
サーバーから利用するような場合は、CLIから使えるクライアントもほしくなりますよね。BitwardenにはLinux向けのCLIクライアントも用意されています。そしてUbuntuでは、こちらもSnapでインストールできます。以下のコマンドでbwパッケージをインストールしてください。
$ sudo snap install bw
CLIクライアントもGUIアプリと同じく、接続するサーバーを変更します。bw config server
」
$ bw config server https://サーバーのFQDN
サーバーにログインします。ユーザー名とパスワードを入力してください。
$ bw login
ログインに成功すると、セッションキーという文字列が表示されます。メッセージにあるように、このキーを環境変数BW_
としてエクスポートしてください。
環境変数BW_
にセッションキーがセットされていると、bw
コマンドで様々な操作が可能になります。例えばbw list items
」
$ bw list items
JSON形式で取得できるところがポイントで、jqなどのパーサーと組み合わせることで、より複雑な処理を組立てることもできます。例えば前述の通り、筆者はクレジットカードを登録しているサービスのアイテムには、
$ bw list items | jq -r ".[] | select(.fields != null) | select(.fields[].name == \"card\") | .name"
「bw get password
」bw list items
」
$ bw get password アイテムID
Vaultwardenを使い終わったら、以下のコマンドでログアウトしてください。これで発行されたセッションキーが無効になります。セッションキーをそのまま放置するのはセキュリティ上問題ですから、ログアウトは忘れないようにしましょう。
$ bw logout
組織のパスワード管理にVaultwardenはオススメ
いよいよ新年度がはじまりました。色々なアカウントが大量に発行されてしまい、その管理に困ってしまう新入学生や新社会人も多いのではないでしょうか。それに伴って必ず発生する、無数の
世間には
なに? マスターパスワードを忘れそう? ……パスワード管理ノートにメモして、金庫に入れておくのはどうですかね。