8 ポイント 投稿者 GN⁺ 2025-09-15 | 2件のコメント | WhatsAppで共有
  • PassUnix哲学 に従う シンプルなパスワード管理ツール で、各パスワードを 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件のコメント

 
ndrgrd 2025-09-15

実際、単に保存するだけのツールは多いですが、重要なのは自動入力のようなintegrationです

 
GN⁺ 2025-09-15
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 を追加し
      • .git/config に [diff "gpg"] 設定として textconv = gpg2 -d ... を指定する
      • こうすれば暗号化された内容でも簡単に diff できる
    • pass を使っていて遭遇した追加の問題点も共有する

      • 重要な利用手順が文書化されていない(例: pass ストアを別のコンピュータに移すとき、何をコピーすべきか不明)
      • パッケージ化されていない環境、たとえばヘッドレス NAS にインストールしようとすると、gpg のクロスコンパイル問題などで非常に難しい
      • pass は gpg に非常に薄いインターフェースを載せた構造なので、gpg の欠点をそのまま引き継ぐ(特に gpg-agent 関連の問題など)
      • 最近では多くの組織が GnuPG の代わりに age のようなシンプルな暗号化ツールへ移行しようとしている https://github.com/FiloSottile/age
      • pass と Android の組み合わせはいまひとつで、公式パッケージは保守されておらず、fork は F-Droid になく、UI も使いにくい
      • 全体としては今でも pass を使い続けているが、より良い汎用ソリューションがあまりない
      • FiloSottile/passage で gpg を age に置き換える方法もあるが、Android 対応はない
      • gopass の方が良さそうに見える(すべての unix で動作し、pass と互換性があり、age plugin を提供、https://www.gopass.pw)が、やはり Android 向けパッケージはない
    • データ構造化の問題はフォルダ構造で解決している

      • サイトごとに username、password、email ファイルを別々に管理
      • ときには notes(非構造化ノート)、あるいは特別な場合には json(機械読取り用)ファイルも追加
      • メタデータが暗号化されないのは残念だが、概ね満足している解決策
    • 自分はむしろ、データが非構造化であることが大きな利点だと感じる

      • 実際、Username: xxx のような形式で書くと browserpass のようなブラウザプラグインが認識して自動入力してくれる
    • データ構造化や履歴の問題について、機能ごとに意見を共有する

      • それぞれが自分なりの convention を使える点を利点と見ている
      • pass generate で値が全部上書きされても、site/passsite/secret-question のように別ファイルで管理できる
      • ディレクトリツリーを活用する方式自体がかなり良い
      • git diff で生成されたパスワードを追跡するのは難しいかもしれないが、実際に重要なのは最後に変更された時点(git log で確認)であり、必要なら git checkout -d で復元すればよい
      • ターミナルで $ pass と打てば関連パッケージが表示されるので、検索の問題もそこまで深刻ではない
  • ブラウザのパスワードマネージャー + passkey の方がずっと便利だが、pass の保管庫も復旧コードや API キーの保存用としては使える

    • pass を使ううえで最も曖昧だったのは、脅威モデルが曖昧なことだった

    • GPG エージェントをキャッシュしてしまうと、どんなスクリプトでも(npm postinstall など) pass ls で全認証情報を走査できてしまう

    • そうなると、単に ~/passwords.txt に1ファイルで保存しているのと大差ない

    • しかしキャッシュを使わないと、毎回長い GPG パスフレーズを入力する苦痛がある

    • YubiKey を使ってオンデマンドで解除することも試したが、統合が弱く、パスワード入力が頻繁に必要な場合はかなり不便だった

    • そのため Bitwarden に移行した

    • 自分の場合は yubi を挿しっぱなしにしている

      • どうせ物理タッチが必要なので、自分の空間が安全なら実質的に二要素認証になる
      • fido2 と違って OpenPGP では、一度 PIN を入力すれば挿している間は解除状態が続く
      • その代わり各パスワードを解除するたびに毎回タッチが必要なので、自分にとっては完璧でありつつ便利
      • モバイルでも openkeychain と password store の組み合わせがうまく動く
      • どちらももはや積極的には保守されていないが、yubi のハードウェア暗号化だけ信頼すれば十分だと思う
    • すべてのパスワードマネージャーは基本的に、ストアのロックが解除されていればマスターパスワードが RAM やキャッシュに残り、全パスワードが露出しうる

      • 使っていないときはロックしておくべきだ
      • Bitwarden のようにブラウザ統合されている場合は、攻撃ベクトル(リモートサーバー、拡張機能など)も広い
      • 最近では、ほとんどすべてのブラウザベースのパスワードマネージャーで、リモート攻撃者が被害者のブラウザにパスワードを送らせられる脆弱性が見つかった
      • Bitwarden は使っているが、本当に重要な認証情報は別扱いにしている
    • USB ポートに余裕があるなら Nano key も挿しっぱなしでよい

      • たとえマルウェアが yubi の PIN を抜き取っても、すべてのパスワードを盗むには、自分にデバイスを千回タッチさせる必要がある
    • 自分は暗号化されたファイルパーティション上の sqlite DB にパスワードを保存している

      • スクリプトがパスワードを読んだらすぐにパーティションを閉じる
      • あるいは各パスワードごとにファイルを個別に暗号化して保存することもできる
      • 必要な場合はパスワードファイルを復号した後で gpg agent をクリアする
    • yubikey は PIN やタッチを使って、GPG キーの利用に承認を必須にする設定ができる

      • pass の最大の問題は、iOS で yubikey との相性が良くないことだ
  • 自分はこれが本当に好きで、毎日使っている

    • 特に OpenPGP キーと yubi の組み合わせが印象的
    • 各パスワードを個別に unlock しなければならないので、攻撃者が自分のコンピュータを完全に掌握しても、物理的にタッチしたものしか露出しない
    • 一度 unlock すると全部開いてしまう keepass や bitwarden と違い、データベース全体が露出するリスクが少ない
  • CLI が好きな人にとっては pass は面白いが、普通のユーザー(いわゆる「normie」)には、Desktop では KeepassXC、Android では KeepassDX、そして Wireguard によるリモートアクセスの方が向いていそうだ

    • keepass であまり語られない便利機能の一つに、複数の vault を同時に開いて検索できる点がある

      • ほとんどのパスワードマネージャーは単一の vault を前提に設計されており、結局すべてのパスワードに同じレベルの強度が必要だという前提になっている
      • 自分の場合、重要でないサイトが 70% ほどで、ログインのたびに長いマスターパスワードを入れるのは面倒だ
      • keepass なら、その 70% の重要でないデータを別 vault に入れて短いパスワードを使えるので、気楽に扱える
    • 「normie」という基準は相対的だと思う

      • 自分は単に 1Password を使って、結果を信頼する側だ
    • keepassxc.cli も忘れてはいけない

      • 秘密情報をプログラム的に出し入れするのに本当に便利
      • 以前、暗号化された secrets バンドルを作る際に GNU pass を先に試したが、gnupg の管理が複雑で、ホームディレクトリに値を保存する点などもあって結局断念したことがある
      • pass は普及度の点では良いが、copy-one-file ワークフローに合わず、keepassxc に戻った
    • 自分のユースケースの一つで keepass では解決しにくいのは、分離された2台のコンピュータでそれぞれパスワードを作成し、後で統合する作業だ

    • KeepassXC も使ってみたいが、配偶者と認証情報を共有しやすくない

      • 専用 vault を使うとしても、既存情報を共有するには結局手作業で copy/paste が必要
      • そのため今は Vaultwarden に落ち着いており、思った以上に安定して使えている
  • pass は一人で使うなら面白いソリューションだが、複数人と共有するなら注意が必要

    • 会社のパスワード管理に使うなら、誰がいつどの秘密情報を見たか知る方法がなく、人員の入れ替わりのたびに全パスワードを変更しなければならない

    • 誰かに新たなアクセス権が必要になっても、ファイルを選択的に再暗号化する標準的な方法がないため、自分で実装する必要がある

    • git で保存はしているが、コミットメッセージが自動生成されるため、実際には Dropbox と大差ない

    • 誤って不適切な内容を push してしまって戻したくなっても、git history を書き換える必要があり、他のユーザーの環境では壊れる可能性がある

    • 単純で手でいじれるのも利点だが、この単純さ自体が罠でもある

    • hash(site_name+main_password) 方式のように美しく見えても、現実にはさまざまな問題が出てくる

    • ビジネス環境でも end-to-end 暗号化や、ユーザー間の fingerprint 検証などの機能が必要で、Bitwarden が今のところ適任そうだが、もっと良い事例があれば知りたい

    • pass でもディレクトリごとに異なるキー(または複数キー)を適用すれば、グループ別・人別にアクセスを細分化できる

      • 例: admins フォルダは admin キー、techs フォルダは admin と tech の両方のキーでアクセス可能
      • 各従業員ごとに秘密鍵を指定して、特定サイトへのアクセス者だけを管理することも可能
      • git submodule を使って従業員ごとのアクセス範囲を制御できる
      • git の履歴を通じて、いつ誰にどのパスワードを公開したかも追跡できる
    • 自分の会社では 1Password を使っている

      • グループごとの共有 vault、サービスアカウント、.env ファイルを使う op run コマンド、CI 連携など、さまざまな機能をサポートしている
    • 評価しただけで実運用経験はないが、チーム向けのパスワード共有ツールとして passbolt も良い選択肢だった https://www.passbolt.com

      • 公開鍵方式で、平文パスワードは各ユーザーのローカルでのみ見え、共有パスワードは各ユーザーの公開鍵で再暗号化される
    • うちの会社では "pa" というあまり知られていないツールをうまく使っている https://git.j3s.sh/pa

      • age ベースで、複数キーによる暗号化が可能
    • 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 に乗り換えた経験を共有する

      • 同様に数百の secrets を pass に保存してきた
      • 複数デバイスでの同期が簡単で、重要なパスワードだけをスマホやノートPCに置く運用にも限界があったため移行した
      • KeePassXC は1つのファイルで同期しやすく、Android アプリも2つともよくできている
      • 手作業でのデータ移行に3時間ほどかかったが、その機会にデータ整理もできた
      • パスワード管理はたまに使う記録アプリのようなものなので、1ファイルをネットワークで移すだけで3台同期できれば十分だ
    • passmenu というツールもある

      • キーバインドで呼び出すと、メニューのオートコンプリートで目的のパスワードを選んでクリップボードにコピーできる
      • コマンドプロンプトでパスやパスワードの経路を入力する必要がないので便利
    • pass の Android アプリが終了していたのを知らなかった

      • fork を見たところ活発に開発されていて安心した
      • 公式プロジェクトと fork が引き継がれなかった理由が気になる(セキュリティ実践の問題かとも思う)
      • 自分はプラグインよりも、プロンプトで pass -c を使って自分でコピーする方を好む
      • プラグインはブラウザ起動時に gpg キーが解除されてしまったり、プラグイン作者が意図的に自分のパスワードを流出させる可能性があったりして、信頼面の問題がある
    • vaultwarden のオフライン利用体験が気になる

      • ときどきネットワーク接続が不安定な環境で、オフラインで認証情報の参照や更新がどうしても必要になる
      • 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 でキーを取り出し、oathtool で TOTP コードを生成する
    • 古い pass 用 Android アプリの中には、もはや自分の端末にインストールできないものもある

      • GPG 連携が煩雑で、実際にはうまくいかない
  • GPG の代わりに age を使う場合に役立つ passage というツールがある https://github.com/FiloSottile/passage

    • age を使う pass 系マネージャーはいくつもある
  • 最近は10年近く、別のアプローチを使っている

    • すべてのパスワードのメタデータは平文 JSON に保存し、各項目には user、バージョン、パスワード規則(長さ、文字種など)を記録する

    • 実際のパスワードは保存せず、パスフレーズ + メタデータのハッシュでパスワードを「決定的」に生成する

    • バージョン番号を変えるだけでまったく新しいパスワードが生成され、「バージョン」だけ見れば履歴も簡単に確認できる

    • ほとんど共有できないのが欠点(他人が自分のパスフレーズを知っている必要がある)

    • 共有が必要な場合は、パスワードジェネレータで暗号文を生成して別メタデータとして保存するモードも考えたが、実際にはあまり必要なかった

    • パスワード生成器方式が良いのは、vault を失う心配が減ることだ

      • 共通の hash function さえあれば、どんな環境でもパスワードを生成できる
      • 問題はメタデータ(サイト一覧、ルールなど)が公開されることで、依然としてセキュリティ上の懸念が残る点
      • vault 方式と本質的に大きな違いはないように感じる
    • 最近 SECUSO password generator を通じてこの方式を知った https://secuso.aifb.kit.edu/english/105.php

      • 決定的パスワード生成を使っている
      • SECUSO はオープンソースアプリ群としても良い
    • パスフレーズを共有すると露出面が広がり、一度漏えいすると複数の認証情報が一度に危険にさらされる

  • pass を8年以上使っていて、1300件のパスワードを保存している

    • git でデバイス間同期しており、本当に満足して使っている

    • 「1300件のパスワードって、どうしてそんなに多いの?」

      • 実際に数えたわけではないが、自分でもどれだけあるのかよく分かっていない