このエントリーをはてなブックマークに追加


パスワードの長さや文字などの制限事項を設定する方法

パスワードの文字列に対し、長さや英字大文字小文字、記号などを含めるなどの制限を設定する方法を以下に記します。
動作確認したディストリビューションはCentOS5になります。
他のバージョンでも同様の設定で動作すると思います。


関連記事、関連資料

PAMに関する記事です。

PAMの設定を変更することにより実現する

PAMのpam_cracklib.soの設定を変更することにより、パスワードに関する制限事項を設定することができます。

パスワード設定のファイルのありか

CentOS5では、以下のファイルになります。

/etc/pam.d/system-auth

上記のファイル内の以下の設定が、パスワード制限を設定する行になります。

password    requisite     pam_cracklib.so try_first_pass retry=3

実際にはpasswordファイルが以下のようになっています。

# cat passwd 
#%PAM-1.0
auth       include      system-auth
account    include      system-auth
password   include      system-auth

includeでsystem-authになっているので、system-authファイルが設定ファイルの実態になります。

pam_cracklibのオプション

pam_cracklibのオプションを以下に記します。
使用例は別途記述してあります。

オプション説明
type=文字列passwdコマンドを実行したときのプロンプトに表示する文字列を指定type=hello
retry=数値パスワード変更時の試行回数を指定retry=3
difok=数値現在のパスワードと指定した数字以上異なれば変更を許可するdifok=3
difignore=数値difokが無効になる長さを設定するdifignore=23
minlen=数値パスワードとして認める採用文字数を指定~厳密にminlenの値が以上のパスワード文字列にしたい場合は、
以下のオプションを設定すること。
理由は、デフォルト値では、dcredit=1, ucredit=1, lcredit=1, ocredit=1となっており、
minlenに指定した値より少ないパスワード文字数でも通ってしまいます。*1
minlen=8
dcredit=-数値パスワード内に必要とする数字の数を指定する(値はマイナス値となり、minlenから引き算されます。)dcredit=-2
ucredit=-数値パスワード内に必要とする英大文字の数を指定する(値はマイナス値となり、minlenから引き算されます。)ucredit=-2
lcredit=-数値パスワード内に必要とする英小文字の数を指定する(値はマイナス値となり、minlenから引き算されます。)lcredit=-2
ocredit=-数値パスワード内に必要とする記号の数を指定する(値はマイナス値となり、minlenから引き算されます。)ocredit=-1

*1 minlenの値ですが、dcreditなどがプラスの値の場合、以下のような解釈になります。
dcredit=1の場合、パスワードに1つの数字を含む時はminlenからdcreditを引いた値が最低文字数となります。
dcreditの意味である、数字が含まれない場合はminlenが最低文字数となります。

他のオプションや詳細はman pam_cracklibで確認してみてください。

typeを試す

typeにHELLOを設定してpasswdコマンドを実行してみます。
設定は以下の通りです。

password    requisite     pam_cracklib.so try_first_pass retry=3 type=HELLO

実行結果
HELLOが出力されていのが確認できます。

[sakura@centos ~]$ passwd
Changing password for user sakura.
Changing password for sakura
(current) UNIX password: 
New HELLO password: 

minlenの設定例

minlen=12を設定した場合の例。 設定例は以下の通りです。

password    requisite     pam_cracklib.so try_first_pass retry=3 minlen=9

上記の例だと、デフォルト値であるdcredit=1, ucredit=1, lcredit=1, ocredit=1が設定されているため、
9文字以下でもパスワードが設定できてしまいます。
詳細は「pam_cracklibのオプション」の*1を参照してください。

dcredit, ucredit, lcredit, ocreditの設定例

設定例は以下の通りです。

password    requisite     pam_cracklib.so try_first_pass retry=3 minlen=9 dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1

パスワード文字数は9文字以上で、
数字が1文字以上、英大文字が1文字以上、英小文字が1文字以上、記号が1文字以上を含むパスワードが設定できます。
たとえば数字が不要の場合は、dcredit=0のように0を指定します。

以上、pam_cracklibの設定方法をいくつか紹介しました。

その他の設定値説明

以下に今回使用した設定値の説明を記します。

requisite

今回、requisiteはpam_cracklib.soの処理が失敗すると処理を中断します。
他には、required、required、requiredがあります。
pam_cracklib

try_first_pass

try_first_passの説明は以下の通りです。

SourceForge.JP Magazine
http://sourceforge.jp/magazine/08/11/11/0153210/2

  • SourceForge.JP Magazineの上記記事からの抜粋
    PAMは、ユーザーからのパスワードの取得をサポートする。
    各行ではPAMに対し、パスワードが必要であることと、ユーザーから取得済みのパスワードを再利用するか(use_first_pass)、
    あるいは既に取得したパスワードがあればそれを再利用し、
    なければ入力を促すか(try_first_pass)を指定することができる。
    これは便利な機能である。
    あるサービスに対するPAM認証が2行存在する場合にtry_first_passを用いれば、
    その2行から呼び出される認証サービスにおいてパスワードは2回必要となるが、
    PAMが処理してくれるおかげで入力は1回で済む。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-03-20 (金) 22:30:17