- configurando o SAMBA 48, COM BIND 911 (DLZ) no FreeBSD para realizar *
- Single Sign-on (SSO) com o Serviço de chat xmpp/jabber Openfire no *
- Ubuntu e clientes Spark 2.7.7 em hosts Windows. *
-
FEITO, ESCRITO E TESTADO POR RICARDO XERFAN *
-
GRAÇAS A DEUS, TUDO CERTO!!! *
-
DATA: 02/09/2018 - MACAPÁ-AP *
=================================
OBSERVAÇÃO MUITO IMPORTANTE PARA SSO
** ESTA OBSERVAÇÃO FOI INCLUÍDA A ESTE TUTORIAL, EM 05/09/2018, PELO SEGUINTE MOTIVO: EM TESTES REALIZADOS AO LADO DO COLEGA DHIEMESON NASCIMENTO, EM BANCO DE DADOS, PARA HOMOLOGAÇÃO, COM UM MAIOR VOLUME DE DADOS PARA TESTES, VERIFICOU-SE QUE APRESENTOU UM ERRO AO TENTAR FAZER SINGLE SIGN-ON (SSO) EM HOSTS SPARK/WINDOWS COM USUÁRIOS PERTENCENTES A DETERMINADOS GRUPOS ADMINISTRATIVOS DO DOMÍNIO (ESPECIFICAMENTE NESSE ASPECTO). E PELO FATO DE TER SIDO MEIO DIFÍCIL DE DESCOBRIR, SEGUE MAIORES INFORMAÇÕES:
NÃO ADICIONE OS SEGUINTES GRUPOS AS SEUS USUÁRIOS:
Domain Admins
Group Policy Creator Owners
Schema Admins
*** CASO ADICIONE ALGUM DESSES GRUPOS (QUALQUER UM, INDEPENDENTE SE FOR SOMENTE UM, DOIS OU TODOS ESTES) AO USUÁRIO OU GRUPO AO QUAL ELE PERTENÇA, VAI APRESENTAR ERRO NA HORA DE REALIZAR O SSO NO CLIENTE SPARK COM WINDOWS, POIS ELE NÃO VAI CONSEGUIR DETERMINAR O NOME DE USUÁRIO E O FQDN DO MESMO, APRESENTANDO POR CONSEQUÊNCIA A MENSAGEM (UNABLE TO DETERMINE).
===============================================================================
===============================================================================
PREPARAÇÃO DO SERVIDOR FreeBSD
COM SAMBA48 E BIND 911
=================================
INSTALAÇÃO DO SAMBA
*OBS.1: Para este ambiente, foi utilizado a instalação do SAMBA via Ports no FreeBSD. Para mais detalhes sobre esse tipo de instalação, acesse o link abaixo:
https://www.freebsd.org/ports/
https://www.youtube.com/watch?v=7xMBH-WwY3Y
Passo 1:
Atualizar a coleção de ports do FreeBSD:
# portsnap fetch update
PASSO EXTRA 1:
OBS.EXTRA.1-1: Como o Kerberos é sensível ao tempo, recomenda-se que seja instalado o pacote NTP. Essa instalação pode ser feita via PKG:
Atualizar o pkg:
# pkg update
Instalar o pacote NTP:
# pkg install ntp
Iniciar o daemon:
# /etc/rc.d/ntpd start
Passo 2:
Entrar no diretório ports do SAMBA e instalar o mesmo:
# cd /usr/ports/net/samba48/
# make install clean
*OBS.2: Na caixa de diálogo que aparecerá, escolha o DNS BIND, NA VERSÃO COMPATÍVEL COM O SAMBA QUE FOI ESCOLHIDO:
===========================================
BIND Version | Supported in Samba Version
===========================================
BIND 9.11 Samba 4.5.2 and later
BIND 9.10 Samba 4.2 and later
BIND 9.9 Samba 4.0 and later
BIND 9.8 Samba 4.0 and later
Para mais informações de como configurar o BIND e qual a versão suportada no SAMBA escolhido, acesse:
https://wiki.samba.org/index.php/BIND9_DLZ_DNS_Back_End#Configuring_the_BIND9_DLZ_Module
*OBS.3: Na caixa de diálogo que aparecerá sobre o BIND, escolha a opção GSSAPI Heimdal.
=================================
ARQUIVOS DE CONFIGURAÇÃO DO SERVIDOR
Passo 3:
Configurar os arquivos "/etc/hosts", "/etc/resolv.conf" e "/etc/rc.conf" de acordo com o seu ambiente:
# ee /etc/hosts
::1 localhost localhost.my.domain
127.0.0.1 localhost localhost.my.domain
192.168.2.60 svr02 svr02.freedom.local
*OBS.4: Aqui é bom que já se coloque o FQDN do servidor atrelado ao endereço IP do mesmo, pois na hora da configuração do SAMBA --interactive ele já pega as configurações do REALM e do Domain automaticamente.
# ee /etc/resolv.conf
#search freedom.local
domain freedom.local
#nameserver 192.168.2.60
nameserver 127.0.0.1
# ee /etc/rc.conf
hostname="svr02.freedom.local"
keymap="br.kbd"
ifconfig_em0="inet 192.168.2.60 netmask 255.255.255.0"
defaultrouter="192.168.2.254"
sshd_enable="YES"
#named_enable="YES"
#samba_server_enable="YES"
ntpd_enable="YES"
# Set dumpdev to "AUTO" to enable crash dumps, "NO" to disable
dumpdev="AUTO"
*OBS.4: Não há a necessidade de que seja colocado o FQDN na opção "hostname", basta apenas o nome do servidor.
*OBS.5: NÃO HABILITE AINDA as variáveis (named_enable="YES") e (samba_server_enable="YES").
Passo 4:
É bom que seja reiniciado o servidor:
# shutdown -r now
=================================
PROVISIONAMENTO DO SAMBA
Passo 5:
Provisionamento (ou promoção do Servidor a nível de Controlador de Domínio) do SAMBA em modo interativo:
# samba-tool domain provision --use-rfc2307 --interactive
*PARÂMETROS:
--use-rfc2307
Mapeamento de entidades relacionadas ao TCP/IP e ao sistema UNIX no X.500. Entradas para que possam ser resolvidas com o LDAP. Para mais informações, acesse o link abaixo:
https://tools.ietf.org/html/rfc2307
--interactive
Permite que vc escolha as opções, passo-a-passo, durante provisionamento.
*OBS.6: No momento do provisionamento, na hora da escolha do DNS backend, digite "BIND9_DLZ" (sem aspas).
DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]: BIND9_DLZ
*OBS.7: No momento do provisionamento, na hora da escolha do IP do DNS Forwarder, digite o IP do próprio servidor (depois de tudo configurado pode ser alterado isso, mas no momento deve ser apontado para o próprio servidor):
DNS forwarder IP address (write 'none' to disable forwarding) [192.168.2.60]:
*OBS.8: AINDA NÃO START O SAMBA.
=================================
CONFIGURAÇÃO DO BIND
*OBS.8: As configurações descritas aqui devem ser feitas com bastante atenção, pois o processo de SSO que será feito depois, depende de um DNS bem configurado para que funcione, justamente porque o Kerberos necessita disso. Para mais informações sobre a configuração do BIND, acesse:
https://wiki.samba.org/index.php/Setting_up_a_BIND_DNS_Server
https://wiki.samba.org/index.php/BIND9_DLZ_DNS_Back_End
*OBS.9: Para os passos a seguir, é necessário que se saiba a localização correta dos arquivos de configuração do DNS no SAMBA e do DNS no BIND, ambos com o nome “named.conf” para isso execute o comando a seguir:
*PARA O SAMBA:
# smbd -b
Procure então pela variável "BINDDNS_DIR" (sem aspas):
BINDDNS_DIR: /var/db/samba4/bind-dns
O comando pode ser feito desta forma também:
# smbd -b |grep BINDDNS_DIR:
BINDDNS_DIR: /var/db/samba4/bind-dns
Ou simplesmente procure o arquivo "named.conf" com o "find" e abra o que está no diretório do SAMBA:
# find / -iname named.conf
/var/db/samba4/bind-dns/named.conf
*PARA O BIND:
Localize o daemon do BIND:
# which named
/usr/local/sbin/named
Execute então o comando no caminho encontrado:
# /usr/local/sbin/named -V
Procure então pela variável "--sysconfdir=" (sem aspas)
'--sysconfdir=/usr/local/etc/namedb'
Ou simplesmente procure o arquivo "named.conf" com o "find" e abra o que está no diretório do BIND (namedb):
# find / -iname named.conf
/usr/local/etc/namedb/named.conf
IMPORTANTE: Verifique também se foi compilado com suporte a GSSAPI e atualizações de DNS dinâmicas seguras usando o Kerberos, para isso procure a variável “–with-gssapi=” (’–with-gssapi=/usr/local’ ou ‘–with-gssapi=yes’ ou similar), caso apareça a opção “’–without-gssapi’”, significa que o BIND não foi compilado com suporte a GSSAPI, neste caso vc terá que desinstalar e instalar novamente o BIND, escolhendo a opção que dê suporte ao GSSAPI Heimdal. Verifique também se foi compilado com suporte a zonas dinamicamente carregáveis (DLZ), para isso procure a variável “–with-dlopen=” (’–with-dlopen=yes’), caso apareça “’–without-dlopen’” desinstale e instale novamente o BIND com suporte a essa opção.
*OBS.10: Certifique-se de que o serviço do BIND não esteja rodando, caso esteja levantado, pare o mesmo:
# service named status
# service named stop
Passo 6:
Configuração do arquivo "named.conf" do BIND:
*OBS.11: Essa configuração depende do caminho certo de localização do arquivo "named.conf" do SAMBA (por isso que foi falado sobre como localizar os arquivos acima) e da inserção da cláusula no local correto dentro do arquivo, caso contrário vai dar erro.
Edite o arquivo "named.conf":
# ee /usr/local/etc/namedb/named.conf
Insira a seguinte cláusula no arquivo:
include "/var/db/samba4/bind-dns/named.conf";
*OBS.12: Esta cláusula deve ser inserida ou antes do início, ou depois (logo abaixo) da seguinte seção (NUNCA INSIRA DENTRO):
options {
[...]
};
Insira os seguintes parâmetros dentro seção "options":
options {
[...]
tkey-gssapi-keytab "/var/db/samba4/bind-dns/dns.keytab";
listen-on port 53 { any; };
allow-query { any; };
recursion yes;
[...]
};
Passo 7:
Configuração do arquivo "named.conf" do SAMBA:
Edite o arquivo "named.conf":
# ee /var/db/samba4/bind-dns/named.conf
Descomente, na seção "dlz "AD DNS Zone"", a linha correspondente a versão do BIND que foi instalado:
dlz "AD DNS Zone" {
# For BIND 9.8.x
# database "dlopen /usr/local/lib/shared-modules/bind9/dlz_bind9.so";
# For BIND 9.9.x
# database "dlopen /usr/local/lib/shared-modules/bind9/dlz_bind9_9.so";
# For BIND 9.10.x
# database "dlopen /usr/local/lib/shared-modules/bind9/dlz_bind9_10.so";
# For BIND 9.11.x
database "dlopen /usr/local/lib/shared-modules/bind9/dlz_bind9_11.so";
};
PASSO EXTRA 2
OBS.EXTRA.2-1: Se o usuário que for executar o BIND no SAMBA for diferente do default na hora da instalação, altere as permissões, dono e grupo do arquivo "dns.keytab" de acordo com o usuário e grupo escolhido:
# chmod 755 /var/db/samba4/bind-dns/dns.keytab
# chown root:bind /var/db/samba4/bind-dns/dns.keytab
Passo 8:
Cheque se as configurações do BIND estão ok:
# named-checkconf
*OBS.12: A saída padrão desse comando é não apresentar nenhuma mensagem, caso apresente alguma mensagem de erro, com base na mensagem apresentada, verifique as configurações dos arquivos "named.conf" e depois refaça o teste com esse mesmo comando.
Passo 10:
Localize o diretório do arquivo de configuração do SAMBA:
# smbd -b
Procure então pela variável "CONFIGFILE" (sem aspas):
CONFIGFILE: /usr/local/etc/smb4.conf
O comando pode ser feito desta forma também:
# smbd -b |grep CONFIGFILE:
CONFIGFILE: /usr/local/etc/smb4.conf
Ou simplesmente procure o arquivo "smb4.conf" com o "find":
# find / -iname smb4.conf
/usr/local/etc/smb4.conf
Edite o arquivo "smb4.conf":
ee /usr/local/etc/smb4.conf
Desative o DNS interno do SAMBA, removendo a opção "dns" (sem aspas) do parâmetro "server services" (sem aspas) dentro da seção "[global]" (sem aspas) no arquivo "smb4.conf":
server services = s3fs, rpc, nbt, wrepl, ldap, cldap, kdc, drepl, winbindd, ntp_signd, kcc, dnsupdate
Caso não tenha o parâmetro "server services" no arquivo "smb4.conf", apenas o inclua juntamente com a opção "-dns" dentro da seção "[global]" (sem aspas):
server services = -dns
Passo 11:
Descomente ou insira as variáveis (named_enable="YES") e (samba_server_enable="YES") no arquivo "rc.conf" do servidor:
# ee /etc/rc.conf
hostname="svr02.freedom.local"
keymap="br.kbd"
ifconfig_em0="inet 192.168.2.60 netmask 255.255.255.0"
defaultrouter="192.168.2.254"
sshd_enable="YES"
named_enable="YES"
samba_server_enable="YES"
ntpd_enable="YES"
# Set dumpdev to "AUTO" to enable crash dumps, "NO" to disable
dumpdev="AUTO"
Passo 12:
Gere a key rndc:
# rndc-confgen -a -r /dev/urandom
A saída desse comando deve ser parecida com essa:
wrote key file "/usr/local/etc/namedb/rndc.key"
IMPORTANTE: O RNDC controla a operação de um servidor de nomes. O rndc usa a conexão tcp para se comunicar com o servidor de ligação para enviar comandos autenticados com assinaturas digitais. Mais informações, acesse:
https://tecadmin.net/configure-rndc-for-bind9/
https://ftp.isc.org/isc/bind9/cur/9.10/doc/arm/man.rndc-confgen.html
https://linuxconfig.org/configure-rndc-key-for-bind-dns-server-on-centos-7
Passo 13:
Inicie o serviço do BIND:
# service named start
Inicie o serviço do SAMBA:
# service samba_server start
Passo 14:
Atualização dinâmica da base do DNS do SAMBA no BIND:
# samba_dnsupdate --verbose --all-names
=================================
DEMAIS VERIFICAÇÕES DO SAMBA
Passo 15:
Teste inicial do SAMBA. Listar os compartilhamentos/ mapeamentos:
# smbclient -L localhost -U%
A saída desse comando deve ser parecida com essa:
Sharename Type Comment
--------- ---- -------
netlogon Disk
sysvol Disk
IPC$ IPC IPC Service (Samba 4.8.0)
Reconnecting with SMB1 for workgroup listing.
Server Comment
--------- -------
Workgroup Master
--------- -------
Testar a conexão com o diretório "netlogon" e listar o conteúdo do mesmo:
# smbclient //localhost/netlogon -UAdministrator -c 'ls'
A saída desse comando deve ser parecida com essa:
Enter FREEDOM\Administrator's password:
. D 0 Thu Aug 30 02:14:06 2018
.. D 0 Thu Aug 30 02:14:15 2018
28433628 blocks of size 1024. 23406300 blocks available
Confirmar o nível do Domínio:
# samba-tool domain level show
A saída desse comando deve ser parecida com essa:
Domain and forest function level for domain 'DC=freedom,DC=local'
Forest function level: (Windows) 2008 R2
Domain function level: (Windows) 2008 R2
Lowest function level of a DC: (Windows) 2008 R2
Testar se foi criado o registro de serviço (SRV) do LDAP:
# host -t SRV _ldap._tcp.freedom.local.
A saída desse comando deve ser parecida com essa:
_ldap._tcp.freedom.local has SRV record 0 100 389 svr02.freedom.local.
*OBS.13: CASO APRESENTE ERRO NO COMANDO ANTERIOR, realize o procedimento descrito no "PASSO EXTRA 3" abaixo e refaça o teste anterior:
PASSO EXTRA 3
OBS.EXTRA.3-1: CASO APRESENTE ALGUM ERRO, COMO DE O DNS NÃO LOCALIZAR OS REGISTROS DENTRO DA BASE, REALIZE ESSE PASSO.
# samba_upgradedns --dns-backend=BIND9_DLZ
A saída desse comando deve ser parecida com essa:
Reading domain information
DNS accounts already exist
No zone file /var/db/samba4/bind-dns/dns/FREEDOM.LOCAL.zone
DNS records will be automatically created
DNS partitions already exist
dns-svr02 account already exists
See /var/db/samba4/bind-dns/named.conf for an example configuration include file for BIND
and /var/db/samba4/bind-dns/named.txt for further documentation required for secure DNS updates
Finished upgrading DNS
Testar se foi criado o registro de serviço (SRV) do Kerberos:
# host -t SRV _kerberos._udp.freedom.local.
A saída desse comando deve ser parecida com essa:
_kerberos._udp.freedom.local has SRV record 0 100 88 svr02.freedom.local.
Testar se foi criado o registro de host (A) do servidor local:
# host -t A svr02.freedom.local.
A saída desse comando deve ser parecida com essa:
svr02.freedom.local has address 192.168.2.60
Saber se o Kerberos está funcionando. Para isso gere um ticket para o Administrador:
# kinit administrator@FREEDOM.LOCAL
Caso não apresente erro no comando anterior, verifique se foi criado o ticket:
# klist -v
A saída desse comando deve ser parecida com essa:
Credentials cache: FILE:/tmp/krb5cc_0
Principal: administrator@FREEDOM.LOCAL
Cache version: 4
Server: krbtgt/FREEDOM.LOCAL@FREEDOM.LOCAL
Client: administrator@FREEDOM.LOCAL
Ticket etype: aes256-cts-hmac-sha1-96, kvno 1
Ticket length: 1110
Auth time: Sep 2 16:31:45 2018
End time: Sep 3 02:31:43 2018
Ticket flags: pre-authent, initial, forwardable
Addresses: addressless
ATENÇÃO: ATÉ AQUI O SEU SERVIDOR SAMBA JÁ DEVE SER CAPAZ DE FAZER QUALQUER TAREFA RELACIONADA AO CONTEXTO DE CONTROLADOR DE DOMÍNIO, NO ENTANTO, É NECESSÁRIO QUE SE CRIE A ZONA INVERSA E SE ADICIONE MAIS ALGUNS REGISTROS DOS TIPOS “A” e “PTR” AO DNS BIND PARA QUE FUNCIONE CORRETAMENTE A CONFIGURAÇÃO DE SINGLE SIGN-ON (SSO) QUE SERÁ IMPLEMENTADA.
=================================
CRIAR ZONA REVERSA NO DNS
Passo 16:
Listar as zonas que já estão criadas no servidor DNS:
# samba-tool dns zonelist 127.0.0.1 -U Administrator
A saída desse comando deve ser parecida com essa:
Password for [FREEDOM\Administrator]:
2 zone(s) found
pszZoneName : freedom.local
Flags : DNS_RPC_ZONE_DSINTEGRATED DNS_RPC_ZONE_UPDATE_SECURE
ZoneType : DNS_ZONE_TYPE_PRIMARY
Version : 50
dwDpFlags : DNS_DP_AUTOCREATED DNS_DP_DOMAIN_DEFAULT DNS_DP_ENLISTED
pszDpFqdn : DomainDnsZones.freedom.local
pszZoneName : _msdcs.freedom.local
Flags : DNS_RPC_ZONE_DSINTEGRATED DNS_RPC_ZONE_UPDATE_SECURE
ZoneType : DNS_ZONE_TYPE_PRIMARY
Version : 50
dwDpFlags : DNS_DP_AUTOCREATED DNS_DP_FOREST_DEFAULT DNS_DP_ENLISTED
pszDpFqdn : ForestDnsZones.freedom.local
Criar a Zona Reversa no seridor DNS:
# samba-tool dns zonecreate 127.0.0.1 2.168.192.in-addr.arpa -U Administrator
A saída desse comando deve ser parecida com essa:
Password for [FREEDOM\Administrator]:
Zone 2.168.192.in-addr.arpa created successfully
Listar, novamente, as zonas que já estão criadas no servidor DNS:
# samba-tool dns zonelist 127.0.0.1 -U Administrator
A saída desse comando deve ser parecida com essa:
Password for [FREEDOM\Administrator]:
3 zone(s) found
pszZoneName : freedom.local
Flags : DNS_RPC_ZONE_DSINTEGRATED DNS_RPC_ZONE_UPDATE_SECURE
ZoneType : DNS_ZONE_TYPE_PRIMARY
Version : 50
dwDpFlags : DNS_DP_AUTOCREATED DNS_DP_DOMAIN_DEFAULT DNS_DP_ENLISTED
pszDpFqdn : DomainDnsZones.freedom.local
pszZoneName : 2.168.192.in-addr.arpa
Flags : DNS_RPC_ZONE_DSINTEGRATED DNS_RPC_ZONE_UPDATE_SECURE
ZoneType : DNS_ZONE_TYPE_PRIMARY
Version : 50
dwDpFlags : DNS_DP_AUTOCREATED DNS_DP_DOMAIN_DEFAULT DNS_DP_ENLISTED
pszDpFqdn : DomainDnsZones.freedom.local
pszZoneName : _msdcs.freedom.local
Flags : DNS_RPC_ZONE_DSINTEGRATED DNS_RPC_ZONE_UPDATE_SECURE
ZoneType : DNS_ZONE_TYPE_PRIMARY
Version : 50
dwDpFlags : DNS_DP_AUTOCREATED DNS_DP_FOREST_DEFAULT DNS_DP_ENLISTED
pszDpFqdn : ForestDnsZones.freedom.local
=================================
ADICIONAR REGISTROS DOS TIPOS “A” e “PTR” NO DNS
Passo 17:
Criar o registro do tipo "A" na zona direta do DNS do SAMBA, para o servidor que ficará hospedado o serviço do Chat xmpp/jabber Openfire:
# samba-tool dns add 127.0.0.1 freedom.local svrchat.freedom.local A 192.168.2.70 -U Administrator
A saída desse comando deve ser parecida com essa:
Password for [FREEDOM\Administrator]:
Record added successfully
Testar a resolução do registro que foi criado no passo anterior:
# host -t A svrchat
A saída desse comando deve ser parecida com essa:
svrchat.freedom.local has address 192.168.2.70
Criar o registro do tipo "PTR" na zona reversa do DNS do SAMBA, para o próprio servidor do SAMBA (FreeBSD):
# samba-tool dns add 127.0.0.1 2.168.192.in-addr.arpa 60 PTR svr02.freedom.local -U Administrator
A saída desse comando deve ser parecida com essa:
Password for [FREEDOM\Administrator]:
Record added successfully
Testar a resolução reversa do registro que foi criado no passo anterior:
# host 192.168.2.60
A saída desse comando deve ser parecida com essa:
60.2.168.192.in-addr.arpa domain name pointer svr02.freedom.local.
Criar o registro do tipo "PTR" na zona reversa do DNS do SAMBA, para o servidor que ficará hospedado o serviço do Chat xmpp/jabber Openfire:
# samba-tool dns add 127.0.0.1 2.168.192.in-addr.arpa 70 PTR svrchat.freedom.local -U Administrator
A saída desse comando deve ser parecida com essa:
Password for [FREEDOM\Administrator]:
Record added successfully
Testar a resolução reversa do registro que foi criado no passo anterior:
# host 192.168.2.70
A saída desse comando deve ser parecida com essa:
70.2.168.192.in-addr.arpa domain name pointer svrchat.freedom.local.
*OBS.14: No momento de testar a resolução de nomes no modo reverso, caso apareça uma mensagem de erro parecida com essa: "Host 70.2.168.192.in-addr.arpa not found: 3(NXDOMAIN)". Verifique a zona reversa e o respectivo registro dentro da zona.
*OBS.15: Para mais informações de como administrador o DNS, acesse:
https://wiki.samba.org/index.php/DNS_Administration
https://www.samba.org/samba/docs/current/man-html/samba-tool.8.html
https://www.mundotibrasil.com.br/gerenciando-seu-servidor-dns-pelo-shell-no-samba4/
ATENÇÃO: ATÉ AQUI SEU SERVIDOR JÁ ESTÁ COM DNS FUNCIONAL PARA QUE SE FAÇA OPERAÇÕES COM O KERBEROS. NO ENTANTO, AINDA RESTA REALIZAR AS CONFIGURAÇÕES NO ARQUIVO “krb5.conf” DO KERBEROS DENTRO DO SAMBA. PASSO QUE TAMBÉM É MUITO IMPORTANTE PARA QUE AS CONFIGURAÇÕES DE SINGLE SIGN-ON (SSO) FUNCIONEM.
=================================
CONFIGURAR O KERBEROS DENTRO DO SAMBA
Passo 18:
O arquivo de configuração do Kerberos "krb5.conf" fica localizado dentro do diretório "private" do SAMBA. Basta realizar:
# smbd -b
Procure então pela variável "PRIVATE_DIR:" (sem aspas):
PRIVATE_DIR: /var/db/samba4/private
O comando pode ser feito desta forma também:
# smbd -b |grep PRIVATE_DIR:
PRIVATE_DIR: /var/db/samba4/private
Ou simplesmente procure o arquivo "krb5.conf" com o "find":
# find / -iname krb5.conf
/var/db/samba4/private/krb5.conf
Editar o arquivo "krb5.conf"
ee /var/db/samba4/private/krb5.conf
Colocar as informações relativas ao REALM do seu domínio dentro do arquivo "krb5.conf":
[libdefaults]
default_realm = FREEDOM.LOCAL
dns_lookup_realm = false
dns_lookup_kdc = true
[realms]
FREEDOM.LOCAL = {
kdc = svr02.freedom.local
admin_server = srv02.freedom.local
default_domain = FREEDOM.LOCAL
}
[domain_realm]
.freedom.local = FREEDOM.LOCAL
freedom.local = FREEDOM.LOCAL
Criar um link simbólico para o arquivo "krb5.conf" dentro do diretório "/etc/":
# ln -s /var/db/samba4/private/krb5.conf /etc/krb5.conf
Verificar se o link simbólico foi criado:
# ls -alh /etc | grep 'krb5*'
A saída desse comando deve ser parecida com essa:
lrwxr-xr-x 1 root wheel 32B Aug 31 01:27 krb5.conf -> /var/db/samba4/private/krb5.conf
*OBS.15: Para mais informações sobre a configuração do Kerberos, acesse:
https://www.h5l.org/
https://web.mit.edu/kerberos/
https://www.amazon.com.br/Kerberos-Definitive-Guide-ebook/dp/B004P1J81C
https://books.google.com.br/books?id=dGMd-uay-lkC&pg=PT67&lpg=PT67&dq=kerberos+heimdal+definitive+guide&source=bl&ots=JvehrL37ad&sig=aYeWPh60-Ojddbliae3eTJANBBg&hl=pt-BR&sa=X&ved=2ahUKEwjRm7HynZ3dAhXLDJAKHa1mD3AQ6AEwBnoECAAQAQ#v=onepage&q=kerberos%20heimdal%20definitive%20guide&f=false
https://www.safaribooksonline.com/library/view/kerberos-the-definitive/0596004036/ch04s02.html
https://www.safaribooksonline.com/library/view/kerberos-the-definitive/0596004036/ch04s04.html
PASSO EXTRA 4
OBS.EXTRA.4-1: POR HORA, AS CONFIGURAÇÕES DO SERVIDOR SAMBA ESTÃO PRATICAMENTE PRONTAS, A NÃO SER POR UM DETALHE: no momento da configuração do servidor Openfire no ubuntu, quando da conexão ao diretório (INTEGRAÇÃO DO OPENFIRE AO DOMÍNIO SAMBA), nas configurações de LDAP, ao fazer o teste de conexão vai apresentar um erro que está relacionado a autenticação forte utilizada no SAMBA ("algo que define se o Servidor ldap requer que tráfego ldap traffic seja assinado ou assinado e criptografado (selado)"), a qual não é suportada pelo servidor Openfire. Para "DRIBLAR" isso, é adicionado um parâmetro dentro do arquivo de configuração do SAMBA (smb4.conf), o qual irá permitir "associação simples e SASL em todos os transportes".
OBS.EXTRA.4-2: Acontece que, "Descobriu-se que a implementação LDAP do Samba não impõe proteção de integridade para conexões LDAP. Um invasor intermediário pode usar esta falha para downgrade conexões LDAP para não utilizar proteção de integridade, permitindo que eles sequestrem tais conexões. Esta falha afeta todas funções possíveis que o Samba pode operar.". Logo, isso mexe diretamente nas questões de segurança do SAMBA.
OBS.EXTRA.4-3: LEMBRANDO QUE, A FALHA MENCIONADA AQUI, AFETA A INTEGRAÇÃO DO OPENFIRE COM O PRÓPRIO DOMÍNIO SAMBA, E POR CONSEQUÊNCIA, AS CONFIGURAÇÕES DE SSO. JUSTAMENTE PORQUE SE NÃO HÁ A INTEGRAÇÃO COM O DOMÍNIO, NÃO HÁ USUÁRIO "IMPORTADO" E COM ISSO, NÃO HÁ SENTIDO PARA SE UTILIZAR O SINGLE SIGN-ON (SSO). O QUE DEIXARIA O ADMINISTRADOR DE REDE A MERCÊ DE VÁRIOS BANCOS DE DADOS COM NOMES DE USUÁRIOS E SENHAS TOTALMENTE DIVERSOS E DISPERSOS DO DOMÍNIO, LEVANDO O CONTEXTO DE INTEROPERABILIDADE PRO ESPAÇO, ENTRE OUTRAS QUESTÕES POLÊMICAS NO SENTIDO DE FUNCIONALIDADE ESCALÁVEL DE QUE TRATA UM DOMÍNIO. AÍ FICA A PERGUNTA: E AGORA?? ENTÃO, FICA A SEU CRITÉRIO.
OBS.EXTRA.4-4: Para mais informações sobre o que foi citado acima, acesse:
https://access.redhat.com/pt/articles/2262001
VOLTANDO AS CONFIGURAÇÕES:
Edite o arquivo "smb4.conf":
ee /usr/local/etc/smb4.conf
ADICIONE O SEGUINTE PARÂMETRO DENTRO DO ARQUIVO DE CONFIGURAÇÃO DO SAMBA (smb4.conf) na seção "[global]":
ldap server require strong auth = no
SEGUE UMA CÓPIA INTEGRAL DO TRECHO NO LINK ACIMA RELACIONADO AO QUE FOI CITADO NAS OBSERVAÇÕES EXTRAS DE 4-1 A 4-3:
***"CVE-2016-2112: O cliente LDAP e servidor não impõem proteção de integridade
Descobriu-se que a implementação LDAP do Samba não impõe proteção de integridade para conexões LDAP. Um invasor intermediário pode usar esta falha para downgrade conexões LDAP para não utilizar proteção de integridade, permitindo que eles sequestrem tais conexões.
Esta falha afeta todas funções possíveis que o Samba pode operar.
O patch de recomendação de segurança para esta falha introduz uma nova opção smb.conf:
Raw
ldap server require strong auth (G)
A opção "ldap server require strong auth" define se o
Servidor ldap requer que tráfego ldap traffic seja assinado ou
assinado e criptografado (selado). Os valores possíveis são no,
allow_sasl_over_tls and yes.
Um valor de no permite associação simples e sasl em todos os transportes.
Um valor de allow_sasl_over_tls allows simples e associação sasl (sem assinatura ou selo )
nas conexões TLS criptografadas. Somente conexões não criptografadas.
permitem associações sasl com assinatura ou selo.
Um valor yes permite somente associações simples em conexões TLS criptografadas.
Conexões não criptografadas permitem somente associações sasl com assinatura e ou selo.
Padrão: servidor Idap requer forte auth=yes
Nota: o servidor LDAP ainda não tem uma opção para impor autenticação forte. Os patches de segurança irão introduzir uma nova opção chamada ldap server require strong auth, valores possíveis são no, allow_sasl_over_tls e yes.
Como o comportamento padrão foi estabelecido para no antes, você talvez tenha que explicitamente trocar esta opção até que todos os clientes tenham sido ajustados para lidar com erros LDAP_STRONG_AUTH_REQUIRED. Clientes Windows e os servidores membros de Samba já utilizam proteção de integridade."***
ATENÇÃO: AGORA VAMOS PARTIR PARA A CONFIGURAÇÃO DO SERVIDOR DE CHAT XMPP/JABBER OPENFIRE QUE VAI RODAR EM CIMA DO SISTEMA OPERACIONAL GNU/LINUX UBUNTU.
===============================================================================
PREPARAÇÃO DO SERVIDOR UBUNTU
COM SERVIDOR DE CHAT XMPP/JABBER OPENFIRE
PASSO EXTRA 5
CRIAR NO AD UM GRUPO SOMENTE PARA O OPENFIRE COM TODOS OS USUÁRIOS DO DOMÍNIO;
CRIAR UM USUÁRIO PARA ACESSO DO OPENFIRE;
OBS.EXTRA.5-1:: SE O USUÁRIO NÃO TIVER SIDO ADICIONADO AO GRUPO ANTES DA CONFIGURAÇÃO DO OPENFIRE, ELE NÃO VAI APARECER NO GRUPO CORRESPONDENTE DENTRO DO OPENFIRE, PARA QUE O MESMO APAREÇA, É NECESSÁRIO REINICIAR O SERVIÇO DO OPENFIRE.
IMPORTANTE: ANTES DE TUDO, CONFIGURE UM IP ESTÁTICO PARA SUA PLACA DE REDE DO SERVIDOR DE CHAT XMPP/JABBER OPENFIRE:
# nano /etc/network/interfaces
# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.2.70
netmask 255.255.255.0
post-up route add default gw 192.168.2.1
=================================
INSTALAR PACOTES NECESSÁRIOS
Passo 19:
Adicionar repositório do Oracle Java 8:
# add-apt-repository ppa:webupd8team/java
Atualizar o "apt-get":
# apt-get update
Instalar o pacote Oracle Java:
# apt-get install oracle-java8-installer
IMPORTANTE: Para mais informações, acesse:
http://www.webupd8.org/2012/09/install-oracle-java-8-in-ubuntu-via-ppa.html
Instalar o pacote "mysql-server":
# apt-get install mysql-server
Instalar o pacote "krb5-user":
# apt-get install krb5-user
Instalar o pacote "samba-common-bin":
# apt-get install samba-common-bin
Baixar o pacote do openfire de acordo com a distro, pode ser o ".tar.gz":
# wget http://download.igniterealtime.org/openfire/openfire_4_0_2.tar.gz
Se baixou o ".tar.gz" extrair o mesmo, mover a pasta openfire para dentro do diretório var ou opt:
# cp -v openfire_4_0_2.tar.gz /opt/
# cd /opt/
# tar zxvf openfire_4_0_2.tar.gz
# rm openfire_4_0_2.tar.gz
Criar um link simbólico para dentro de "/etc/init.d/":
# ln -s /opt/openfire/bin/openfire /etc/init.d/openfire
Adicionar o script na inicialização do servidor:
# update-rc.d openfire defaults
*OBS.16:SE MESMO COM A LINHA ACIMA O SCRIPT NÃO INICIALIZAR NO BOOT, ADICIONE A LINHA ABAIXO AO arquivo "rc.local":
/etc/init.d/openfire start
*OBS.17: AINDA NÃO START O OPENFIRE.
=================================
CRIAR USUÁRIO, BANCO DE DADOS E GARANTIR PRIVILÉGIOS
Passo 20:
Adicionar um usuário chamado "openfire":
# adduser openfire
Abrir o console do "MySQL-Server" com o usuário "root":
# mysql -u root -p
Criar o Banco de Dados do Servidor Openfire:
mysql> create database openfire;
Garantir todos os privilégios, no Banco de Dados do Servidor Openfire criado acima, ao usuário openfire:
mysql> GRANT ALL PRIVILEGES ON openfire.* TO 'openfire'@'localhost' IDENTIFIED BY 'Pass@w0rd' WITH GRANT OPTION;
Confirmar privilégios:
mysql> FLUSH PRIVILEGES;
Sair do console do MySQL-Server:
mysql> exit
=================================
CONFIGURAR O KERBEROS PARA ACESSO AO KDC
Passo 21:
Entrar no diretório /etc/:
# cd /etc/
Renomear o arquivo "krb5.conf"
# mv krb5.conf krb5.conf.old
Criar outro arquivo "krb5.conf"
# nano krb5.conf
Adicionar as seguintes linhas ao arquivo "krb5.conf"
[libdefaults]
default_realm = FREEDOM.LOCAL
kdc_timesync = 1
forwardable = true
proxiable = true
[realms]
FREEDOM.LOCAL = {
kdc = svr02.freedom.local
admin_server = srv02.freedom.local
default_domain = FREEDOM.LOCAL
}
[domain_realm]
.freedom.local = FREEDOM.LOCAL
freedom.local = FREEDOM.LOCAL
=================================
CONFIGURAR AS INFORMAÇÕES DE DNS
Passo 22:
Editar o arquivo "/etc/resolv.conf":
# nano /etc/resolv.conf
Adicionar ao arquivo "resolv.conf" o endereço IP do Servidor SAMBA, juntamente com o domínio pesquisável:
search freedom.local
domain freedom.local
nameserver 192.168.2.60
Verificar se o DNS está fazendo resolução dos nomes dos servidores, tanto o direto, quanto o reverso:
# host -t A svr02.freedom.local
# host -t A svrchat.freedom.local
# host 192.168.2.60
# host 192.168.2.70
=================================
CONFIGURAR AS INFORMAÇÕES DE SASL/GSSAPI PARA REALIZAR SSO - PRIMEIRA PARTE
Passo 23:
Criar o arquivo "gss.conf" dentro do diretório "/opt/openfire/":
# nano gss.conf
Adicionar as seguintes linhas a esse arquivo:
com.sun.security.jgss.accept {
com.sun.security.auth.module.Krb5LoginModule
required
storeKey=true
keyTab="/opt/openfire/resources/xmpp.keytab"
doNotPrompt=true
useKeyTab=true
realm="FREEDOM.LOCAL"
principal="xmpp/svrchat@FREEDOM.LOCAL"
isInitiator=false
debug=true;
};
*OBS.18: Observação aos campos "keytab", "realm" e "principal". Os valores desses campos devem ser preenchidos de acordo a configuração do servidor de chat xmpp/jabber Openfire. (caminho da chave xmpp.keytab; nome do realm em letras maiúsculas; e nome do principal, respectivamente).
*OBS.19: Cabe uma ressalva importante aqui para o nome do principal. Este nome deve ser preenchido com o nome que autentica para o Kerberos no Servidor onde está o SAMBA. Para saber qual o nome correto, vai ser necessário a utilização da ferramenta ktutil e kinit (passo que vai ser visto mais à frente).
*OBS.20: A criação desse arquivo não influencia em nada, neste momento, vai ser necessário, mais à frente, quando for criada chave correspondente no Console de Gerenciamento (frontend) do Openfire.
*OBS.21: NESSES PASSOS DE CONFIGURAÇÃO DO SASL/GSSAPI É IMPORTANTE QUE SE TENHA O CONCEITO E NOÇÃO DO QUE É FEITO NOS "BASTIDORES". PARA MAIS INFORMAÇÕES, ACESSE:
https://www.cyrusimap.org/sasl/
https://www.openldap.org/doc/admin24/sasl.html
https://www.cyrusimap.org/sasl/sasl/faqs/openldap-sasl-gssapi.html
=================================
CONFIGURAR O OPENFIRE NO CONSOLE DE ADMINISTRAÇÃO
Passo 24:
Start o Openfire:
/opt/openfire/bin/openfire start
ou
/etc/init.d/openfire start
Verificar se as portas utilizadas pelo serviço do Java no Openfire estão abertas:
# netstat -anlp |grep 'java'
A saída desse comando deve ser parecida com essa:
tcp6 0 0 :::9090 :::* OUÇA 5810/java
unix 2 [ ] STREAM CONECTADO 17122 5810/java
unix 2 [ ] STREAM CONECTADO 17119 5810/java
IMPORTANTE: DEPOIS DE CONFIGURADO O OPENFIRE NO CONSOLE DE ADMINISTRAÇÃO, FAÇA NOVAMENTE O COMANDO ACIMA, NO ENTANTO A SAÍDA DELE DEVE SER PARECIDA COM ESSA ABAIXO:
tcp6 0 0 :::5229 :::* OUÇA 1473/java
tcp6 0 0 :::5262 :::* OUÇA 1473/java
tcp6 0 0 :::5263 :::* OUÇA 1473/java
tcp6 0 0 :::7443 :::* OUÇA 1473/java
tcp6 0 0 :::5269 :::* OUÇA 1473/java
tcp6 0 0 :::5275 :::* OUÇA 1473/java
tcp6 0 0 :::5276 :::* OUÇA 1473/java
tcp6 0 0 :::7070 :::* OUÇA 1473/java
tcp6 0 0 :::7777 :::* OUÇA 1473/java
tcp6 0 0 :::9090 :::* OUÇA 1473/java
tcp6 0 0 :::9091 :::* OUÇA 1473/java
tcp6 0 0 :::5222 :::* OUÇA 1473/java
tcp6 0 0 :::5223 :::* OUÇA 1473/java
[...]
IMPORTANTE: Para mais detalhes sobre quais portas o openfire utiliza, acesse:
https://discourse.igniterealtime.org/t/list-of-ports-used-by-openfire/75860/7
Verificar também se a porta do serviço do MySQL-Server está aberta:
# netstat -anlp |grep 'mysqld'
A saída desse comando deve ser parecida com essa:
tcp 0 0 127.0.0.1:3306 0.0.0.0:* OUÇA 1054/mysqld
unix 2 [ ACC ] STREAM OUVINDO 11989 1054/mysqld /var/run/mysqld/mysqld.sock
Acessar o openfire pelo browser na porta "9090":
http://ipdoservidor:9090
Utilizar banco de dados externo:
configurar a conexão com o mysql setando o banco criado:
jdbc:mysql://127.0.0.1:3306/openfire?rewriteBatchedStatements=true
Utilizar o usuário openfire e a senha criada para o mesmo.
Escolher Servidor de Diretórios (LDAP):
Para realizar essa configurações, é ideal que vc possua os nomes distintos (essas informações podem ser resgatadas no console de gerenciamento de usuários do AD, na opção "Editor de Atributos"):
DC=freedom,DC=local (DC=nomedodominio,DC=continuacaodonomedodominio)
CN=Suporte Openfire User,OU=FREEDOM,DC=freedom,DC=local (nome distinto relativo do usuário para administração do openfire)
Informção de mapeamento LDAP
Host: 192.168.2.60
Porta: 389
DN Base: DC="freedom",DC="local"
DN Administrador: administrator@freedom.local
IMPORTANTE: PODE SER QUE APRESENTE ALGUM ERRO NA HORA DA CONEXÃO AO LDAP QUANDO FOR UTILIZAR O NOME DISTINTO RELATIVO (RDN) DO USUÁRIO. CASO POSITIVO, UTILIZE O NOME DE USUÁRIO PELO FQDN DO MESMO (suporte@freedom.local).
*OBS.22: ALGUNS FILTROS QUE PODE SE UTILIZAR:
EM MAPEAMENTO DE USUÁRIO:
EM CONFIGURAÇÕES AVANÇADAS, MUDAR O FILTRO DE USUÁRIO DE:
(objectClass=organizationalPerson)
PARA:
(objectClass=organizationalPerson)(&(objectCategory=person)(objectClass=user)(memberOf=CN=openfire,OU=FREEDOM,DC=freedom,DC=local))
EM MAPEAMENTO DE GRUPO:
EM CONFIGURAÇÕES AVANÇADAS, MUDAR O FILTRO DE GRUPO DE:
(objectClass=group)
PARA:
(&(objectClass=group)(|(groupType=-2147483646)))
IMPORTANTE:
Para que os grupos apareçam no spark, ir na interface de administração do openfire, dentro da guia grupos, selecionar o grupo desejado, "Digite o nome da lista de contatos de grupo" e marcar as opções:
Ativar o compartilhamento de lista de contatos de grupo
Compartilhar grupo com usuário adicionais
Os seguintes grupos: (selecionar os grupos desejados)
NÃO ESQUECER DE IR NA GUIA "Configurações do Servidor", na opção "Registro & Login" e desativar:
Registro de conta via cliente
Mudar senha
Login Anônimo
BAIXAR E INSTALAR O PLUGIN LDAP VCARD (PLUGIN PARA COLOCAR FOTO DE PERFIL NO CHAT) (basta colocar o plugin dentro da pasta "plugin" no diretório do Openfire)
Ir na guia "gerenciamento do servidor", opção "propriedades do sistema":
Alterar a opção "ldap.override.avatar" para "true" (sem aspas)
=================================
CONFIGURAR AS INFORMAÇÕES DE SASL/GSSAPI PARA REALIZAR SSO - SEGUNDA PARTE
Passo 25:
Modificar ou adicionar os valores abaixo no console de administração do Openfire, na guia "Gerenciamento do Servidor" na opção "Propriedades do Sistema":
*OBS.23: PARA ADICIONAR NOVAS PROPRIEDADES, VÁ QUASE NO RODAPÉ DA PÁGINA E NA OPÇÃO "Adicionar nova propriedade"
*OBS.24: Para saber mais propriedades: "https://community.igniterealtime.org/docs/DOC-1061"
sasl.gssapi.config --> valor: /opt/openfire/gss.conf (aqui é caminho de localização do arquivo "gss.conf" criado em "CONFIGURAR AS INFORMAÇÕES DE SASL/GSSAPI PARA REALIZAR SSO - PRIMEIRA PARTE")
sasl.gssapi.debug --> valor: false
sasl.gssapi.useSubjectCredsOnly --> valor: false
sasl.mechs --> valor: GSSAPI
sasl.realm --> valor: FREEDOM.LOCAL
xmpp.fqdn --> valor: svrchat.freedom.local
Restartar o serviço do Openfire:
# /etc/init.d/openfire restart
ou
# /opt/openfire/bin/openfire restart
=================================
INGRESSAR O SERVIDOR DE CHAT XMPP/JABBER OPENFIRE AO DOMÍNIO SAMBA
Passo 26:
Entrar no diretório do SAMBA:
# cd /etc/samba
Renomear o arquivo "smb.conf":
# mv smb.conf smb.conf.old
Criar outro arquivo "smb.conf":
# nano smb.conf
Adicionar as seguinte linhas ao arquivo "smb.conf" criado acima (DE ACORDO COM O SEU AMBIENTE, NESSE ARQUIVO TEM INFORMAÇÕES DESNECESSÁRIAS):
[global]
workgroup = FREEDOM
security = ADS
realm = FREEDOM.LOCAL
encrypt passwords = yes
netbios name = SVRCHAT
domain master = no
host msdfs = no
#dedicated keytab file = /opt/openfire/resources/xmpp.keytab
kerberos method = secrets and keytab
client signing = if_required
## map id's outside to domain to tdb files.
idmap config *:backend = tdb
idmap config *:range = 50001-80000
## map ids from the domain the range may not overlap !
idmap config INTERNAL:backend = ad
idmap config INTERNAL:schema_mode = rfc2307
idmap config INTERNAL:range = 10000-40000
winbind nss info = rfc2307
winbind trusted domains only = no
winbind use default domain = yes
winbind enum users = yes
winbind enum groups = yes
winbind refresh tickets = yes
winbind offline logon = yes
IMPORTANTE: PARA MAIS INFORMAÇÕES SOBRE O SAMBA, ACESSE:
https://wiki.samba.org/index.php/User_Documentation
Ingressar ao domínio:
# net ads join -U Administrator
Testar se foi adicionado:
# net ads testjoin
Verificar as informações no domínio:
# net ads status -U Administrator
*OBS.25: DAS INFORMAÇÕES TRAZIDAS PELO COMANDO ACIMA, ESSAS SÃO AS MAIS IMPORTANTES PARA O CENÁRIO ATUAL:
dNSHostName: svrchat.freedom.local
servicePrincipalName: HOST/SVRCHAT
servicePrincipalName: HOST/svrchat.freedom.local
ATENÇÃO: DEPOIS DE FEITO O COMANDO DESCRITO ABAIXO (net ads keytab add xmpp -U Administrator) PARA ADICIONAR UM NOVO PRINCIPAL E GERAR A KEYTAB, REFAÇA O COMANDO ACIMA (net ads status -U Administrator), VC VERÁ QUE FOI ADICIONADO UM NOVO PRINCIPAL "XMPP" COM O HOSTNAME E O FQDN DO SERVIDOR DE CHAT, COMO A SAÍDA ABAIXO:
servicePrincipalName: HOST/SVRCHAT
servicePrincipalName: HOST/svrchat.freedom.local
servicePrincipalName: XMPP/SVRCHAT
servicePrincipalName: XMPP/svrchat.freedom.local
ADICIONAR O XMPP COMO PRINCIPAL GERANDO A KEYTAB (krb5.keytab):
# net ads keytab add xmpp -U Administrator
*OBS.26: O COMANDO ACIMA GERA A KEYTAB DENTRO DO DIRETÓRIO "/etc"
Verificar a keytab gerada:
# klist -k
A saída desse comando deve ser parecida com essa:
Keytab name: FILE:/etc/krb5.keytab
KVNO Principal
---- --------------------------------------------------------------------------
2 xmpp/svrchat.freedom.local@FREEDOM.LOCAL
2 xmpp/svrchat.freedom.local@FREEDOM.LOCAL
2 xmpp/svrchat.freedom.local@FREEDOM.LOCAL
2 xmpp/svrchat.freedom.local@FREEDOM.LOCAL
2 xmpp/svrchat.freedom.local@FREEDOM.LOCAL
2 xmpp/svrchat@FREEDOM.LOCAL
2 xmpp/svrchat@FREEDOM.LOCAL
2 xmpp/svrchat@FREEDOM.LOCAL
2 xmpp/svrchat@FREEDOM.LOCAL
2 xmpp/svrchat@FREEDOM.LOCAL
FAZER O TESTE DE AUTENTICAÇÃO PARA O KERBEROS NESSA KEYTAB SETANDO O PRINCIPAL:
# kinit -V -k -t /etc/krb5.keytab xmpp/svrchat.freedom.local@FREEDOM.LOCAL
*OBS.27: OBSERVE QUE AQUI É UM PASSO FUNDAMENTAL PARA DEFINIR QUAL PRINCIPAL USAR NO ARQUIVO "gss.conf" CITADO NA "*OBS.19 DO Passo 23 da seção CONFIGURAR AS INFORMAÇÕES DE SASL/GSSAPI PARA REALIZAR SSO - PRIMEIRA PARTE".
*OBS.28: SE APRESENTAR ERRO PROPOSITAL CONFORME A SAÍDA DO COMANDO ACIMA:
Using default cache: /tmp/krb5cc_0
Using principal: xmpp/svrchat.freedom.local@FREEDOM.LOCAL
Using keytab: /etc/krb5.keytab
kinit: Preauthentication failed while getting initial credentials
BASTA VC ALTERAR O PRINCIPAL PARA QUE AUTENTIQUE PARA O KERBEROS:
# kinit -V -k -t /etc/krb5.keytab xmpp/svrchat@FREEDOM.LOCAL
A saída desse comando deve ser parecida com essa:
Using default cache: /tmp/krb5cc_0
Using principal: xmpp/svrchat@FREEDOM.LOCAL
Using keytab: /etc/krb5.keytab
Authenticated to Kerberos v5
PERCEBA QUE AO ALTERAR O PRINCIPAL, ELE CONSEGUIU AUTENTICAR NORMALMENTE PARA O KERBEROS, LOGO É ESSE PRINCIPAL QUE VC DEVE COLOCAR NO CAMPO "principal" DO ARQUIVO "gss.conf" CITADO NA "*OBS.19 DO Passo 23 da seção CONFIGURAR AS INFORMAÇÕES DE SASL/GSSAPI PARA REALIZAR SSO - PRIMEIRA PARTE".
=================================
CONFIGURAR AS INFORMAÇÕES DE SASL/GSSAPI PARA REALIZAR SSO - TERCEIRA PARTE
Passo 27:
Com o auxílio da ferramenta "ktutil", vc vai ler a keytab local "/etc/krb5.keytab" e gerar nova keytab no diretório do Openfire "/opt/openfire/resources":
# ktutil
Ler a keyTab dentro do console do ktutil:
ktutil: rkt /etc/krb5.keytab
Listar a keytab somente para confirmar se é a mesma que foi utilizada para verificar e gerar o ticket do principal:
ktutil: l
A saída desse comando deve ser parecida com essa:
slot KVNO Principal
---- ---- ---------------------------------------------------------------------
1 2 xmpp/svrchat.freedom.local@FREEDOM.LOCAL
2 2 xmpp/svrchat.freedom.local@FREEDOM.LOCAL
3 2 xmpp/svrchat.freedom.local@FREEDOM.LOCAL
4 2 xmpp/svrchat.freedom.local@FREEDOM.LOCAL
5 2 xmpp/svrchat.freedom.local@FREEDOM.LOCAL
6 2 xmpp/svrchat@FREEDOM.LOCAL
7 2 xmpp/svrchat@FREEDOM.LOCAL
8 2 xmpp/svrchat@FREEDOM.LOCAL
9 2 xmpp/svrchat@FREEDOM.LOCAL
10 2 xmpp/svrchat@FREEDOM.LOCAL
IMPORTANTE: ANTES DE ESCREVER UMA NOVA KEYTAB COM TODAS ESSA INFORMAÇÕES, VC PODE REMOVER OS SLOTS COM OS PRINCIPAIS QUE NÃO AUTENTICARAM PARA O KERBEROS ATRAVÉS DO COMANDO "delent" seguide espaço e o número do slot correspondente. No caso desse cenário que montei, os slots que poderiam ser apagados, seriam os de 1 a 5.
Escrever nova keytab no diretório do Openfire "/opt/openfire/resources":
ktutil: wkt /opt/openfire/resources/xmpp.keytab
IMPORTANTE: CASO QUEIRA TER CERTEZA DE QUE ESCREVEU A NOVA KEYTAB COM AS INFORMAÇÕES CORRETAS, BASTA LER ESSA KEYTAB QUE FOI GERADA (rkt /opt/openfire/resources/xmpp.keytab) E DEPOIS MANDAR LISTAR (list) O CONTEÚDO DA MESMA.
SAIR DO CONSOLE DA FERRAMENTA "ktutil":
ktutil: q
MODIFICAR AS PERMISSÕES DA KEYTAB QUE FOI GERADA NO DIRETÓRIO DO OPENFIRE:
# chmod 755 /opt/openfire/resources/xmpp.keytab
REINICIAR O SERVIÇO DO OPENFIRE:
# /opt/openfire/bin/openfire restart
ATENÇÃO: ATÉ AQUI O SEU SERVIDOR DE CHAT XMPP/JABBER OPENFIRE NO SISTEMA OPERACIONAL UBUNTU JÁ É CAPAZ DE UTILIZAR O KERBEROS PARA REALIZAR CONEXÕES AO SERVIDOR SAMBA NO SISTEMA OPERACIONAL FreeBSD. AGORA VAMOS PARTIR PARA A CONFIGURAÇÃO DO(S) HOST(S) QUE UTILIZARA(ÃO) O CLIENTE SPARK PARA FAZER SINGLE SIGN-ON (SSO) NO SISTEMA OPERACIONAL WINDOWS.
===============================================================================
PREPARAÇÃO DOS HOSTS (MÁQUINAS CLIENTES) WINDOWS
PARA A UTILIZAÇÃO DO CLIENTE DE CHAT XMPP/JABBER SPARK EM SSO
Passo 28:
*OBS.29: É IMPORTANTE QUE PARA ESTE PASSO OS HOSTS (MÁQUINAS CLIENTES) WINDOWS JÁ ESTEJAM INGRESSADOS AO DOMÍNIO. PORTANTO, COM AS INFORMAÇÕES DE MÁQUINA DO DOMÍNIO, ISSO INCLUI QUE O DNS PRIMÁRIO SEJA O ENDEREÇO IP DO SERVIDOR SAMBA (BIND/SAMBA). CASO CONTRÁRIO, NÃO VAI FUNCIONAR.
*OBS.30: É IMPORTANTE TAMBÉM QUE SE FAÇA TESTES DE RESOLUÇÃO DE NOMES COM A FERRAMENTA "nslookup", PARA SABER SE ESTÁ RESOLVENDO O DIRETO E O REVERSO DOS SERVIDORES SAMBA E CHAT OPENFIRE DE DENTRO DOS HOSTS (MÁQUINAS CLIENTES). CASO NÃO ESTEJA RESOLVENDO, NÃO VAI FUNCIONAR.
*OBS.31: É IMPORTANTE TAMBÉM QUE OS RELÓGIOS DOS SERVIDORES E HOSTS (MÁQUINAS CLIENTES) ESTEJAM SINCRONIZADOS, OU COM UMA DIFERENÇA DE NO "MÁXIMO" 5 MINUTOS, PRA MAIS OU PRA MENOS, DE UM PRO OUTRO. CASO CONTRÁRIO, NÃO VAI AUTENTICAR PARA O KERBEROS.
Instalar o java para windows.
Instalar o cliente de chat xmpp/jabber Spark:
*OBS.32: RECOMENDA-SE, ATÉ ENTÃO, A VERSÃO 2.7.7 DO SPARK.
Criar a chave "AllowTGTSessionKey" no registro do Windows:
Esse parâmetro deve ser adicionado ao seguinte caminho:
Computador\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos\Parameters
(Novo > Valor DWORD (32 bits)) ou (REG_DWORD) = 1
*OBS.33: O parâmetro "AllowTGTSessionKey" é para o java ter permissão de leitura ao ticket do kerberos na sessão atual; caso não esteja adicionado ao registro do windows, o spark não vai conseguir determinar o FQDN do usuário, apresentando a mensagem: "Unable to determine".
Criar o arquivo "krb5.ini" dentro do diretório "C:\Windows" com o seguinte conteúdo:
[libdefaults]
default_realm = FREEDOM.LOCAL
[realms]
FREEDOM.LOCAL = {
kdc = svr02.freedom.local
admin_server = srv02.freedom.local
default_domain = FREEDOM.LOCAL
}
[domain_realm]
.freedom.local = FREEDOM.LOCAL
freedom.local = FREEDOM.LOCAL
IMPORTANTE: ATÉ AQUI, SE NÃO OCORREU NENHUM ERRO (CASO TENHA OCORRIDO, VOLTE NA PARTE QUE OCORREU E VERIFIQUE SUAS CONFIGURAÇÕES), OS SEUS HOSTS JÁ ESTÃO COM QUASE TODA A CONFIGURAÇÃO PRONTA PARA REALIZAR SSO NO SPARK. NO ENTANTO, RESTAM MAIS DOIS PASSOS:
Passo 29:
No Spark, na tela de login, guia "avançado", na guia "SSO" marque "Use Single Sign-On (SSO) via GSSAPI". Em "Preferências Avançadas de Conexão", marque qualquer uma das três alternativas (Use krb5.conf or krb5.ini; Use DNS; Specify below).
No caso de utilizar a opção "Specify below", no campo "Realm", deve ser digitado o nome do REALM do Kerberos em letras maiúsculas e no campo "KDC", deve ser digitado o FQDN em letras minúsculas ou o endereço IP do servidor SAMBA, no caso deste ambiente, ficaria "FREEDOM.LOCAL" e "svr02.freedom.local" (todos sem aspas).
Volte para a tela de login e perceba que ele já pegou automaticamente as informações de usuário logado, basta apenas digitar o endereço do servidor de chat xmpp/jabber Openfire no campo "servidor" abaixo do campo "Account:":
Este nome pode ser tanto o FQDN, o Hostname ou endereço IP do servidor de chat xmpp/jabber Openfire:
svrchat.freedom.local
ou
svrchat
ou
192.168.2.70
PASSO EXTRA 6
MELHORES PRÁTICAS PARA CONFIGURAR O SPARK (PARA ELE FICAR MAIS ATRATIVO PARA O USUÁRIO):
**NA GUIA CONTATOS MARCAR AS OPÇÕES:
mostrar grupos vazios
show offline users
**NA GUIA FILE, OPÇÃO PREFERÊNCIAS:
CHAT EM GRUPO, MARCAR:
Show toast popup when someone says my name
SONS, MARCAR "TOCAR SONS..." EM TODAS AS OPÇÕES
APARÊNCIA, MARCAR:
Mostrar Avatar na lista de contatos
NOTIFICAÇÕES, MARCAR:
Mostrar Popup estilo torradeira
Notificar quando usuário ficar offline (aumentar tempo para 3 segundos)
Notificar quando usuário ficar online
Show new messages in the system tray
SPELLCHECKER, MARCAR:
Enable Spellchecking
Enable Auto Spellchecking
Language - Português-Brasil
*OBS.34: AS INFORMAÇÕES CITADAS NO “PASSO 29” E NO “PASSO EXTRA 6” PODEM SER ADICIONADS VIA SCRIPT DE CONFIGURAÇÃO AUTOMATIZADOS POR GPO NO SAMBA. INCLUSIVE JÁ CRIEI ESSES SCRIPTS E VOU DISPONIBILIZÁ-LOS TAMBÉM.
Passo 30: REINICIAR OS HOSTS (MÁQUINAS CLIENTES) PARA QUE AS CONFIGURAÇÕES DE SINGLE SIGN-ON (SSO) ENTREM EM VIGOR NO PRÓXIMO LOGON DO WINDOWS.
================
END OF FILE - GRAÇAS A DEUS TUDO CERTO!!!
FEITO, ESCRITO E TESTADO POR RICARDO XERFAN. DATA: 02/09/2018 - MACAPÁ-AP.