SSO: Apache e Samba4
Em um post anterior mostrei a configuração de autenticação do Apache no Samba2 utilizando o NTLM. Seguindo a mesma idéia, vou mostrar a configuração de autenticação do Apache em domínios Samba4 utilizando os usuários já autenticados na rede. Serão mostradas algumas configurações diferentes, dependentes dos clientes ou serviços utilizados.
Obs: Já estou considerando que o domínio samba4 já está funcional e com o kerberos e o DNS corretamente configurados.
– Configurações utilizando o NTLM
Nos testes realizados, o NTLM funcionou corretamente quando configurado em clientes rodando o samba3 e autenticando no samba4.
É necessário habilitar o módulo do NTLM no apache, vamos baixá-lo e habilitá-lo:
# apt-get install libapache2-mod-auth-ntlm-winbind # a2enmod auth_ntlm_winbind
Adicionar o usuário de execução do Apache ao grupo do Winbind:
# adduser www-data winbindd_priv
Nos arquivos de configurações dos alias (/etc/apache2/conf.d) ou sites do apache (/etc/apache2/sites-available) , adicionar as seguintes configurações:
AuthType NTLM AuthName "Autenticar Acesso" NTLMAuth on NTLMAuthHelper "/usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp \ --domain=dominio.com" NTLMBasicAuthoritative off require valid-user
Ou a seguinte para autenticação baseada em grupos de acesso:
AuthType NTLM AuthName "Autenticar Acesso" NTLMAuth on NTLMAuthHelper "/usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp \ --domain=dominio.com --require-membership-of=DOMINIO\\\grupo" NTLMBasicAuthoritative off require valid-user
Após as alterações aplicadas, reiniciar o serviço:
# /etc/init.d/apache2 restart
OBS: Nos servidores executando o samba4, a autenticação NTLM funcionou somente no primeiro caso. Quando a autenticação por grupos foi necessária, o serviço não funcionou corretamente.
– Configurações utilizando o Kerberos
É necessário criar uma zona de pesquisa inversa no DNS e adicionar um registro para o servidor onde o apache é executado:
# samba-tool dns zonecreate DC 0.168.192.in-addr.arpa # samba-tool dns add DC 0.168.192.in-addr.arpa 200 PTR webserver.domain.com
Onde:
– DC = nome do controlador de domínios
– webserver = servidor de IP 192.168.0.200
– domain.com = domínio DNS
Agora vamos criar um usuário com senha randômica que será usado para criação do SPN (Service Principal Name) e exportar o keytab do domínio:
# samba-tool user create --random-password http-server # samba-tool spn add HTTP/server.domain.com@SENIOR.LOCAL.TLD http-server # samba-tool domain exportkeytab http.keytab --principal=HTTP/server.domain.com@DOMAIN.COM.TLD
Vamos mover o arquivo criado para o diretório do apache e ajustar as permissões:
# mv http.keytab /etc/apache2/ # chown root:www-data /etc/apache2/http.keytab # chmod 640 /etc/apache2/http.keytab
Também é necessário habilitar o módulo do kerberos no apache:
# apt-get install libapache2-mod-auth-kerb # a2enmod auth_kerb # a2enmod authnz_ldap
No site (nesta caso a autenticação configurada no conf.d não funcionou) correspondente à aplicação que necessita de autenticação, adicionar as configurações:
<Directory /caminho_aplicacao> AuthType Kerberos AuthName "Intranet Login" KrbMethodNegotiate on KrbMethodK5Passwd on KrbLocalUserMapping on Krb5Keytab /etc/apache2/http.keytab KrbAuthRealms DOMAIN.COM Require valid-user </Directory>
Para a autenticação baseada em grupos de acesso deve ser usada a seguinte configuração:
<Directory /caminho_aplicacao>
AuthType Kerberos
AuthName "Intranet Login"
KrbMethodNegotiate on
KrbMethodK5Passwd on
KrbLocalUserMapping on
Krb5Keytab /etc/apache2/http.keytab
KrbAuthRealms DOMAIN.COM
Require valid-user
AuthLDAPURL "ldap://server1.domain.com/ou=users,dc=domain,dc=com?sAMAccountName"
AuthLDAPBindDN user@domain.com
AuthLDAPBindPassword password
require ldap-group cn=grupo,ou=groups,dc=domain,dc=com
</Directory>
Referências: