- PR -

apacheのbasic認証をLDAPで実現

投稿者投稿内容
miura
会議室デビュー日: 2004/12/27
投稿数: 19
投稿日時: 2005-01-07 18:33
初めまして。Webサーバを構築中です。basic認証の際に事前に登録した人にだけidとpwを送り、許可するという事を
行いたいと思っています。それらを格納するのをLDAPでと考えております。登録人数は2000人近くいます。
モジュールはwww.muquit.comのmod_auth_ldap(apache2.Xに対応)をDLしました。apacheは2.0.52です。LDAPはopenldap2.1.14です。

httpd.confは以下です。
<IfModule mod_auth_ldap.c>
<Directory "/usr/local/apache2/htdocs">

Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all

AuthType Basic
LDAP_Server aaa.co.jp
LDAP_Port 389
Base_DN "dc=aaa,dc=co,dc=jp"
UID_Attr uid
Require valid-user
AuthName "alright?"

</Directory>
</Ifmodule>

ブラウザで見にいくと、ウィンドウが出ましてidとpwを入力するんですが、一向にウィンドウが消えません。何がいけないのか,煮詰まっています。私と同じようなことをやっている人で、ldifのobjictclassは何を使っているか等を教えていただきたいです。また、実際に上手くいってる人のアドバイスなど何でもいいので教えて頂けたらと思います。よろしくお願い致します。
れぇは
会議室デビュー日: 2003/03/12
投稿数: 13
投稿日時: 2005-01-08 23:49
私も今一LDAPは理解していませんので間違ってるかもしれませんが
>Base_DN "dc=aaa,dc=co,dc=jp"
これが違うような気がします
どのようにデータが格納されているかは分かりませんがこの場合
Base_DN "ou=People,dc=aaa,dc=co,dc=jp"
などの記述になるかと思います

mod_auth_ldapではありませんが先日mod_authz_ldapで試した時の設定などです
参考までにどうぞ
LoadModule authz_ldap_module modules/mod_authz_ldap.so
<IfModule mod_authz_ldap.c>
<Location /test>
AuthzLDAPEngine on
AuthzLDAPServer localhost
AuthzLDAPUserBase ou=Users,dc=k3nw,dc=com
AuthzLDAPUserKey uid
AuthzLDAPUserScope base
AuthType basic
AuthName "test"
require valid-user
</Location>
</IfModule>
LDIFは以下のような感じです
dn: dc=k3nw,dc=com
objectClass: dcObject
objectClass: orgnization
dc: k3nw

dn: ou=Users,dc=k3nw,dc=com
objectClass: organizationalUnit
ou: Users

dn: uid=ley,ou=Users,dc=k3nw,dc=com
uid: ley
cn: ley
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {crypt}xxxxx
shadowLastChange: 12686
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 500
gidNumber: 500
homeDirectory: /home/ley

※)Usersはmigrate_passwd.plを使用し作成


[ メッセージ編集済み 編集者: れぇは 編集日時 2005-01-08 23:52 ]
ぽんす
ぬし
会議室デビュー日: 2003/05/21
投稿数: 1023
投稿日時: 2005-01-10 19:34
やったことはないですが...

とりあえず、apache のログと、OpenLDAP のデバッグログ(257あたりで取る)を
読んで、どうなってるのかみてみるのがよいと思うです。

objectClass については、LDAPでパスワードの認証をする場合の一般論として
いうと、特に何か決まったものを指定する必要はありません。
ふつうは、ユーザIDとして利用する attribute と、パスワードを入れている
attribute を持つことができる objectClass であればなんでも構いません。
自分でスキーマを定義してもよいのですがそれは少し面倒なので、
account とか posixAccount とかの、出来合いのものを利用するのが
楽だと思います。
miura
会議室デビュー日: 2004/12/27
投稿数: 19
投稿日時: 2005-01-11 18:14
れぇはさん、ぽんすさん、回答ありがとうございました。

>Base_DN "ou=People,dc=aaa,dc=co,dc=jp"
などの記述になるかと思います

修正してやってみましたが変わりませんでした。
LDIFは私もmigrateツールを使って変換しましたので同じです。

apacheのログはチェックしてます。OpenLDAP のデバッグログについてですが、slapd.confにloglevelディレクティブで設定しましたが、どこにそのファイルが置いてあるのでしょうか?
調べたんですが、見つけられませんでした。

ひとつ気になるんですが、httpd.confのディレクティブでLoadModuleとAddModeleを書かないとそのモジュールが有効にならないとオライリーの本に書いてあったんですけど、私はapache2を使ってますので調べたところ、AddModuleは載ってません。apache2ではそれの代替ディレクティブはあるのでしょうか?ご存知の方いましたら、よろしくお願いします。
anights
ぬし
会議室デビュー日: 2003/05/22
投稿数: 277
お住まい・勤務地: 東京
投稿日時: 2005-01-11 19:29
引用:

miuraさんの書き込み (2005-01-11 18:14) より:
apacheのログはチェックしてます。OpenLDAP のデバッグログについてですが、slapd.confにloglevelディレクティブで設定しましたが、どこにそのファイルが置いてあるのでしょうか?
調べたんですが、見つけられませんでした。



なにも設定していなければLOCAL4のファシリティで出力されるので
syslog.confとかで設定してあげれば出力出来ます。
slapdの起動オプションでファシリティは変更可です。

もしくは、slapdを-dオプション付きで起動して
ログをずらずら眺めるのもありですが。

詳細は man slapd で分かると思います。
miura
会議室デビュー日: 2004/12/27
投稿数: 19
投稿日時: 2005-01-12 12:00
>もしくは、slapdを-dオプション付きで起動して
ログをずらずら眺めるのもありですが。

[root@ns root]# /usr/local/libexec/slapd -d 257
@(#) $OpenLDAP: slapd 2.1.14 (2004年 12月 1日 水曜日 14:29:00 JST) $
root@aaa.co.jp:/usr/local/openldap-2.1.14/servers/slapd
daemon_init: listen on ldap:///
daemon_init: 1 listeners to open...
ldap_url_parse_ext(ldap:///)
daemon: socket() failed errno=97 (Address family not supported by protocol)
daemon: bind(6) failed errno=98 (Address already in use)
slap_open_listener: failed on ldap:///
slapd stopped.
connections_destroy: nothing to destroy.
You have new mail in /var/spool/mail/root
というエラーが出ます。

>なにも設定していなければLOCAL4のファシリティで出力されるので
syslog.confとかで設定してあげれば出力出来ます。

/etc/syslog.confで以下の行を追加したんですが,これでいいのでしょうか?

local4.info              /var/log/ldap.log(このファイルは新たに作りました)

何かアドバイス等、よろしくお願い致します。
anights
ぬし
会議室デビュー日: 2003/05/22
投稿数: 277
お住まい・勤務地: 東京
投稿日時: 2005-01-12 14:37
引用:

miuraさんの書き込み (2005-01-12 12:00) より:
daemon: socket() failed errno=97 (Address family not supported by protocol)
daemon: bind(6) failed errno=98 (Address already in use)



errno=97は、ipv6使っていないのなら-4オプションかな。

errno=98は、すでに起動しているのにさらに起動させたのでは?

で、たとえ-dオプションで起動してもslapd.confにloglevel 0としなければ
ファシリティlocal4でsyslogへも出力します。

>これでいいのでしょうか?
ってログ出力されていないんですかね?

man slapd 見るとpriorityのデフォルトはdebugぽいから
infoじゃ出ないかもね。
というか、local4.* /var/log/ldap.log じゃだめなんですかね?

そういえば、local0〜local7あたりがあるOSですよね?
無いなら何がデフォルトになるか私は知りませんので。
miura
会議室デビュー日: 2004/12/27
投稿数: 19
投稿日時: 2005-01-12 15:22


[ メッセージ編集済み 編集者: miura 編集日時 2005-01-13 10:13 ]

スキルアップ/キャリアアップ(JOB@IT)