はじめに
Linux環境では、mkpasswdコマンドを使ってパスワードを生成する方が多いと思います。
総務省が「定期的にパスワードを変更すべき」という方針を撤回したというのは記憶に新しいですが、なんだかんだでパスワード変更が必要になるシーンはまだまだ多いと思います。
また、単にパスワードを自動生成しても「大文字のローマ字が含まれていないとルール上NG」「パスワードに記号が入っていると入力しづらい」といったことが起きるため、文字種を指定したパスワードの生成ができるととても便利です。
そこで、mkpasswdコマンドのパラメーターを使って、パスワードの文字種を自由に指定する方法を少し紹介したいと思います。
事前準備
- mkpasswdコマンドを使うには、expectというパッケージのインストールが必要になります。
- CentOSの場合、インストールタイプをBASICに指定するとmkpasswdコマンドを手動でインストールする必要があります。
[root@akagi ~]# yum install expect -y
mkpasswdコマンドの概要
- パラメーター無しで
mkpasswd
だけ入力して実行すると、ランダムなパスワードが返されます。 - 英数字と記号が混ざった「9文字のパスワード」となります。
- オプションを指定することで、パスワードの長さや含まれる文字の種類を自在にコントロールすることが可能です。
オプション | 説明 |
---|---|
-l {数値} | パスワードの文字数 |
-d {数値} | パスワードの含まれる数字の個数(最低数) |
-c {数値} | パスワードに含まれる小文字のローマ字の個数(最低数) |
-C {数値} | パスワードに含まれる大文字のローマ字の個数(最低数) |
-s {数値} | パスワードに含まれる記号の個数(最低数) |
パスワードの生成の一例
- 上記のパラメーターの説明を見ると分かりますが、数字や小文字のローマ字などは「最低数」を指定するようになっています。
- これを逆手にとると、「パスワードに含まれる文字種」を自由にコントロールすることができます。
- 例えば「パスワードの文字数が8文字」の時、以下のように設定すると「"最低の文字数"を足しただけでパスワードの文字数が飽和する」ため、結果的に大文字のローマ字と記号が入らないパスワードを作ることができます。
- 数値:最低4文字
- 小文字のローマ字:最低4文字
- 大文字のローマ字:最低0文字
- 記号:最低0文字
数字のみのパスワードを作る場合
-
文字数=数字の数
とした上で、ローマ字や記号の文字数を全て0文字とします。
[root@akagi ~]# # 数字のみから成る、8文字のパスワードを生成する。
[root@akagi ~]# mkpasswd -l 8 -d 8 -c 0 -C 0 -s 0
07752792
ローマ字と数字のみのパスワードを作る場合
-
文字数={数字の数+ローマ字の数}
とした上で、記号の文字数を0文字とします。
[root@akagi ~]# # 小文字のローマ字4文字と数字4文字から成る、8文字のパスワードを生成する。
[root@akagi ~]# mkpasswd -l 8 -d 4 -c 4 -C 0 -s 0
8ykwi972
[root@akagi ~]# # ローマ字4文字(大文字:1、小文字:3)と数字4文字から成る、8文字のパスワードを生成する。
[root@akagi ~]# mkpasswd -l 8 -d 4 -c 3 -C 1 -s 0
25hi1Iv0
記号も含むパスワードを作る場合
- 数字/ローマ字/記号が混ざったパスワードを作りたいだけなら、文字数さえ指定すればOKです。
- 数字/ローマ字/記号の文字数を指定したい時は、
文字数={数字の数+ローマ字の数+記号の数}
とすれば、パスワード中に含まれる文字の配分を自由に指定することが出来ます。
[root@akagi ~]# # 数字4文字と小文字のローマ字4文字、記号1文字から成る、9文字のパスワードを生成する。
[root@akagi ~]# mkpasswd -l 9 -d 4 -c 4 -C 0 -s 1
@bi4ag510