2006年06月02日

Samba+OpenLDAP環境でUserminによるパスワード変更

−2007/02/05:追記−
現時点での最新版に対応するよう記事を修正しました。
また新たなまとめ記事をこちらに記述しております。


長年の課題がやっとクリアできました!
とりあえずSamba+OpenLDAPの環境は整っているものとして話を進めます。

まずはperl用のSSLモジュールであるNet::SSLeayを導入します。

Net::SSLeay.pm
http://symlabs.com/Offerings/Net_SSLeay/

現在の最新版は1.21です。バージョンが変わってなければ以下のコマンドで導入できます。(事前にopenssl-develの導入が必要です)
cd /tmp
wget http://symlabs.com/Offerings/Net_SSLeay/Net_SSLeay.pm-1.21.tar.gz
tar zxvf Net_SSLeay.pm-1.21.tar.gz
cd Net_SSLeay.pm-1.21
perl Makefile.PL
make install

続いてUserminの認証機能に必要なAuthen::PAMを導入します。

Authen::PAM - a perl interface to the PAM library | Nikolay Pelov's Home Site
http://nik.pelov.name/Authen-PAM/

こちらの最新版は0.17です。バージョンが変わってなければ以下のコマンドで導入できます。(事前にpam-develの導入が必要です)
cd /tmp
wget http://nik.pelov.name/files/Authen/Authen-PAM-0.17.tar.gz
tar zxvf Authen-PAM-0.17.tar.gz
cd Authen-PAM-0.17
perl Makefile.PL
make
make install

これで前提ソフトウェアは揃いました。いよいよUserminを導入します。

Usermin
http://www.webmin.com/index6.html

最新版は1.250です。バージョンが変わってなければ以下のコマンドで導入できます。
cd /tmp
wget http://jaist.dl.sourceforge.net/sourceforge/webadmin/usermin-1.250.tar.gz
cd /usr/local/bin
tar zxvf /tmp/usermin-1.200.tar.gz
mv usermin-1.200 usermin
cd usermin
./setup.sh

導入シェルでいくつか設定を聞かれますが、基本的にはデフォルトのままでかまいません。SSLの使用可否を聞かれた時(Use SSL (y/n):)だけは使用する(y)を入力してください。

実は私自身はVPNの内部でUserminを稼働させているためSSLは使用していません(SSLを使う場合証明書うんうんの警告が出て不便ですし)。その場合はAuthen::PAMは導入しなくても良いようです。またログファイルの出力先も/var/userminから/var/log/userminに変更しています。

導入はこれで完了です。ブラウザに以下のURLを入力してUserminにアクセスできることを確認します。
https://導入したホスト名またはIP:20000/

アクセスできない場合はiptablesの設定を確認してください。

そしたら各種設定を行います。まずはUserminで使用する機能の選択。今回はパスワードの変更のみに使用するので/etc/usermin/webmin.aclの内容を以下の通り変更します。
user: changepass

また今回の用途ではrootのパスワード変更は行う必要がない(むしろ行えない方がセキュリティ上好ましい)ので、rootユーザがUserminを使えないよう、/etc/usermin/configに以下の記述を追加します。
denyusers=root

続いてユーザ認証の機構を通常のパスワードファイルからAuthen::PAMモジュールに変更します。/etc/usermin/changepass/configの内容を以下のとおり変更します。
変更前:passwd_cmd=file
      
変更後:passwd_cmd=

そうしたらUserminPAM設定をします。/etc/pam.d/userminを以下のとおり作成(もし既に存在していた場合は変更)します。
#%PAM-1.0
auth required /lib/security/pam_stack.so service=system-auth
account required /lib/security/pam_stack.so service=system-auth
password required /lib/security/pam_stack.so service=system-auth
session required /lib/security/pam_stack.so service=system-auth

基本的にはこれで完了なのですが、パスワード変更用のCGIモジュール(changepass.cgi)に一部不具合があるためこのままでは動きません。/usr/local/bin/usermin/changepass/changepass.cgiの内容を以下のとおり変更します。場所は関数"sub pam_change_func"の中(18行くらい下)です。
変更前:if ($msg =~ /old|current/i) {
      
変更後:if ($msg =~ /login/) {

この修正の内容は過去のバージョンと異なっています。過去バージョンの情報は多数見かけたのですが、現バージョンの情報にずっとたどり着けず宿題として残ってしまっていました…。

最後にUserminrunlevel3〜5の時に自動起動するよう、以下のコマンドを実行します。
cp -p /usr/local/bin/usermin/usermin-init /etc/rc.d/init.d/usermin
chown root:root /etc/rc.d/init.d/usermin
chkconfig --add usermin
chkconfig --level 345 usermin on

これで全ての準備が完了しました。userminを再起動します。
service usermin restart

先ほど稼働確認の時にもアクセスした、
https://導入したホスト名またはIP:20000/

にアクセスし、LDAP上のユーザでログインが出来ること、パスワードの変更が出来ることを確認してください。

参考にさせていただいたサイトは以下のとおりです。

@IT:LDAPによるパスワードの一元管理(1/3)
http://www.atmarkit.co.jp/flinux/rensai/root02/root02a.html

Usermin導入(Usermin) - Fedoraで自宅サーバー構築
http://fedorasrv.com/usermin.shtml

Windowsネットワーク用統合認証サーバー構築(OpenLDAP+Samba) - Fedoraで自宅サーバー構築
http://fedorasrv.com/openldap.shtml

日本Webminユーザ会 公式Webページ - フォーラム
http://jp.webmin.com/modules/newbb/viewtopic.php?viewmode=flat&topic_id=150&forum=1

有用な情報の数々に感謝いたします。
posted by 月水和尚 (とも) at 17:06 | Comment(2) | TrackBack(0) | Linux(UNIX)全般
この記事へのコメント
すばらしい情報でした!
非常に参考になりました。
Posted by ORA! at 2006年12月07日 22:46
お役に立てたようで何よりです。

現時点ではUserminのバージョンが1.240に上がっていました。
ただchangepass.cgi問題の箇所は修正されていません。
公式フォーラムでも話題になった話なのに修正されないのは
何故でしょうねぇ。謎です。
Posted by tomo at 2006年12月08日 11:42
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。