chpasswdのバグ?2008年07月03日 13時27分

Linuxにchpasswdというコマンドがある。

ユーザ名:パスワード

という形でリストを作成しておくと、一括でパスワードの設定ができる便利なコマンド。

このコマンドを使ってメールユーザを一括で登録するスクリプトを作り実行した。(「メールユーザの一括登録」参照」) パスワードは正しく変更された・・・ように見えた。しかし色々試してみるとおかしなことに気が付いた。例えば

user1:password

というリストを作り、chpasswdコマンドでパスワードを変更したとする。「user1」ユーザは「password」というパスワードで正しくログインできる。しかし「password1」「passwordaaa」など「password」から始まるパスワードならなんでもログインできてしまうのだ。なぜ?

色々実験してみると、

・どうやら8文字未満のパスワードなら問題ないらしい。

・しかし8文字以上になると前方8文字が一致していれば後ろはなんでもログインできてしまう。

・「passwd」コマンドで個別に設定すれば8文字以上でも問題ない。

ネットで検索してみたがいまいちしっくりした答えが見つからない。しかしある海外のQ&Aサイトでヒントを得た。どうやらパスワードの暗号化の方法に問題があるらしい。そこで/etc/shadowを覗いてみると、明らかにchpasswdとpasswdでパスワードを設定した場合ではパスワードの長さが違うことを発見した。さらに調べてみて分かったことは次の通り。

・passwdはMD5でパスワードを暗号化しているが、chpasswdはDESで暗号化している。

・chpasswdの暗号方式を変えるためには「/etc/login.defs」というファイルを編集すればいいらしい。

・passwdは「/etc/login.defs」を使用せず、PAMというもので設定しているらしい。

ということでchpasswdでパスワードをMD5で暗号化するには/etc/login.defs に「MD5_CRYPT_ENAB yes」と追加すればいいということが分かった。試しにchpasswdでパスワードを変更してみたところ、今度は最初のような現象はなくなった。

でもまあ、これはバグと言うより仕様かな。

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※投稿には管理者が設定した質問に答える必要があります。

名前:
メールアドレス:
URL:
次の質問に答えてください:
↓に「sakanade」と入力してください。

コメント:

トラックバック