LDAPで利用するパスワードの期限が切れた
1. LDAPのクライアントになるホストにsshしたら怒られた
LDAPのクライアントになってユーザ認証を行っているホストにsshでコマンドを流したら怒られた。
shell> ssh host command WARNING: Your password has expired. Password change required but no TTY available.
エラーの内容からすると、”あなたのパスワードは期限が切れています。そしてパスワードの変更をしたいけれど、プロンプトがないからできません”となっている。
確かにsshでコマンドを直接流しているのでTTYがない。なのでパスワード変更ができない。他の方法でTTYが存在するログインをしてみた。
shell> login login: hogetan Old Password: New Password: Retype New Password:
こっちでは正常にパスワードの変更を求められた。さてココで、古いパスワードを入力し新しいパスワードを入力し、パスワードの変更を正常に行った、かに見えたんだけれど、再度ログインすると同様にパスワードの変更を求められる。
コレはおかしいぞ、ということでちょっと調べてみた。
2. パスワードの期限を格納している属性
そもそも、LDAPのパスワード期限について結構テキトウにスルーしてきていたので調べ直してみた。するとどうやら二つの属性値がパスワードの期限に関わっていることがわかった。
二つの属性は”shadowLastChange’と”shadowMax”。これらの値はそれぞれ、”最後にパスワードを変えた日にち”と”パスワードを変えてからの有効期限の日にち”となっている。
それぞれの値は正の整数で日にちの値になっている。最後にパスワードを変えた日にちは、エポックタイム、1970年1月1日を0か1か、起算日をその辺の値にして差分の日数となっている。ちなみに2011年12月15日付けでは15287となっていた。 15287/365 => 約41年となり、2011年は1970年から確かに41年後なのでその通りっぽい。
さて、ここでとれる行動は二つ。パスワードの変更をされたときになぜ”shadowLatChange”が更新されないのか原因を突き止めて修正する、か、パスワード期限を無期限にするか、だ。
今回は後者の解決策をとることにした。というのもFTPのみ、メールのみのユーザが多く、先のTTYが無いが故にパスワードが変更できない、といった問題が併発するだろうと思ったからだ。
前者の問題も解決すべきではあるが、それはまた問題になったときにでも。
(勝手ながらの予測では、パスワード変更を求められ入力したホストにはrootbinddnのパスワードが入っておらず、匿名で認証だけを掛けるホストだったため、パスワード変更の権限がなかったのではないか、と推測する。そうなると全てのホストにrootbinddnのパスワードを発行するか、パスワード変更専用のホストを用意しなければならない。それはちょっと手間になるし、rootbinddnを配らないという当初のポリシに反するのでこれは追求しづらい)
3. 全員分のユーザでこれをやるのか
さて、すでにそれなりの数のユーザがいる。(とは言っても数十人程度)。この状態で一人一人手作業で直すというのはいただけない。なので簡単なスクリプトを書いてみた。
今回のケースではLDAPサーバとなっているホストではsambaを通してパスワードの変更などを行えるように設定してあるので、sambaで提供されるツールを利用してshadowMaxの値を書き換える事にした。
shell> more set_expire.sh #!/bin/sh for line in `smbldap-userlist | cut -d'|' -f 2 | tr -d ' '` do echo $line USERNAME1=`echo $line | cut -d'|' -f 2` #echo $USERNAME1 smbldap-usermod --shadowMax 65535 $USERNAME1 done
このスクリプトではshadowMaxの値を65535にセットするようにしてある。多くの文献ではなぜだか9999、若しくは99999を設定するようにしてあったんだけれど、なんとなくこっちの値にしてみた。32bit unsigned integerな値を与えたけどそれもちゃんと入力できた。上限値はドコで設定されてるのかな、って感じだった。nis.schemaみたけれど詳しくは書いてなかった。
ということで、以上、shadowMaxに大きな値を設定したことで、パスワード変更の要求は出されることがなくなった。
この投稿へのトラックバック
トラックバックはありません。
- トラックバック URL
この投稿へのコメント
SambaでOpenLDAPの認証を使おうと、smbldap-toolsを使ったのですが何度パスワードを変更しても期限が切れる問題に遭遇しました。
原因がわからなかったのですが「勝手ながらの予測では、パスワード変更を求められ入力したホストにはrootbinddnのパスワードが入っておらず、匿名で認証だけを掛けるホストだったため、パスワード変更の権限がなかったのではないか、と推測する。」という箇所がヒントになりました。ありがとうございました。