View on GitHub

雑記

技術メモなど

Unix Pass によるパスワード管理

巷ではパスワード管理ソフトがいくつか出回っているみたいですが, そんなプロプライエタリ1なソフトウェアにパスワードというアイデンティティそのものを任せていいんですか???

ということで, pass2 を使ったパスワード管理を紹介します.

Pass

pass は GPLv2 ライセンスのついた CLI のパスワードマネージャです. パスワードは GnuPG で暗号化されたファイルで管理されています. サブコマンドに git が使え, 適当な場所を remote にして同期したり, パスワードの変更に対してもバージョン管理の恩恵を受けることができて便利そうです(私は使ってませんが…).

使い方もシンプルで,

みたいな感じです. パスワードを管理するファイルは, 一行目にはパスワードが書かれていますが, 二行目以降には補助的な情報を pass edit 等で追記できるようになっていて, ID や秘密の質問を書いたりするのに使っています.

pass init GPG_ID で初期化するんですが, gpg を使っている関係上自分の gpg key を用意しておく必要があります.

Pass の運用

Pass はシンプルな CLI ツールです. シンプルなのは良いことだと思いますが, それだけではパスワード管理に不便です. ここでは私が Ubuntu, Windows, Android でどう相互運用しているか説明します.

パスワードファイルの共有

pass 自体には git がサブコマンドとして用意されているので適当な remote を通じてパスワードファイルを共有すればいいんですが, パスワードのファイル名自体は暗号化されていないので, public な場所を remote にするとどんなパスワードを管理しているのかは筒抜けだったりします. それが嫌だったので, パスワードのファイル自体を私は GoogleDrive 内に置いています3.

pass のファイルはデフォルトだと ~/.password-store 以下で管理することになっています. 私は GoogleDrive 内のディレクトリへシンボリックリンクを張ってますが, 環境変数 PASSWORD_STORE_DIR を指定することで任意のディレクトリへ動かすこともできます.

GoogleDrive の共有

Windows は言うまでもなく公式アプリを使えばファイル同期はできますが, 他はそうでもありません. 基本的にアプリやブラウザを通じて必要に応じてダウンロードできますが, 相互で同期し続けるような手段を公式は用意してないようです. そこで相互の同期のために

を使っています.

google-drive-ocamlfuse は ocaml で書かれた GoogleDrive を FUSE ファイルシステムでマウントする CLI ツールです. ただしセットアップにブラウザを立ち上げて GoogleDrive の認証をするので, 完全に CLI で完結できるわけではないようです4.

DriveSync はまぁ, 一般の GoogleDrive 自動同期アプリですね. 無料だとアプリ内広告がついたり 1 ディレクトリしか同期できなかったりしますが, 今回はパスワードファイルの入った 1 ディレクトリしか同期する必要がないので事足りています.

別の環境での gpg

先述の通り pass は gpg に依存しているので, 他の環境で pass を使いたければ gpg を入れる必要があります. ubuntu は apt 等で入れれば良いですが, 他は

を使っています.

gpg4win は公式で提供されているソフトです. Kleopatra というソフトを通じて鍵を管理できます.

OpenKeyChain は Android で pass を使うアプリが依存しています.

各々, 生成した gpg key を import しましょう.

別の環境での pass

pass は unix 向け CLI ツールです. 他の環境では何か別の GUI を使ったり使わなかったりします.

QtPass は Qt で実装された Pass の GUI です. Qt ベースなのでクロスプラットフォームです. 個人的には CLI が便利なので結局 WSL の terminal を通じて pass を叩いていますが5

Android Password Store は唯一?の Android 向け pass 実装です. デフォルトでクリップボードに時間制限付きコピーできたり使い勝手が良い印象です. OpenKeyChain 依存しています.

まとめ

全体像はこちらになります.

おまけ: Firefox 拡張の passff

pass へ firefox からアクセスできる拡張 passff がありますが, ちょっと導入に癖があります. windows でも *nix 系でも対応しているようですが, ここ にある通り, plugin をブラウザへ入れる以外に shell(bat) スクリプトを動かす必要があります. どうも拡張から, 適当な場所に置いた python スクリプトを実行してデータをやりとりするようで, 上記の shell スクリプトはこの python スクリプトを適当な場所へ置くものです.

更に厄介なことに, windows だと cygwin の利用を想定してか, python と pass の両方がコマンドプロンプトの PATH から見えていることを前提に bat ファイルが書かれているようです. 私の場合 WSL に pass が入っているので, c:/Users/USER_NAME/AppData/Roaming/passff/passff.bat 辺りにあるファイルを修正し,

python C:\Users\USER_NAME\AppData\Roaming\passff\passff.py %*

C:\Windows\System32\bash.exe -l -c "/mnt/c/Users/USER_NAME/AppData/Roaming/passff/passff.py %*"

に書き換えることで windows でも動かすことができました. この場合, wsl 側に python が入っていることが前提になります. 環境に応じてうまいことやってください.

Footnote

  1. これも自由なソフトウェアだけで管理できているわけではないが… 

  2. ググラビティが低すぎる… 

  3. 将来自前で private な git 鯖を用意するかもしれない 

  4. GUI 環境で認証だけするみたいなことは可能らしい 

  5. pass のディレクトリへは /mnt/c/PATH/TO/GDrive/DIR へシンボリックリンクを張っている