【Mac初心者向け】pwgenで安全なパスワードを簡単に生成しよう
こんにちは、虎塚です。
皆さんは普段パスワードをどのように作成されていますか?
お客様や同僚に自分が構築したサーバを引き渡す際、パスワードに「password」などと設定してドン引きされてセキュリティ上のリスクを作っていないでしょうか。
今日は、Macで使えるパスワード生成ツールのpwgenをご紹介します。
ほかの選択肢
クロスプラットフォームアプリの1Passwordや、Mac標準ツールのKeychainを使うとパスワードの生成や管理ができます。しかし、次のような問題があります。
- GUIアプリケーションなので、起動からパスワードを得るまでに複数のアクションが必要
- 一度に複数のパスワードを作成できない
1つ目は、ターミナルの上で過ごすのが好きな方には同意いただける話ではないでしょうか(?)。2つ目は、記号混じりのパスワードを作成したいときに顕著になる問題です。
たとえば、Amazon RDSのインスタンスを起動する時に設定可能な、マスターユーザのパスワードの要件を見てみましょう。
MasterUserPassword
The password for the master database user. Can be any printable ASCII character except "/", """, or "@".
- MySQL
- Constraints: Must contain from 8 to 41 characters.
- Type: String
- Oracle
- Constraints: Must contain from 8 to 30 characters.
- Type: String
- SQL Server
- Constraints: Must contain from 8 to 128 characters.
Type: String
Required: Yes
パスワードには、「/」、「"」、「@」を除く、印刷可能なASCII文字が利用できます。
しかし、多くのパスワード生成・管理ツールでは、「パスワードに記号を含むか否か」という設定しかできません。仕様で許容される記号だけを含むパスワードを生成するには、何度もパスワード生成を試行することになります。
この制約は、pwgenでもじつは同じです。しかし、後でご紹介するように、pwgenでは一度に複数のパスワードを生成できますので、利用可能なものを採用するまでの時間が短縮できます。
そこで、使い慣れたmkpasswdを使おうという気持ちになるかもしれませんが、CUIで使えることを除いては同じ問題があります。今回はパスして、pwgenを使ってみましょう。(Mac OSにプリインストールされていないという点では、pwgenもmkpasswdも同じです)
pwgenのインストール
pwgenは、brewでインストールできます。
% brew install pwgen ==> Downloading https://downloads.sourceforge.net/project/pwgen/pwgen/2.06/pwgen ######################################################################## 100.0% ==> ./configure --prefix=/usr/local/Cellar/pwgen/2.06 --mandir=/usr/local/Cellar ==> make install /usr/local/Cellar/pwgen/2.06: 4 files, 44K, built in 5 seconds % which pwgen /usr/local/bin/pwgen
pwgenの機能
pwgenは、pwgen [ OPTION ] [ pw_length ] [ num_pw ]の形式で使います。pw_lengthはパスワードの文字数、num_pwは生成する個数です。
便利そうなオプションを抜粋して、次に示します。
オプション | 内容 |
---|---|
-0, --no-numerals | パスワードに数字を含めない |
-A, --no-capitalize | パスワードに大文字を含めない |
-B, --ambiguous | パスワードにまぎらわしい文字(lと1, 0とOなど)を含めない |
-c, --capitalize | パスワードに少なくとも1個の大文字を含める(ttyへの標準出力ではデフォルト) |
-n, --numerals | パスワードに少なくとも1個の数字を含める(ttyへの標準出力ではデフォルト) |
-y, --symbols | パスワードに少なくとも1個の特殊文字を含める |
-Bオプションは一見便利そうですが、利用できる文字数が大幅に減少するので、推奨されていません。たとえば、パスワードをコピーアンドペーストできない状況、たとえば、紙に印刷して連絡する必要がある場合などに使うとよいのではないでしょうか。
-yオプションを使うと、記号を含むパスワードを生成できます。
pwgenの使用例
先ほど引用したRDSのマスターユーザパスワードの要件に沿ったパスワードを、pwgenで生成してみましょう。
具体的には、パスワードの要件を次のように定めます。
- パスワードの文字数は20文字とする
- パスワードに数字を1個以上含む
- パスワードにアルファベット大文字を1個以上含む
- パスワードに記号を1個以上含む(ただし「/」、「"」、「@」以外)
上記を満たすパスワードを10個まとめて生成して、その中から適切な記号を含むパスワードを採用します。
コマンドは次のようになります。(実行結果は、一例です)
% pwgen -y 20 10 | grep -v @ | grep -v / | grep -v \" ieghoosheephaeb*aiy) phaevaepochiel[ienah paazaurum&aingo)phae xuxaizaeda$obaingail goozairalo*i>mieg&ee imepie:gheiduzeolee> taew~e-ataipheingeix ahxeek+ohruguxebaegh
1個以上の数字を含めるためのオプション「-n」と、1個以上の大文字を含めるためのオプション「-c」の指定は、省略しました。ターミナルで実行する限り、これらはデフォルトの動作になります。
「/」と「"」と「@」を避けるために、grepで否定のマッチを指定しています。これによって、適切なパスワードだけが表示されました。
おわりに
pwgenもgrepも便利ですね。LinuxでもMacでも、こういった便利なツールを活用して、適切なパスワードを設定するようにしましょう。
それでは、また。
(クラスメソッド非公式キャラクター・くらめそちゃん)