«前の日記(2008-12-24) 最新 次の日記(2009-04-10)» 編集

meta's blog - The Power To Serve

筆者について

FreeBSDを通じてOSSにささかな貢献を。

OSS活動をご支援いただける方を募集しています


2009-02-26 LDAPによる認証統合

FreeBSD 7.1-RELEASE で LDAPユーザ認証時に passwd でパスワードを変更する方法

nss_ldap や pam_ldap を導入し、LDAP 上の POSIX アカウントでログインできるように設定済の環境が前提です。

その辺りの設定は以下のページを参考に。

passwd コマンドが PAM 経由で LDAP を参照するように設定。

$ grep -v -e ^$ -e ^# /etc/pam.d/passwd
password        sufficient      /usr/local/lib/pam_ldap.so              no_warn try_first_pass
password        required        pam_unix.so             no_warn try_first_pass

RHEL 系 Linux では、authconfig と pam の設定を済ませていれば、passwd コマンドでユーザが自らのパスワードを変更できますが、FreeBSD の場合は passwd コマンドのソースコードを改変する必要があります。

--- passwd.c    2008-11-25 11:59:29.000000000 +0900
+++ passwd_pam_ldap.c   2009-02-26 19:18:51.000000000 +0900
@@ -121,8 +121,8 @@
                break;
        default:
                /* XXX: Green men ought to be supported via PAM. */
-               errx(1,
-         "Sorry, `passwd' can only change passwords for local or NIS users.");
+               fprintf(stderr, "Changing LDAP password for %s\n",
+                   pwd->pw_name);
        }

#define pam_check(func) do { \

上のパッチを /tmp/passwd_pam_ldap.patch という名前で適当に保存し、パッチを当てます。

# cd /usr/src/usr.bin/passwd
# patch -p0 < /tmp/passwd_pam_ldap.patch

また、せっかくパッチを当てたファイルが csup 等で書き換えられないように、.cvsignore ファイルを書いておきます。

# echo "*" > /usr/src/usr.bin/passwd/.cvsignore

パッチを当てたら、

# make && make install

でインストール。

最後に、LDAP 上の POSIX アカウントでログインして、自分のパスワードを変更できる事を確かめます。

$ passwd
Changing LDAP password for meta
Enter login(LDAP) password:
New password:
Re-enter new password:
LDAP password information changed for meta

以上で passwd コマンドで LDAP 上のアカウントのパスワードを変更出来るようになりましたが、 root 権限でも passwd コマンドでは自分以外のパスワードを変更する事はできないので注意が必要です。

管理者がユーザのパスワードを再設定するには ldappasswd を使います。