variável REMOTE_USER sem sufixo @DOMAIN

1

Eu administro um aplicativo que permite o logon único com usuários do AD válidos e é executado no IIS atualmente. Para aumentar o desempenho, tenho uma tarefa para migrar a camada da web para Apache / Php no Linux.

Eu tenho um anúncio no servidor Win2012 e Apache no CentOS. Eu entrei com sucesso no domínio (TEST.COM) e posso acessar o centos com as contas de usuário do Windows.

Eu também configurei o Kerberos e o Samba e o SSO funciona, com um problema.

Os usuários do AD são importados para o aplicativo sem o prefixo / sufixo do nome de domínio. Então, se meu usuário é TEST \ myUser no AD, no aplicativo o usuário é apenas myUser.

O aplicativo lê o nome de usuário da variável REMOTE_USER, mas o nome de usuário é anexado com a sequência @DOMAIN, resultando em nome de usuário completo sendo [email protected]. Naturalmente, o aplicativo acha que não é um usuário válido, pois espera que seja apenas myUSer. Se eu adicionar um novo usuário no aplicativo chamado [email protected], o SSO funcionará bem.

Existe uma maneira de descartar o atributo @DOMAIN na variável REMOTE_USER? Como você faria isso e quais arquivos precisam ser configurados?

    
por Nebojsa Zivkovic 10.02.2014 / 14:36

3 respostas

3

mod_auth_kerb é específico do Kerberos: ele implementa a autenticação do Kerberos via HTTP Negotiate. Na variável de ambiente REMOTE_USER, ele informa a identificação do Kerberos ("nome principal") do cliente autenticado. Os nomes principais do Kerberos são escritos foo / bar / baz /...@ REALM; os componentes principais são chamados de "instâncias" (um deles geralmente vê apenas um ou dois), e o "domínio" é um domínio de confiança dentro do sistema Kerberos, um mecanismo de federação integrado. No AD, o território do Kerberos é o mesmo que o nome do "domínio" do AD, em maiúsculas.

mod_auth_kerb (uma versão nova o suficiente) tem um recurso chamado KrbLocalUserMapping. Isso chama a função de biblioteca Kerberos krb5_aname_to_localname () para converter um nome principal em um "nome local"; isto é, algo significativo no host local. O que essa função faz depende da implementação do Kerberos. No MIT Kerberos, você pode personalizar o mapeamento com as regras "auth_to_local" em krb5.conf. A regra padrão traduz apenas foo @ [default realm] - > foo, que é suficiente em situações simples em que há um único domínio e seus nomes de usuários são os mesmos que os nomes principais do Kerberos. No entanto, você pode querer regras mais complexas. Por exemplo, temos uma convenção segundo a qual os administradores do Windows têm uma conta "user-admin" com direitos de administrador de domínio, além de suas contas de "usuário". Quando logados em suas contas "admin", eles seriam rejeitados quando fossem para serviços da web autenticados em execução no Unix, já que "user-admin" não era reconhecido. Acabamos de adicionar um mapeamento para que user-admin @ REALM seja mapeado para "user", assim como o user @ REALM, e isso foi imediatamente corrigido de forma transparente para todos os aplicativos da web. A outra coisa boa sobre fazer isso dessa maneira é que ele funciona para qualquer serviço kerberizado que usa krb5_aname_to_localname (), ao invés de fazê-lo com o mod_map_user, que só se aplica ao Apache.

Algumas pessoas sugeriram apenas o mapeamento geral de todos os nomes user @ REALM para "usuário", independentemente do domínio (isso é o que a solução mod_map_user sugerida faria). Observe que esse é um problema de segurança em potencial: se você tiver várias regiões do Kerberos conectadas por confiança entre domínios, a porção da região se tornará significativa; faz parte da identificação do usuário. Se você acabou de tira-lo, isso significa que um administrador em outro reino pode representar um usuário local para o Apache apenas criando uma conta com o mesmo nome.

    
por 05.03.2014 / 04:58
1

Implementei recentemente algo semelhante em um ambiente de rede local usando o link e os cabeçalhos ntlmv2 que são fornecidos pelo navegador da Web (s).

Ele usa o mod_python ao invés de ter o samba instalado como um pacote adicional.

Espero que isso ajude

    
por 26.02.2014 / 22:03
0

Costumava haver um módulo do Apache chamado mod_map_user para isso. Em sua configuração do Apache, você diria:

MapUsernameRule (.*)@(.*) "$1"

Mas: De acordo com este post, mod_auth_kerb (se é isso que você está usando) agora faz isso para você: Grupos de usuários LDAP e mod_auth_kerb do Apache

    
por 10.02.2014 / 15:27