Como autenticar usuários em grupos aninhados no Apache LDAP?


21

Estou trabalhando com autenticação LDAP com a seguinte configuração

 AuthName            "whatever"
 AuthType            Basic
 AuthBasicProvider   ldap
 AuthLDAPUrl         "ldap://server/OU=SBSUsers,OU=Users,OU=MyBusiness,DC=company,DC=local?sAMAccountName?sub?(objectClass=*)"
 Require ldap-group  CN=MySpecificGroup,OU=Security Groups,OU=MyBusiness,DC=company,DC=local

Isso funciona, no entanto, tenho que colocar todos os usuários nos quais quero me autenticar MySpecificGroup. Mas no servidor LDAP eu configurei que MySpecificGrouptambém contém o grupo MyOtherGroupcom outra lista de usuários.

Mas esses usuários MyOtherGroupnão são autenticados, tenho que adicioná-los manualmente MySpecificGroupe basicamente não podemos usar o agrupamento aninhado. Estou usando o Windows SBS 2003.

Existe uma maneira de configurar o Apache LDAP para fazer isso? Ou existe um problema com possível recursão infinita e, portanto, não é permitido?

Respostas:


19

Você precisa definir AuthLDAPSubGroupDepthpara fazer isso funcionar. O número inteiro que você fornece aqui especifica a profundidade máxima de aninhamento de subgrupos que será avaliada antes que a pesquisa do usuário seja descontinuada.

Adicione isto à sua configuração:

AuthLDAPSubGroupDepth 1

Mais informações: aqui e aqui .


Estou executando o Apache 2.2, é mod_authnz_ldap não tem AuthLDAPSubGroupDepth directiva: httpd.apache.org/docs/2.2/mod/mod_authnz_ldap.html
— Selivanov Pavel

Então, por que não atualizar?
— Bart De Vos

2
Estou executando o Debian Squeeze e prefiro usar pacotes de distribuição estável: atualizações de segurança regulares e bem testadas. O Apache 2.3 ainda é beta, aparecerá em backports estáveis ​​ou estáveis ​​em breve. Eu resolvi esse problema usando AuthnProviderAliaspor enquanto. Se ninguém irá oferecer solução para Apache 2.2, generosidade é sua :)
— Selivanov Pavel

dadas as novas informações dos grupos em servidores diferentes, acho que esse método ainda não funcionará.
— Jeff Strunk

3
AuthLDAPSubGroupDepth não existe no Apache HTTPd 2.4. AuthLDAPMaxSubGroupDepth é a diretiva correta a ser usada.
— 21415 Chris Chris

33

Além disso AuthLDAPSubGroupDepth, disponível apenas no apache 2.4, é possível, ao usar o Microsoft AD LDAP, autorizar usando grupos aninhados usando a regra de correspondência LDAP_MATCHING_RULE_IN_CHAIN. Isso é muito mais rápido do que pesquisar subgrupos no cliente, porque isso é feito no servidor DC com menos consultas na rede.

Require ldap-filter memberof:1.2.840.113556.1.4.1941:=CN=Access to Apache,OU=My Organization Unit,DC=company,DC=com

A sequência 1.2.840.113556.1.4.1941é um OID chamado LDAP_MATCHING_RULE_IN_CHAIN. Esse OID é atribuído pela Microsoft para ser usado com sua implementação LDAP (parte do Active Directory). Você não pode usá-lo com outros servidores LDAP. O formato redeable humano é:iso(1).member_body(2).us(840).microsoft(113556).ad(1).as_schema(4).LDAP_MATCHING_RULE_IN_CHAIN(1941)

Da documentação da Microsoft:

Esta regra é limitada aos filtros que se aplicam ao DN. Este é um operador de correspondência especial "estendido" que percorre a cadeia de ascendência em objetos até a raiz até encontrar uma correspondência.

Veja também:


Eu votaria neste 10x se pudesse. Para as pessoas que executam o RHEL 5, esta é uma ótima solução. Compilar a fonte do fornecedor para obter os recursos mais recentes nem sempre é uma solução desejável!
— Aaron Copley

Fico feliz que tenha ajudado. Eu acho que esse foi o primeiro uso documentado do LDAP_MATCHING_RULE_IN_CHAIN ​​no apache.
— Mircea Vutcovici

Existe uma maneira de usar LDAP_MATCHING_RULE_IN_CHAINpara recuperar a associação do grupo recursivo e passá-lo como um cabeçalho para um servidor back-end (usando o Apache como um proxy reverso)?
— Gershon Papi

mod_authnz_ldapnão fornece isso. No entanto, você pode usar o LDAP_MATCHING_RULE_IN_CHAINfiltro LDAP no seu aplicativo. Veja: stackoverflow.com/a/34075052/290087
— Mircea Vutcovici

6

Parece que sua única opção no Apache 2.2 é listar todos os grupos incluídos pelo seu grupo autorizado principal.

Require ldap-group  CN=MySpecificGroup,OU=Security Groups,OU=MyBusiness,DC=company,DC=local
Require ldap-group  CN=MyOtherGroup,OU=Security Groups,OU=MyBusiness,DC=company,DC=local

Isso deve ser razoável se seus grupos aninhados não forem muito complicados.


Cruzando domínios do AD (usando dois servidores LDAP)

Você pode configurar o OpenLDAP com a sobreposição slapd_meta em execução no servidor da Web para proxy sua autenticação.

O arquivo /etc/ldap/slapd.conf deve se parecer com:

database meta
suffix   "DC=company,DC=local"
uri      "ldap://a.foo.com/OU=MyBusiness,DC=company,DC=local"
uri      "ldap://b.foo.com/OU=otherdomainsuffix,DC=company,DC=local"

Então, sua sub-rotina mod_authnz_ldap seria algo como:

AuthName            "whatever"
AuthType            Basic
AuthBasicProvider   ldap
AuthLDAPUrl         "ldapi:///DC=company,DC=local?sAMAccountName?sub?(objectClass=*)"
Require ldap-group  CN=MySpecificGroup,OU=Security Groups,OU=MyBusiness,DC=company,DC=local
Require ldap-group  CN=MyOtherGroup,OU=Security Groups,OU=otherdomainsuffix,DC=company,DC=local

Isso exigirá alguma massagem para que funcione, mas acho que essa é a ideia geral.


1
Infelizmente, isso não funciona quando os grupos estão em domínios diferentes do AD (Domain1_DomainLocal_Group inclui Domain2_Global_Group). Foi a primeira coisa que eu tentei :)
— Selivanov Pavel

Isso significa que um dos grupos está em um servidor diferente? Se isso for verdade, suspeito que AuthLDAPSubGroupDepth também não funcionará para você.
— Jeff Strunk

Sim, dois servidores, dois domínios. Pensei em integrar a caixa do Linux no AD e usar a autenticação do PAM, mas o mod-auth-pam não é suportado desde o apache 2.0, o mod-authnz-external + pwauth não suporta grupos. Isso tudo é infelizmente :(
— Selivanov Pavel

1
Não notei que você atualizou a resposta. Usar o OpenLDAP slapd_meta pode ser a solução, mas acaba com o ponto principal dessa configuração: obtenha direitos de usuário gerenciados em um único ponto (Active Directory) adicionando / excluindo usuários de grupos e incluindo grupos um no outro. Aqui está a minha solução analógica com o AuthnProviderAlias ​​sem serviço OpenLDAP adicional: <AuthnProviderAlias ​​ldap first-ldap> AuthLDAPURL ... </AuthnProviderAlias> <AuthnProviderAlias ​​ldap second-ldap> AuthLDAPURL ... </AuthnProviderAlias> ... AuthBasicProvider primeiro -ldap
— Selivanov Pavel

1
Decidi dar uma recompensa a Bart De Vos: essa não é minha pergunta; para pergunta original (sem a minha própria específica) a solução é simples e vai trabalhar
— Selivanov Pavel

4

Embora a solução fornecida por @Mircea_Vutcovici tenha funcionado para mim, minha única crítica é que as pessoas podem ficar melindrosas quando vêem operadores bit a bit em uso.

Por exemplo, entregarei uma instalação do Apache Bloodhound, que usa o Apache HTTPd como front-end com autenticação de grupo do AD, a um grupo de colegas desenvolvedores. Eles terão problemas em lidar com os operadores bit a bit. Administradores não serão tão delicados, é claro ... espero.

Dito isto, tenho uma solução que não usa o operador bit a bit e que não usa várias definições de grupo LDAP.

A seguinte configuração funciona para mim:

<Location /protected>
    # Using this to bind
    AuthLDAPURL "ldap://<MY_SERVER>:3268/<MY_SEARCH_BASE>?sAMAccountName?sub?(objectClass=user)"
    AuthLDAPBindDN "<MY_BIND_DN>"
    AuthLDAPBindPassword "<MY_PASSWORD>"
    LDAPReferrals Off

    AuthType Basic
    AuthName "USE YOUR AD ACCOUNT"
    AuthBasicProvider ldap
    Require ldap-group <MY_PARENT_GROUP>
    AuthLDAPMaxSubGroupDepth 1
    AuthLDAPSubgroupAttribute member
    AuthLDAPSubGroupClass group
    AuthLDAPGroupAttribute member
    AuthLDAPGroupAttributeIsDN on
</Location>

A parte crítica foi a seguinte configuração:

AuthLDAPSubGroupClass group

AuthLDAPMaxSubGroupDepth não funciona por si só, nem quando associado a AuthLDAPSubgroupAttribute. Foi somente quando eu usei AuthLDAPSubGroupClass que a autenticação em subgrupos começou a funcionar ... pelo menos para mim e minha situação.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.