FreeBSD7.2+OpenLDAPを利用して、アカウントの一元管理していますが、

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で、いつでも変更可能にしています。

よろしくお願いします。

回答の条件
  • 1人3回まで
  • 登録:2010/02/09 18:10:43
  • 終了:2010/02/12 12:51:39

ベストアンサー

id:mystashes No.2

mystashes回答回数32ベストアンサー獲得回数112010/02/10 20:48:50

ポイント27pt

先に書いておきながらなんですが、passwd の修正はあまりお勧めできません。

アカウントの所在によってpasswdとldapmodifyを使い分けるラッパーを用意されるのをお勧めします。

セキュリティアップデート等でpasswdに修正が入れば上書きされてしまう為です。

再度ldap対応の手間が発生するのはもちろんですが、間違えて古いソースを修正元にしてしまうと、デグレートさせる危険もあります。

ラッパーを書くのは初回の手間が多いですが、後々の運用まで考慮するとその方がトータル管理コストは下がるのではないでしょうか。

そうは言っても、システムのソースコードを読むのは非常に参考になります。

下記手順でソースコードのインストールが可能です。

sysinstallからconfigure->distribution->srcの下の方のubinというインストールすれば良いです。

# コメント欄を開けて頂ければそちらでフォローさせて頂きます。

id:sifty77

できました!

-------------------------------------------

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を使う方法も考えてみます。

それはそれで・・・難関があるのですが・・

2010/02/12 12:29:44

その他の回答(2件)

id:mystashes No.1

mystashes回答回数32ベストアンサー獲得回数112010/02/09 23:18:43

ポイント27pt

非常に残念なお知らせです。

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...

# 先日は☆有難う御座いました。

id:sifty77

ありがとうございます!

やはりそうですが・・

うすうす感づいてはいたのですが、

なにせ初心者なもんで、自分を信じ切れてませんでした

そちらのURL一度たどり着いたのですが・・

/usr/src/usr.bin/passwd/passwd.c

が存在しないので、やってませんでした。

できれば修正してでもやりたいのですが、

FreeBSD7,2のpasswd.cにあたるものはどこにあるのでしょうか?

よろしくお願いします。

2010/02/10 17:43:50
id:mystashes No.2

mystashes回答回数32ベストアンサー獲得回数112010/02/10 20:48:50ここでベストアンサー

ポイント27pt

先に書いておきながらなんですが、passwd の修正はあまりお勧めできません。

アカウントの所在によってpasswdとldapmodifyを使い分けるラッパーを用意されるのをお勧めします。

セキュリティアップデート等でpasswdに修正が入れば上書きされてしまう為です。

再度ldap対応の手間が発生するのはもちろんですが、間違えて古いソースを修正元にしてしまうと、デグレートさせる危険もあります。

ラッパーを書くのは初回の手間が多いですが、後々の運用まで考慮するとその方がトータル管理コストは下がるのではないでしょうか。

そうは言っても、システムのソースコードを読むのは非常に参考になります。

下記手順でソースコードのインストールが可能です。

sysinstallからconfigure->distribution->srcの下の方のubinというインストールすれば良いです。

# コメント欄を開けて頂ければそちらでフォローさせて頂きます。

id:sifty77

できました!

-------------------------------------------

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を使う方法も考えてみます。

それはそれで・・・難関があるのですが・・

2010/02/12 12:29:44
id:h_kondo No.3

h_kondo回答回数33ベストアンサー獲得回数32010/02/11 05:59:03

ポイント26pt

手軽に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

id:sifty77

cvsweb知りませんでした!参考にします!

この方法は手軽でいいですね!

>alias passwd ldappasswd.sh

この方法すごく魅力的なんですが、

ローカルユーザーのホームディレクトリをLDAPユーザが共有してるので

ローカルユーザーのパスワード変更時に困ってしまいます。

ちなみに.cshrcは複数ユーザーが共有してる場合

そのホームディレクトリを使う全ユーザーに影響するんでしょうか

2010/02/12 12:50:30

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません