- Pass は Unix哲学 に従う シンプルなパスワード管理ツール で、各パスワードを GPG で暗号化してファイルに保存する
- パスワードは フォルダー構造 で体系的に管理でき、コマンドラインツール によって追加、編集、生成、参照、削除などを簡単に行える
- Git連携 によりパスワード変更履歴の追跡と同期が可能で、複数のコンピューターやチーム環境 でも便利に使える
- ユーザーの自由度 が高く、ファイル構造や保存データ形式を 利用状況に合わせて柔軟に構成 できる
- 拡張性 と 高い互換性 により、さまざまな 拡張機能 や プラットフォーム別クライアント/GUI が活発に開発・配布されている
Pass の紹介
- パスワード管理はシンプルであるべきで、Unix哲学 に従うべきである
- Pass は各パスワードを GPG で暗号化したファイルとして保管し、ファイル名にはそのパスワードが必要な Web サイトやリソース名を使う
- これらの暗号化ファイルは、好きな フォルダー構造 で整理できる。一般的なファイル管理コマンドでコンピューター間のコピー、移動、削除も簡単に行える
- Pass は各パスワードファイルの 追加、編集、生成、参照 に特化したコマンドを提供し、パスワードは基本的に
~/.password-store 配下に保存される
- シンプルなシェルスクリプト だけで実装されている
- パスワードのコピー(クリップボードコピー)やパスワード変更履歴の記録に Git を活用する
- 基本的なシェルコマンドでも編集でき、Zsh、Fish、Bash などさまざまなシェルで自動補完をサポート
- 多様な 拡張機能 や 他プラットフォーム向けクライアント/GUI が、活発なコミュニティ主導で開発されている
パスワードストアの使い方
- 保存されたパスワードの一覧全体を参照できる
- 特定パスワードの参照およびクリップボードへのコピー機能をサポート(自動クリアあり)
gpg-agent により、パスワード入力や認証を便利に処理できる
- 新しいパスワードの追加、既存ファイルの複数行保存(
-m オプション)、標準テキストエディターによるファイル直接編集が可能
/dev/urandom を利用した ランダムパスワード生成 機能を提供(オプションに応じて記号の含有/除外、クリップボードへ直接コピー対応)
- パスワード削除時には、ファイルシステム上の暗号化ファイルも削除される
- Gitリポジトリーとして初期化 した後は、パスワード変更ごとにコミットが発生し、
pass git push/pull で同期できる
- 追加機能や詳細な使い方は man page を参照
基本設定方法
- パスワードストアの初期化時は、GPG キーを入力するだけで簡単に開始できる(複数の GPG キーを指定すればチーム環境にも適している)
- 特定フォルダーごとに別々の GPG キーを割り当て可能(
-p オプション)
- Gitリポジトリーとしても初期化 できる(別途 remote の指定も可能)
- すべてのパスワード追加、削除、編集作業が Git コミットで管理される
- man page でさらに拡張された初期化例を確認できる
インストール方法
- Debian/Ubuntu: apt-get install pass
- Fedora/RHEL: yum install pass
- openSUSE/Gentoo/Arch/Macintosh/FreeBSD など多様なプラットフォームをサポート
- Tarball、Git リポジトリーの直接 clone が可能(すべてのリリースは署名付きタグを提供)
データの整理と柔軟性
- Pass はユーザー定義に応じて自由にデータを整理できる(スキーマや形式の強制なし)
- 複数行保存、ファイル名によるデータ区分、フォルダー構造など、さまざまな方式を選べる
- 例: Amazon/bookreader の場合、1 行目にパスワード、その後に URL、ユーザー名、秘密の質問などの追加情報を保存できる
- 必要に応じて各情報を別ファイル(例: password、secretquestion1 など)で管理する方式も選択できる
- クリップボードコピーオプションは 1 行目のみをコピーするため、実運用と補足情報の保存を効率的に両立できる
拡張機能
- 拡張機能(extensions) は、多様なユーザー要件に対応するためにサポートされている
- システムフォルダーまたはユーザーフォルダーにインストールし、環境変数で有効化の有無を指定する
- コミュニティで多様な拡張機能が活発に開発・提供されている
互換クライアント
- 複数プラットフォーム向けクライアント/GUI がコミュニティによって開発・配布されている
- ユーザーは自分の OS や利用環境に合ったクライアントを選択できる
他のパスワードマネージャーからの移行
- 他のパスワードマネージャーからデータを移行する際、さまざまな変換スクリプトや方法を利用できる
- ユーザーは自分に適した方法で 最適なデータ構成 を選べる
作者とライセンス
- Jason A. Donenfeld(zx2c4.com)が開発
- GPLv2+ ライセンス のもとで自由に利用・改変できる
2件のコメント
実際、単に保存するだけのツールは多いですが、重要なのは自動入力のようなintegrationです
Hacker Newsのコメント
ここでは pass に好意的な意見が多いが、いくつか明確な欠点もある
データが構造化されていないため、一般的に扱いづらい
たとえば username と password をスクリプトで使うたびに、自分でパースするコードを書く必要があって不便
pass generateで新しいパスワードを作ると、既存の値をすべて上書きしてしまうつまり、password と秘密の質問の答えを一緒に入れている場合、パスワードだけ再生成すると答えが消える
履歴を確認するのがとても難しい
すべての内容が暗号化されているので、
git diffでも有用な情報は得られず、コマンドラインツールで履歴確認やミスの復元をするのも不便名前があまりに一般的すぎて検索しづらい
最近は passworth という似たツールも開発している(コンテナ/サンドボックス利用も考慮) https://github.com/andrewbaxter/passworth
履歴確認が難しいという点については、実際には pass は
.gitattributesファイルを設定して、git が gpg ファイルをテキスト変換して diff を見られるようにできる~/.password-store/.gitattributesに*.gpg diff=gpgを追加し[diff "gpg"]設定としてtextconv = gpg2 -d ...を指定するpass を使っていて遭遇した追加の問題点も共有する
データ構造化の問題はフォルダ構造で解決している
自分はむしろ、データが非構造化であることが大きな利点だと感じる
Username: xxxのような形式で書くと browserpass のようなブラウザプラグインが認識して自動入力してくれるデータ構造化や履歴の問題について、機能ごとに意見を共有する
pass generateで値が全部上書きされても、site/pass、site/secret-questionのように別ファイルで管理できるgit logで確認)であり、必要ならgit checkout -dで復元すればよい$ passと打てば関連パッケージが表示されるので、検索の問題もそこまで深刻ではないブラウザのパスワードマネージャー + passkey の方がずっと便利だが、pass の保管庫も復旧コードや API キーの保存用としては使える
pass を使ううえで最も曖昧だったのは、脅威モデルが曖昧なことだった
GPG エージェントをキャッシュしてしまうと、どんなスクリプトでも(npm postinstall など)
pass lsで全認証情報を走査できてしまうそうなると、単に
~/passwords.txtに1ファイルで保存しているのと大差ないしかしキャッシュを使わないと、毎回長い GPG パスフレーズを入力する苦痛がある
YubiKey を使ってオンデマンドで解除することも試したが、統合が弱く、パスワード入力が頻繁に必要な場合はかなり不便だった
そのため Bitwarden に移行した
自分の場合は yubi を挿しっぱなしにしている
すべてのパスワードマネージャーは基本的に、ストアのロックが解除されていればマスターパスワードが RAM やキャッシュに残り、全パスワードが露出しうる
USB ポートに余裕があるなら Nano key も挿しっぱなしでよい
自分は暗号化されたファイルパーティション上の sqlite DB にパスワードを保存している
yubikey は PIN やタッチを使って、GPG キーの利用に承認を必須にする設定ができる
自分はこれが本当に好きで、毎日使っている
CLI が好きな人にとっては pass は面白いが、普通のユーザー(いわゆる「normie」)には、Desktop では KeepassXC、Android では KeepassDX、そして Wireguard によるリモートアクセスの方が向いていそうだ
keepass であまり語られない便利機能の一つに、複数の vault を同時に開いて検索できる点がある
「normie」という基準は相対的だと思う
keepassxc.cli も忘れてはいけない
自分のユースケースの一つで keepass では解決しにくいのは、分離された2台のコンピュータでそれぞれパスワードを作成し、後で統合する作業だ
KeepassXC も使ってみたいが、配偶者と認証情報を共有しやすくない
pass は一人で使うなら面白いソリューションだが、複数人と共有するなら注意が必要
会社のパスワード管理に使うなら、誰がいつどの秘密情報を見たか知る方法がなく、人員の入れ替わりのたびに全パスワードを変更しなければならない
誰かに新たなアクセス権が必要になっても、ファイルを選択的に再暗号化する標準的な方法がないため、自分で実装する必要がある
git で保存はしているが、コミットメッセージが自動生成されるため、実際には Dropbox と大差ない
誤って不適切な内容を push してしまって戻したくなっても、git history を書き換える必要があり、他のユーザーの環境では壊れる可能性がある
単純で手でいじれるのも利点だが、この単純さ自体が罠でもある
hash(site_name+main_password)方式のように美しく見えても、現実にはさまざまな問題が出てくるビジネス環境でも end-to-end 暗号化や、ユーザー間の fingerprint 検証などの機能が必要で、Bitwarden が今のところ適任そうだが、もっと良い事例があれば知りたい
pass でもディレクトリごとに異なるキー(または複数キー)を適用すれば、グループ別・人別にアクセスを細分化できる
自分の会社では 1Password を使っている
.envファイルを使うop runコマンド、CI 連携など、さまざまな機能をサポートしている評価しただけで実運用経験はないが、チーム向けのパスワード共有ツールとして passbolt も良い選択肢だった https://www.passbolt.com
うちの会社では "pa" というあまり知られていないツールをうまく使っている https://git.j3s.sh/pa
FOKS ベースで良いソリューションを作ることもできそうだ https://foks.pub
最近 pass から Bitwarden と Vaultwarden に乗り換えた
flatpak ベースで GUI アプリをインストールする環境では、Firefox ブラウザ拡張と pass の連携がうまくいかず不便だった
workaround として実行ダイアログで
pass -c <path>を使い、パスワードをコピーしてブラウザに貼り付けていたが、理想的な体験ではなかったAndroid 公式アプリがアーカイブされたこともきっかけで、fork はあるものの、どこまで維持されるか分からない https://github.com/android-password-store/Android-Password-Store/discussions/3260
今は vaultwarden をセルフホストして、複数の bitwarden クライアントで使っている
pass から KeePassXC に乗り換えた経験を共有する
passmenu というツールもある
pass の Android アプリが終了していたのを知らなかった
pass -cを使って自分でコピーする方を好むvaultwarden のオフライン利用体験が気になる
pass-otp 拡張もある https://github.com/tadfisher/pass-otp
pass 用の Android アプリもかなり良い https://play.google.com/store/apps/details?id=dev.msfjarvis.aps
termux でも動作する
Android Password Store アプリは昨年アーカイブされ、agrahn が fork して大きく改善している
自分なりの代替案は、
~/binに小さなスクリプトを置いて OTP 生成に pass と oathtool を使う方法だ古い pass 用 Android アプリの中には、もはや自分の端末にインストールできないものもある
GPG の代わりに age を使う場合に役立つ passage というツールがある https://github.com/FiloSottile/passage
最近は10年近く、別のアプローチを使っている
すべてのパスワードのメタデータは平文 JSON に保存し、各項目には user、バージョン、パスワード規則(長さ、文字種など)を記録する
実際のパスワードは保存せず、パスフレーズ + メタデータのハッシュでパスワードを「決定的」に生成する
バージョン番号を変えるだけでまったく新しいパスワードが生成され、「バージョン」だけ見れば履歴も簡単に確認できる
ほとんど共有できないのが欠点(他人が自分のパスフレーズを知っている必要がある)
共有が必要な場合は、パスワードジェネレータで暗号文を生成して別メタデータとして保存するモードも考えたが、実際にはあまり必要なかった
パスワード生成器方式が良いのは、vault を失う心配が減ることだ
最近 SECUSO password generator を通じてこの方式を知った https://secuso.aifb.kit.edu/english/105.php
パスフレーズを共有すると露出面が広がり、一度漏えいすると複数の認証情報が一度に危険にさらされる
pass を8年以上使っていて、1300件のパスワードを保存している
git でデバイス間同期しており、本当に満足して使っている
「1300件のパスワードって、どうしてそんなに多いの?」