ろば電子が詰まつてゐるスマートフォン用の表示で見るろば電子が詰まつてゐる2013-10-05Linuxのpasswdで使っている辞書とcracklibセキュリティ以前に、辞書攻撃に使う元ネタの辞書ファイルという記事を書いた。いうことを書いたけど、この辺については色々とややこしいバックグラウンドがあるので詳しく書いてみたい。ググってみたけど、ここについて突っ込んで書いてある日本語の記事はネットには存在しないと思う(たぶん)。6.4で調査したものです。他のディストリビューションでは細部が色々と違っているかもしれません。passwdコマンドと辞書ファイルpasswdコマンドでパスワードを変更する際、辞書に載っている言葉をパスワード設定しようとするとこういうエラーが表示される。word"がどうやって表示されているのかを調べて、辞書ファイルからこの単語を抜いてエラーが出ないようにする、というのをやってみよう。PAM認証と/etc/pam.d/passwdLinuxのpasswdコマンドでパスワードを変更する際には、認証部分にPAMの仕組みが使われている。Modulesの略で、コマンド名やライブラリ名というより、もう少し大きい「認証システムの仕組み」を指す。Linuxではログイン処理など認証機能を利用するアプリケーションが多い。それらアプリケーションがそれぞれ独自に認証処理を実装していてはよろしくないので、共通モジュールとして利用できるようにしたものがPAMの仕組みだ。PAMを利用する際は、サーバ側の設定でプログラムごとに使うPAMモジュールを選ぶことができる。passwdコマンドで使われているモジュールを確認するには、/etc/pam.d/passwdを見れば良い。optionalpam_gnome_keyring.soほほう。system-authを参照しているので、/etc/pam.d/system-authを見てみる。pam_unix.soここで詳しく説明すると、PAMの設定のお話だけで一冊の本が出来てしまうので、思いっきりはしょることにすると......。注目すべきは、以下1行である。type=[passsword]についてpam_cracklib.soが[requisite]になっているので、パスワード変更時には必ずcracklibのチェックでOKとならなくてはいけない。cracklibと辞書ファイルさてcracklibでのパスワードチェックだが、これはテストコマンドが用意されているので手で打って簡単に試すことができる。辞書に載っているかどうかは以下のようにチェックできる。標準入力から食わせないといけないのがちょっと面倒くさいのだが......。wordpasswdでも、パスワード変更の際にcracklibでパスワードチェックをおこない、辞書ファイルに載っているかどうかを調べているわけだ。cracklibが使う辞書ファイルcracklibが参照している辞書ファイルの元ネタは、/usr/share/dict/wordsというテキストファイルである。これはCentOSではシンボリックリンクとなっており、実体は/usr/share/dict/linux.wordsである。実際のモジュールはこのwordsファイルを直接読むわけではなく、/usr/share/cracklib配下のバイナリファイルを読むようになっている。/usr/share/cracklib/pw_dict.hwm/usr/share/cracklib/pw_dict.pwd/usr/share/cracklib/pw_dict.pwiこれらファイルは、create-cracklib-dictコマンドを叩いてwordsテキストファイルから変換して作成する。辞書をいじりたい場合はlinux.wordsを書き換えるだけではダメで、wordsファイル更新後に以下のように辞書ファイルを再構築する必要がある。/usr/share/dict/linux.wordsCentOSでのwordsファイルとcracklib辞書との不整合さて、ここで気をつけないといけないことがある。本来ならばOS初期状態では、/usr/share/dict/linux.wordsから作られたpw_dict.pwd群がインストールされている......と思うだろうがこれは違う。実はcracklib群のインストールパッケージと、wordsファイルのインストールパッケージは別管理となっており、これが同期していないのだ。/usr/sbin/cracklib-checkcracklib-2.8.16-4.el6.x86_64ええと、つまり何が言いたいかと言うと。「/usr/share/dict/linux.wordsに単語は載っているけど、/usr/share/cracklib/pw_dict.pwdには載っていないので通ってしまうパスワードがある」ということだ。いう単語は、/usr/share/dict/linux.wordsに載っている。初期状態のpw_dict.pwdには載っていないので、passwdコマンドでエラーにならずに変更することができる。word"とエラーとなる。この辺の動き、実用上は問題になることはまず無い。このようにPAMとcracklibの勉強を目的としているときに色々いじっていると、猛烈にハマることになる。