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に大きな値を設定したことで、パスワード変更の要求は出されることがなくなった。

「LDAPで利用するパスワードの期限が切れた」への1件のフィードバック

  1. SambaでOpenLDAPの認証を使おうと、smbldap-toolsを使ったのですが何度パスワードを変更しても期限が切れる問題に遭遇しました。
    原因がわからなかったのですが「勝手ながらの予測では、パスワード変更を求められ入力したホストにはrootbinddnのパスワードが入っておらず、匿名で認証だけを掛けるホストだったため、パスワード変更の権限がなかったのではないか、と推測する。」という箇所がヒントになりました。ありがとうございました。

コメントを残す