文字列が辞書に載っていない物かどうかをコマンドで調べたい。
cracklib-check – Check passwords using libcrack2
$ echo hogefuga | cracklib-check
hogefuga: OK
$ echo test123 | cracklib-check
test123: 辞書の単語に基づいています
$ echo 1234123 | cracklib-check
1234123: 異なる文字が十分に含まれていません
スクリプト書いた。
# cat check_password.sh #!/bin/sh PASSWDFILE=$(cat /root/password.txt) # ID:Password の形式のリスト IFS_back=$IFS IFS=$'\n' for LINE in $VPASSWDFILE do PASSWORD=$(echo $LINE | cut -d: -f2) USERID=$(echo $LINE | cut -d: -f1) RESULTS=$(echo $PASSWORD | cracklib-check) # OKなら "fugagaga: OK" と帰ってくる。 CHECK_OK=$(echo $RESULTS | cut -d: -f2 | sed -e "s/^\ //") if [ $CHECK_OK != 'OK' ] then echo "$USERID@example.or.jp:$RESULTS" fi done IFS=$IFS_back
こんな感じで結果が出力される。
asao@example.or.jp:waaaaa: it is based on a (reversed) dictionary word
fax@example.or.jp:fax: it is too short
oshi@example.or.jp:lalalalala: it is based on a dictionary word
※パスワードは適当です。