人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

よろしくお願いします。


●質問者: masa
●カテゴリ:コンピュータ インターネット
✍キーワード:chAngE FreeBSD LDAP NIS OpenLDAP
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● mystashes
●27ポイント

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

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にあたるものはどこにあるのでしょうか?

よろしくお願いします。


2 ● mystashes
●27ポイント ベストアンサー

先に書いておきながらなんですが、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を使う方法も考えてみます。

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


3 ● h_kondo
●26ポイント

手軽に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は複数ユーザーが共有してる場合

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ