Apache SSO através do Kerberos usando a conta de máquina

2

Estou tentando fazer com que o Apache no Ubuntu 12.04 autentique usuários via Kerberos SSO em um servidor do Windows 2008 Active Directory. Aqui estão algumas coisas que tornam minha situação diferente:

  1. Eu não tenho acesso administrativo ao Windows Server (nem jamais terei acesso). Eu também não posso ter nenhuma alteração no servidor feita em meu nome.

  2. Entrei no servidor Ubuntu no Active Directory usando o PBIS aberto.

  3. Os usuários podem fazer login no servidor Ubuntu usando suas credenciais do AD. O kinit também funciona bem para cada usuário.

  4. Como não posso alterar o AD (exceto para adicionar novas máquinas e SPNs), não posso adicionar uma conta de serviço para o Apache no Ubuntu.

  5. Como não posso adicionar uma conta de serviço, preciso usar o keytab da máquina (/etc/krb5.keytab) ou pelo menos usar a senha da máquina em outro keytab. No momento, estou usando o keytab da máquina e dando acesso somente leitura ao Apache (idéia ruim, eu sei).

  6. Eu já adicionei o SPN usando anúncios líquidos keytab add HTTP -U

  7. Como estou usando o Ubuntu 12.04, os únicos tipos de codificação adicionados durante o "net ads keytab add" são arcfour-hmac, des-cbc-crc e des-cbc-md5. O PBIS adiciona os tipos de codificação AES aos principais host e cifs quando se associa ao domínio, mas ainda não recebi "net keyt key addab" para fazer isso.

  8. O ktpass e o setspn estão fora de questão devido ao nº 1 acima.

  9. Eu configurei (para o Kerberos SSO) e testei o IE 8 Firefox.

  10. Estou usando a seguinte configuração na configuração do meu site do Apache:

    <Location /secured>
    AuthType Kerberos
    AuthName "Kerberos Login"
    KrbMethodNegotiate On
    KrbMethodK5Passwd On
    KrbAuthRealms DOMAIN.COM
    Krb5KeyTab /etc/krb5.keytab
    KrbLocalUserMapping On
    require valid-user
    </Location>
    

Quando o Firefox tenta se conectar, obtenha o seguinte no error.log (LogLevel debug) do Apache:

[Wed Oct 23 13:48:31 2013] [debug] src/mod_auth_kerb.c(1628): [client 192.168.0.2] kerb_authenticate_user entered with user (NULL) and auth_type Kerberos
[Wed Oct 23 13:48:31 2013] [debug] mod_deflate.c(615): [client 192.168.0.2] Zlib: Compressed 477 to 322 : URL /secured
[Wed Oct 23 13:48:37 2013] [debug] src/mod_auth_kerb.c(1628): [client 192.168.0.2] kerb_authenticate_user entered with user (NULL) and auth_type Kerberos
[Wed Oct 23 13:48:37 2013] [debug] src/mod_auth_kerb.c(994): [client 192.168.0.2] Using HTTP/[email protected] as server principal for password verification
[Wed Oct 23 13:48:37 2013] [debug] src/mod_auth_kerb.c(698): [client 192.168.0.2] Trying to get TGT for user [email protected]
[Wed Oct 23 13:48:37 2013] [debug] src/mod_auth_kerb.c(609): [client 192.168.0.2] Trying to verify authenticity of KDC using principal HTTP/[email protected]
[Wed Oct 23 13:48:37 2013] [debug] src/mod_auth_kerb.c(652): [client 192.168.0.2] krb5_rd_req() failed when verifying KDC
[Wed Oct 23 13:48:37 2013] [error] [client 192.168.0.2] failed to verify krb5 credentials: Decrypt integrity check failed
[Wed Oct 23 13:48:37 2013] [debug] src/mod_auth_kerb.c(1073): [client 192.168.0.2] kerb_authenticate_user_krb5pwd ret=401 user=(NULL) authtype=(NULL)
[Wed Oct 23 13:48:37 2013] [debug] mod_deflate.c(615): [client 192.168.0.2] Zlib: Compressed 477 to 322 : URL /secured

Quando o IE 8 tenta se conectar eu recebo:

[Wed Oct 23 14:03:30 2013] [debug] src/mod_auth_kerb.c(1628): [client 192.168.0.2] kerb_authenticate_user entered with user (NULL) and auth_type Kerberos
[Wed Oct 23 14:03:30 2013] [debug] mod_deflate.c(615): [client 192.168.0.2] Zlib: Compressed 477 to 322 : URL /secured
[Wed Oct 23 14:03:30 2013] [debug] src/mod_auth_kerb.c(1628): [client 192.168.0.2] kerb_authenticate_user entered with user (NULL) and auth_type Kerberos
[Wed Oct 23 14:03:30 2013] [debug] src/mod_auth_kerb.c(1240): [client 192.168.0.2] Acquiring creds for HTTP@apache_server
[Wed Oct 23 14:03:30 2013] [debug] src/mod_auth_kerb.c(1385): [client 192.168.0.2] Verifying client data using KRB5 GSS-API
[Wed Oct 23 14:03:30 2013] [debug] src/mod_auth_kerb.c(1401): [client 192.168.0.2] Client didn't delegate us their credential
[Wed Oct 23 14:03:30 2013] [debug] src/mod_auth_kerb.c(1420): [client 192.168.0.2] GSS-API token of length 9 bytes will be sent back
[Wed Oct 23 14:03:30 2013] [debug] src/mod_auth_kerb.c(1101): [client 192.168.0.2] GSS-API major_status:000d0000, minor_status:000186a5
[Wed Oct 23 14:03:30 2013] [error] [client 192.168.0.2] gss_accept_sec_context() failed: Unspecified GSS failure.  Minor code may provide more information (, )
[Wed Oct 23 14:03:30 2013] [debug] mod_deflate.c(615): [client 192.168.0.2] Zlib: Compressed 477 to 322 : URL /secured

Deixe-me saber se você gostaria de arquivos de log e configuração adicionais - a pergunta inicial é longa o suficiente.

    
por watkipet 23.10.2013 / 23:24

2 respostas

1

Eu não tenho experiência em configurar a delegação do kerberos no Apache, mas tenho certeza que o nome do serviço definido no apache precisa corresponder ao nome do serviço no arquivo keytab.

Defina o nome do serviço explicitamente assim:

<Location /secured>
AuthType Kerberos
AuthName "Kerberos Login"
KrbMethodNegotiate On
KrbMethodK5Passwd On
KrbAuthRealms DOMAIN.COM
Krb5KeyTab /etc/krb5.keytab
KrbLocalUserMapping On
KrbServiceName HTTP/apache_server.DOMAIN.com
require valid-user
</Location>

A conta de máquinas no AD precisará ter o HTTP/apache_server.DOMAIN.com SPN definido, mas parece que você já tem isso em vigor

    
por 26.10.2013 / 15:53
1

A resposta acima está certa, mas infelizmente você tem que usar o nome do serviço que está no keytab

    sudo ktutil list 

Os SPNs do AD, até onde eu os entendo, são aliases que, quando o cliente solicita HTTP / apache_server.com, na verdade, obtém o tíquete de serviço kerberos para host / apache_server.com.

O Kerberos no lado unix não sabe nada sobre esses aliases, então você tem que dizer explicitamente o que está no keytab.

Uma coisa que pode ajudar é obter a versão mais recente do mod_auth_kerb que suporta o uso da palavra-chave Any

KrbServiceName Any

Isso significa que o módulo irá procurar no keytab e usar todas as chaves que encontrar até que uma delas funcione.

    
por 01.11.2013 / 15:53