Autenticação do usuário do Apache com base em membros do grupo LDAP que não estão funcionando

3

Gostaria de autenticar e autorizar todos os usuários de um grupo LDAP (ApacheDS 2.0.0-20 no Windows, usando vários atributos uniqueMember no grupo e a instrução "Exigir ldap-group" em httpd config) para acesso a um grupo. recurso da web.

O usuário que tenta autenticar também faz parte desse grupo LDAP e está autorizado se eu usar a instrução "Exigir usuário válido" em vez de "Requerer o grupo ldap" na configuração httpd.

Configuração:

  • Apache 2.4.23 baseado em Linux (do Repositório de Apache do OpenSuse 42.1)
  • LDAP: ApacheDS 2.0.0-20 baseado em MS Windows

Configuração de grupo no ApacheDS LDAP:

Trechodaconfiguraçãodohttpd:

<AuthnProviderAliasldapldapconfig>LDAPReferralsOffAuthLDAPBindDN"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>

O arquivo de log do httpd mostra que o usuário pode ser autenticado, mas não autorizado pelo grupo:

[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

O que é um pouco surpreendente: nos arquivos de log e em um rastreamento de tráfego de rede, parece que não há solicitação de pesquisa para reunir os membros do grupo do usuário.

Existe alguma ideia do que estamos fazendo de errado?

    
por R. Wambacher 09.11.2016 / 07:32

1 resposta

2

Em resposta ao comentário / solicitação de recompensa, aqui está a configuração mínima do Apache que usa autenticação do AD e requer associação ao grupo, testada no RHEL 7.x que está usando mod_authnz_ldap:

<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>

Ajustar o AuthLDAPMaxSubGroupDepth me permite usar grupos que possuem associação aninhada, mas quando definido como 0 requer que meu usuário seja um membro imediato do grupo necessário.

Além dos registros que o OP postou, vejo isso em vez da falha:

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

Edit: Eu consegui reproduzir o problema usando a sintaxe de alias do provedor, acredito que o OP está faltando um bloco <AuthzProviderAlias ...> . Eu rejogged meu exemplo de configuração para ficar assim:

<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>

Isso também funciona, mas você acaba duplicando o URL, vincular DN & senha.

    
por 01.11.2017 / 18:23