LDAPのアカウントを参照しているサーバー側で[passwd]コマンドでパスワード変更を
ユーザー自身にやってもらいたいと思っています。
実際にtestユーザーでログインし、passwd実行すると
passwd test
passwd: Sorry, `passwd' can only change passwords for local or NIS users.
と言われます・・
LDAPへのアクセス権限以前の問題と思いますが、調べても良く分かりません。
いろいろ調べたんですが、FreeBSDでの対応方法が見つからずハマっています。
質問内容の文字数制限がある為、詳しく書けませんので、
下記URLに設定内容を書いてます。
http://beat8beat.blog96.fc2.com/blog-entry-2.html
ちなみに上記URLには記載してませんが、LDAPでのアカウントポリシーも設定しておりますが、
パスワードの変更期間の設定は0で、いつでも変更可能にしています。
よろしくお願いします。
先に書いておきながらなんですが、passwd の修正はあまりお勧めできません。
アカウントの所在によってpasswdとldapmodifyを使い分けるラッパーを用意されるのをお勧めします。
セキュリティアップデート等でpasswdに修正が入れば上書きされてしまう為です。
再度ldap対応の手間が発生するのはもちろんですが、間違えて古いソースを修正元にしてしまうと、デグレートさせる危険もあります。
ラッパーを書くのは初回の手間が多いですが、後々の運用まで考慮するとその方がトータル管理コストは下がるのではないでしょうか。
そうは言っても、システムのソースコードを読むのは非常に参考になります。
下記手順でソースコードのインストールが可能です。
sysinstallからconfigure->distribution->srcの下の方のubinというインストールすれば良いです。
# コメント欄を開けて頂ければそちらでフォローさせて頂きます。
非常に残念なお知らせです。
FreeBSD の passwd はLDAPに対応していません。
file と NIS のみの対応にハードコーディングされています。
case _PWF_FILES: fprintf(stderr, "Changing local password for %s\n", pwd->pw_name); break; case _PWF_NIS: fprintf(stderr, "Changing NIS password for %s\n", pwd->pw_name); break; default: /* XXX: Green men ought to be supported via PAM. */ errx(1, "Sorry, `passwd' can only change passwords for local or NIS users.");
passwd.c を修正してやれば実現可能ですが...
そこまでお考えでしょうか?
一応やり方は下記URLに記載があります。
http://www.section6.net/wiki/index.php/Setting_up_OpenLDAP_for_U...
# 先日は☆有難う御座いました。
ありがとうございます!
やはりそうですが・・
うすうす感づいてはいたのですが、
なにせ初心者なもんで、自分を信じ切れてませんでした
そちらのURL一度たどり着いたのですが・・
/usr/src/usr.bin/passwd/passwd.c
が存在しないので、やってませんでした。
できれば修正してでもやりたいのですが、
FreeBSD7,2のpasswd.cにあたるものはどこにあるのでしょうか?
よろしくお願いします。
先に書いておきながらなんですが、passwd の修正はあまりお勧めできません。
アカウントの所在によってpasswdとldapmodifyを使い分けるラッパーを用意されるのをお勧めします。
セキュリティアップデート等でpasswdに修正が入れば上書きされてしまう為です。
再度ldap対応の手間が発生するのはもちろんですが、間違えて古いソースを修正元にしてしまうと、デグレートさせる危険もあります。
ラッパーを書くのは初回の手間が多いですが、後々の運用まで考慮するとその方がトータル管理コストは下がるのではないでしょうか。
そうは言っても、システムのソースコードを読むのは非常に参考になります。
下記手順でソースコードのインストールが可能です。
sysinstallからconfigure->distribution->srcの下の方のubinというインストールすれば良いです。
# コメント欄を開けて頂ければそちらでフォローさせて頂きます。
できました!
-------------------------------------------
passwd test
Now you can change LDAP passwordi via PAM
Old Password:
LDAP Password incorrect
New Password:
Retype New Password:
-------------------------------------------
ソースを見るのは初めてだったんですが、
まだ、なにを書いているのか全部理解はできませんが、勉強になります。
でもおっしゃる通り後々の運用を考えると、全サーバーにこの手順を行うのは
現実的ではないですね。
ひとつの経験としておき、実際の運用は
-----------------------------------------------
ldappasswd -x -D "(dn)" -W -S -A -h LDAPサーバー
-----------------------------------------------
でやったほうがよさそうだと実感しました!
でもユーザーにLDAPコマンドやサーバーを知られたくないので
h_kondoさんのaliasを使う方法も考えてみます。
それはそれで・・・難関があるのですが・・
手軽にFreeBSDのソースを調べるにはcvswebを使用するとよいでしょう。
http://www.jp.freebsd.org/cgi/cvsweb.cgi/src/usr.bin/passwd/
そして簡単なldappasswdのラッパープログラムでパスワード変更を行ってもらうのはいかがでしょう。
#!/bin/sh
ME=$(whoami)
ldappasswd -x -W -D "uid=${ME},ドメイン" "uid=${ME},ドメイン" -S
この内容をldappasswd.shとして保存し、パスワード変更にはこちらを使ってもらうとか、
もうすこし手を入れるならユーザーの.cshrcにaliasを登録
alias passwd ldappasswd.sh
cvsweb知りませんでした!参考にします!
この方法は手軽でいいですね!
>alias passwd ldappasswd.sh
この方法すごく魅力的なんですが、
ローカルユーザーのホームディレクトリをLDAPユーザが共有してるので
ローカルユーザーのパスワード変更時に困ってしまいます。
ちなみに.cshrcは複数ユーザーが共有してる場合
そのホームディレクトリを使う全ユーザーに影響するんでしょうか
できました!
-------------------------------------------
passwd test
Now you can change LDAP passwordi via PAM
Old Password:
LDAP Password incorrect
New Password:
Retype New Password:
-------------------------------------------
ソースを見るのは初めてだったんですが、
まだ、なにを書いているのか全部理解はできませんが、勉強になります。
でもおっしゃる通り後々の運用を考えると、全サーバーにこの手順を行うのは
現実的ではないですね。
ひとつの経験としておき、実際の運用は
-----------------------------------------------
ldappasswd -x -D "(dn)" -W -S -A -h LDAPサーバー
-----------------------------------------------
でやったほうがよさそうだと実感しました!
でもユーザーにLDAPコマンドやサーバーを知られたくないので
h_kondoさんのaliasを使う方法も考えてみます。
それはそれで・・・難関があるのですが・・