エンジニア向けパスワード管理ツールPassを紹介します
皆さんはパスワード管理ツールを使っているでしょうか。いろいろなサービスで共通のパスワードを利用したり、推測のできるような簡単なパスワードを利用することはセキュリティ的に非常に良くありません。そこで、これらの問題を解決するためにパスワード管理ツールが利用されています。この記事ではパスワード管理ツールの一つである”Pass”を紹介しようと思います。
どんな人が使うべきか
Passの紹介を始める前に、どんな方が利用に向いているか明らかにしておこうと思います。まず、PassはCLIツールです。ターミナル画面からCLIツールを利用することに抵抗のある方や、この文章の意味がよくわからない方(エンジニアではない方)は他のパスワード管理ツールを利用することをおすすめします。代替ツールとしては、1PasswordやLastPassが有名です。
逆に、以下のような要望を持っているエンジニアの方には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.com
、google.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管理やモバイルアプリについては別途紹介しようと思います。シンプルで慣れると非常に使いやすいので、是非使ってみてください。
Ermi
termina.ioの記事全般を書いています。東京大学 大学院 情理でコンピュータサイエンスを学びました。プログラミング言語など計算機科学全般に興味があります。キーボードやイヤホンなど、身の回りのものに強い拘りを持つ傾向があります。そして、沼にハマって帰らぬ人へと...。
最近の記事
Ermi
termina.ioの記事全般を書いています。東京大学 大学院 情理でコンピュータサイエンスを学びました。プログラミング言語など計算機科学全般に興味があります。キーボードやイヤホンなど、身の回りのものに強い拘りを持つ傾向があります。そして、沼にハマって帰らぬ人へと...。