エンジニア向けパスワード管理ツールPassを紹介します

pass-the-standard-unix-password-manager

皆さんはパスワード管理ツールを使っているでしょうか。いろいろなサービスで共通のパスワードを利用したり、推測のできるような簡単なパスワードを利用することはセキュリティ的に非常に良くありません。そこで、これらの問題を解決するためにパスワード管理ツールが利用されています。この記事ではパスワード管理ツールの一つである”Pass”を紹介しようと思います。

Contents

どんな人が使うべきか

Passの紹介を始める前に、どんな方が利用に向いているか明らかにしておこうと思います。まず、PassはCLIツールです。ターミナル画面からCLIツールを利用することに抵抗のある方や、この文章の意味がよくわからない方(エンジニアではない方)は他のパスワード管理ツールを利用することをおすすめします。代替ツールとしては、1PasswordLastPassが有名です。

逆に、以下のような要望を持っているエンジニアの方にはPassはぴったりのツールだと思います。

  • パスワードをシンプルに管理したい
  • gitで管理したい
  • 特定のサービス(企業)に頼らずに、自分で安全に管理したい
  • 内部で何をしているのかがはっきりとわかるツールを使いたい

それでは、本題に入りましょう。

Passとは

非常にググラビリティの低い名前ですが、Passという名前のパスワード管理ツールがあります(公式のページはこちらです)。「The standard unix password manager」だと言っていますね。実態は軽量なスクリプトファイルで、CLIツールとして提供されます。

Passでは、gpgによって暗号化されたファイル内に各パスワードを保存することでパスワード管理を行います。それぞれのファイル内を参照する(特定のパスワードを見る)には、ルートパスワードが必要になります。暗号化されたファイルがローカル(~/.password-store)に追加されていくだけなので、gitで管理をして複数端末間で共有する事ができます。また、モバイル端末用のアプリもオープンソースで開発されているので、「スマホからWebサービスにログインができなくて困る」ということはありません。

インストール方法(GnuPGで鍵を作成)

Passではgpg(GnuPG)を利用するため、gpgのインストールが必要になります。Macの場合は、以下のコマンドで必要なツールをインストール可能です。

$ brew install gnupg gpg-agent pinentry-mac

次にgpgで鍵を作成します。以下のコマンドで作成可能です。詳細は割愛しますが、インタラクティブに質問に答えていくことで鍵の作成が可能です。

$ gpg --full-gen-key

問われるのは、名前、メールアドレス、有効期間、鍵長、使用する暗号化アルゴリズム、ルートパスワードなどです。特に拘りがない場合は以下を設定してください。

  • 有効期間: なし(0)
  • 鍵長: 2048ビット
  • 暗号化アルゴリズム: RSA(署名のみ)とRSA(暗号化のみ)

ルートパスワードには自分が覚えられる強固なものを指定しましょう。Passで各パスワードを取得する際などに必要になります。

また、楕円曲線暗合などを利用したい場合は、以下のように--expertオプションを指定することで利用可能になります。

$ gpg --full-gen-key --expert

作成された鍵は~/.gnupg内に置かれています。

インストール方法(Passをインストール・セットアップ)

鍵を作り終わったので、Passをインストールしましょう。Macであれば以下のコマンドで入れられます。

$ brew install pass

次にホームディレクトリで以下のようなコマンドを実行します(これは例なのでコピペしても動きません)。<gpg-id>の部分には、先ほど作成した鍵のidを指定します。

# Not Executable!
$ pass init <gpg-id>

自分の鍵のidは以下のコマンドで確認する事ができます。

$ gpg --list-keys

例えば、Ermiという名前、ermi@termina.ioというメールアドレスで鍵の登録をした場合はErmi <ermi@termina.io>という文字列が上記コマンドで指定するidになります。つまり、この場合実行するべきは以下です。

$ pass init "Ermi <ermi@termina.io>"

これでセットアップが完了しました。~/.password-storeが作成されていて、この中に暗号化された個々のパスワードが置かれていくことになります。

Passの使い方

セットアップが終わったので、使い方を解説していきます。Passにはいろいろなサブコマンドがありますが、ここではよく使うコマンドを中心に紹介します。

pass generate <pass-name>

$ pass generate <pass-name>
$ pass generate <pass-name> -n  # パスワードに記号を含めたくない場合
$ pass generate <pass-name> 12  # パスワードの長さを指定したい場合(ここでは12にしている)

新しいパスワードをランダムに生成します。新しいWebサービスのログインアカウントを作るときなどに使用すると良いです。

<pass-name>にはわかりやすい名前をつけましょう。名前はスラッシュ区切りにする事で階層構造を作る事ができます。僕の場合は、google.com/foo@gmail.comgoogle.com/bar@gmail.comのようにドメイン/アカウントIDという形式で名前をつけるようにしています。こうすることで、サービスごとにアカウントを管理できますし、「どのメールアドレスで登録したかわからない」ということもなくなります。

生成されたパスワードを確認するためには、すぐ後で紹介するshowコマンドを利用します。

pass show

$ pass show

showの後に引数を渡さなければ、登録されているパスワードを階層構造で表示します。例えば、先述のようにgoogle.comに対して二つのパスワードを作成すると以下のように出力されます。ちなみに、何も追加していない状態では「Password Store」とだけ表示されます。

Password Store
└── google.com
    ├── bar@gmail.com
    └── foo@gmail.com

pass show <pass-name>

$ pass show <pass-name>

showの後に登録したパスワード名を指定すると、パスワードの中身を表示する事ができます。実行するとルートパスワードが聞かれるので、gpgの鍵のパスワードを入力してください。

実際のところ、Passに慣れてくるとshowコマンドの利用頻度は高くありません。ほとんどの場合、次に紹介するpass -cで済ませられます。

pass -c <pass-name>

$ pass -c <pass-name>

指定したパスワードをクリップボードにコピーします。パスワードを使って実際にログインをする場合などに利用します。セキュリティの観点から、45秒後に自動でクリップボードから消される仕様になっています(偉い)。

pass mv <old-pass-name> <new-pass-name>

$ pass mv <old-pass-name> <new-pass-name>

既にあるパスワードの名前を編集したい場合に利用します。名前がそのまま階層構造を表すので、階層構造の変更をしたい場合にも利用することになります。

pass edit <pass-name>

$ pass edit <pass-name>

既にあるパスワードの中身を編集したい場合に利用します。使い所としては、「大文字、小文字、数字を1文字以上含めてください」みたいな制限のあるパスワードを指定しないといけない場合などです。ランダムに生成したパスワードがたまたま大文字を含まなかった場合などに、編集して適当に大文字を追加したりしています。

pass insert <pass-name>

$ pass insert <pass-name>

パスワードを自動で生成するのではなく、自分で決める場合に使用します。主に、既に登録済みのアカウントをPassに追加したい場合などに利用します。

pass rm <pass-name>

$ pass rm <pass-name>

説明するまでもないかもしれませんが、その名の通り登録しているパスワードを削除します。消したら戻せないので注意してください。


最後に

この記事では、Passというパスワード管理ツールを紹介しました。思いのほか記事が長くなったので、git管理やモバイルアプリについては別途紹介しようと思います。シンプルで慣れると非常に使いやすいので、是非使ってみてください。