webリソースにアクセスするために、1つのLDAPグループのすべてのユーザー(WindowsのApacheDS 2.0.0-20、グループの複数のuniqueMember属性とhttpd configの "Require ldap-group"ステートメントを使用)を認証および承認したいと思います。
認証を試みるユーザーもこのLDAPグループの一部であり、httpd設定で「Require ldap-group」の代わりに「Require valid-user」ステートメントを使用した場合に承認されます。
セットアップ:
ApacheDS LDAPのグループ構成:
Httpdの設定の抜粋:
<AuthnProviderAlias ldap ldapconfig>
LDAPReferrals Off
AuthLDAPBindDN "cn=query,ou=users,o=WJWext"
AuthLDAPBindPassword secretpassword
AuthLDAPURL "ldap://ldap.hostname:10389/o=WJWext?uid?sub"
</AuthnProviderAlias>
...
LogLevel trace7
<Location /xy>
...
AuthType Basic
AuthName "xy"
AuthBasicProvider ldapconfig
AuthLDAPGroupAttributeIsDN on
AuthLDAPGroupAttribute uniqueMember
AuthLDAPMaxSubGroupDepth 0
AuthLDAPSubGroupClass groupOfUniqueNames
Require ldap-group cn=groupname,ou=groups,o=WJWext
...
</Location>
Httpdのログファイルは、ユーザーは認証できるが、グループによって承認されていないことを示しています。
[Tue Nov 08 21:44:23.601378 2016] [authz_core:debug] [pid 15148] mod_authz_core.c(809): [client a.b.c.d:59427] AH01626: authorization result of Require ldap-group cn=groupname,ou=groups,o=WJWext)
[Tue Nov 08 21:44:23.601415 2016] [authz_core:debug] [pid 15148] mod_authz_core.c(809): [client a.b.c.d:59427] AH01626: authorization result of <RequireAny>: denied (no authenticated user yet)
[Tue Nov 08 21:44:23.601547 2016] [authnz_ldap:debug] [pid 15148] mod_authnz_ldap.c(516): [client a.b.c.d:59427] AH01691: auth_ldap authenticate: using URL ldap://ldap.hostname:10389/o=WJWext?uid?sub
[Tue Nov 08 21:44:23.601590 2016] [authnz_ldap:trace1] [pid 15148] mod_authnz_ldap.c(537): [client a.b.c.d:59427] auth_ldap authenticate: final authn filter is (&(objectclass=*)(uid=hudson))
[Tue Nov 08 21:44:23.615090 2016] [ldap:trace5] [pid 15148] util_ldap.c(1843): [client a.b.c.d:59427] LDC 55e4b4a94070 used for authn, must be rebound
[Tue Nov 08 21:44:23.615236 2016] [authnz_ldap:debug] [pid 15148] mod_authnz_ldap.c(613): [client a.b.c.d:59427] AH01697: auth_ldap authenticate: accepting hudson
[Tue Nov 08 21:44:23.615410 2016] [authz_core:debug] [pid 15148] mod_authz_core.c(809): [client a.b.c.d:59427] AH01626: authorization result of Require ldap-group cn=groupname,ou=groups,o=WJWext:denied
少し意外なこと:ログファイルとネットワークトラフィックのトレースを見ると、ユーザーのグループメンバーシップを収集するための検索要求がないようです。
私たちが間違っていることについて何か考えはありますか?
賞金のコメント/リクエストへの回答として、AD認証を使用し、グループメンバーシップを必要とする最小のApache設定を次に示します。これは、mod_authnz_ldapを使用しているRHEL 7.xでテストされています。
<Directory "/some/path/">
AuthType Basic
AuthName "Top Secret"
AuthBasicProvider ldap
AuthLDAPURL "ldaps://example.com/dc=EXAMPLE,dc=COM?sAMAccountname"
AuthLDAPBindDN "CN=Apache,OU=Accounts,DC=example,DC=com"
AuthLDAPBindPassword "password"
AuthLDAPMaxSubGroupDepth 0
AuthLDAPSubGroupAttribute member
AuthLDAPSubGroupClass group
Require ldap-group CN=example,OU=Groups,DC=example,DC=com
</Directory>
AuthLDAPMaxSubGroupDepth
を調整すると、メンバーシップがネストされたグループを使用できますが、0に設定すると、ユーザーは必要なグループの直接のメンバーになる必要があります。
OPが投稿したログに加えて、失敗の代わりにこれが表示されます。
AH01697: auth_ldap authenticate: accepting user
AH01713: auth_ldap authorize: require group: testing for group membership in "CN=example,OU=Groups,DC=example,DC=com"
AH01714: auth_ldap authorize: require group: testing for member: CN=User Name,OU=Accounts,DC=example,DC=com (CN=example,OU=Groups,DC=example,DC=com)
AH01715: auth_ldap authorize: require group: authorization successful (attribute member) [Comparison true (cached)][6 - Compare True]
AH01626: authorization result of Require ldap-group CN=example,OU=Groups,DC=example,DC=com: granted
AH01626: authorization result of <RequireAny>: granted
編集:プロバイダーエイリアス構文を使用して問題を再現できました。OPに<AuthzProviderAlias ...>
ブロックがないと思います。サンプル構成を次のように変更しました。
<AuthnProviderAlias ldap myldap>
AuthLDAPURL "ldaps://example.com/dc=EXAMPLE,dc=COM?sAMAccountname"
AuthLDAPBindDN "CN=Apache,OU=Accounts,DC=example,DC=com"
AuthLDAPBindPassword "password"
</AuthnProviderAlias>
<AuthzProviderAlias ldap-group ldap-group-alias "CN=example,OU=Groups,DC=example,DC=com">
AuthLDAPURL "ldaps://example.com/dc=EXAMPLE,dc=COM"
AuthLDAPBindDN "CN=Apache,OU=Accounts,DC=example,DC=com"
AuthLDAPBindPassword "password"
AuthLDAPMaxSubGroupDepth 0
AuthLDAPSubGroupAttribute member
AuthLDAPSubGroupClass group
</AuthzProviderAlias>
<Directory "/some/path/">
AuthType Basic
AuthName "Top Secret"
AuthBasicProvider myldap
Require ldap-group-alias
</Directory>
これも機能しますが、URLをバインドし、DNとパスワードをバインドすることになります。