Instalação do Samba4.1 no Debian Wheezy
No inicio do ano publiquei um post sobre a instalação do Samba4 (Instalação do Samba4 – Active Directory compatible Domain Controler). Depois de um tempo de uso, de apanhar bastante e de várias coisas darem errado, a gente acaba vendo tudo diferente, aprende a simplificar e otimizar os trabalhos. Como a solução final foi realmente mais simples e limpa que a anterior, resolvi fazer uma atualização do post anterior. Algumas coisas permanecerão as mesmas, outras deixarão de existir (como compilação do bind, por exemplo) e algumas serão adicionadas, devido a atualização das versões utilizadas e tombos sofridos durante o caminho.
Enfim, falando do que interessa, desta vez nosso ambiente é o seguinte:
- Debian Wheezy 7.2
- Samba4.1
- Bind9
Antes de começar, ajuste os arquivos /etc/hosts e /etc/hostname do servidor com o IP, FQDN e nome correto do servidor para que não tenhamos problemas com o Kerberos.
Bind
Sem necessidade de compilação e utilizando versões estáveis disponíveis:
# apt-get install bind9
Vamos informar ao Bind que o Samba poderá alterar as entradas de DNS do domínio. No arquivo /etc/bind/named.conf, inserir a linha:
include "/var/lib/samba/private/named.conf";
Agora, vamos informar ao Bind para onde ele deve encaminhar as solicitações que ele não consegue resolver (Forwarders) e quais redes são autorizadas a utilizar este servidor para resolução de nomes (acl e allow-query):
# vim /etc/bind/named.conf.options acl redesautorizadas { 192.168.0.0/24; 192.168.2.0/24; 192.168.3.0/29; }; options { directory "/var/cache/bind"; //dnssec-validation auto; tkey-gssapi-keytab "/var/lib/samba/private/dns.keytab"; allow-query { redesautorizadas; }; forwarders{ 8.8.8.8; 8.8.4.4; }; auth-nxdomain no; # conform to RFC1035 // listen-on-v6 { any; }; };
Preparação do SO
Dependências necessárias para o serviço:
# apt-get install build-essential libacl1-dev libattr1-dev libblkid-dev \ libgnutls-dev libreadline-dev python-dev python-dnspython gdb pkg-config \ libpopt-dev libldap2-dev dnsutils libbsd-dev attr krb5-user docbook-xsl \ libcups2-dev acl
Serão solicitados o domínio e servidor administrativo, no caso:
Kerberos Realm: TESTE.COM KDC: dc.teste.com
Configurar o sistema de arquivos para suporte a acl e attr. No arquivo /etc/fstab, localizar a linha que define o ponto de montagem do diretório raiz e deixá-la como no exemplo:
UUID=uuid_disco / ext3 user_xattr,acl,barrier=1,errors=remount-ro 0 1
Depois de um tempo com o Samba em funcionamento e o servidor de arquivos ativo, observamos que a partição /run/lock enchia rapidamente e o serviço simplesmente parava. Resultado, muitas reclamações e muitos probemas. Depois de muita pesquisa e alguns testes, descobrimos que seria necessário aumentar o tamanho dessa partição no /etc/fstab e a dor de cabeça cessaria…
Originalmente essa linha não aparece no arquivo, então é necessário adicioná-la:
tmpfs /run/lock tmpfs rw,noexec,nosuid,nodev,size=52428800 0 0
Mais explicações sobre o problema e a solução:
Download configuração e instalação do Samba
# wget -c https://ftp.samba.org/pub/samba/stable/samba-4.1.0.tar.gz # gunzip samba-4.1.0.tar.gz # tar -xvf samba-4.1.0.tar # cd samba-4.1.0/ # ./configure --enable-debug --enable-selftest --enable-fhs \ --prefix=/usr --sysconfdir=/etc --localstatedir=/var # make && make install # mkdir /var/run/samba
Nota: Na configuração, os parâmetros prefix, sysconfdir e localstatedir não são obrigatórios, fiz desta forma apenas para que os arquivos de configuração e executáveis do Samba fossem copiados para os locaias padrão da distribuição.
Configuração do NSS (Network Service Switch)
# vim /etc/nsswitch.conf passwd: compat winbind group: compat winbind shadow: compat winbind
Ajustes Kerberos
#vim /etc/krb5.conf [libdefaults] default_realm = TESTE.COM dns_lookup_realm = true dns_lookup_kdc = true [realms] TESTE.COM = { kdc = kdc.teste.com admin_server = kdc.teste.com } [domain_realm] .teste.com = TESTE.COM teste.com = TESTE.COM
Nota: Nas configurações do kerberos deve-se respeitar upper case e lower case na configuração dos parâmetros.
Como o pacote do samba foi compilado o script de inicialização do serviço não foi criado, vamos criá-lo e configurar a inicialização automática no sistema:
# vim /etc/init.d/samba4 #! /bin/bash ### BEGIN INIT INFO # Provides: samba4 # Required-Start: $network $local_fs $remote_fs # Required-Stop: $network $local_fs $remote_fs # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: start Samba daemons ### END INIT INFO # # Start/stops the Samba daemon (samba). # Adapted from the Samba 3 packages. # PIDDIR=/var/run/samba SAMBAPID=$PIDDIR/samba.pid # clear conflicting settings from the environment unset TMPDIR # See if the daemon and the config file are there test -x /usr/sbin/samba -a -r /etc/samba/smb.conf || exit 0 . /lib/lsb/init-functions case "$1" in start) log_daemon_msg "Starting Samba 4 daemon" "samba" # Make sure we have our PIDDIR, even if it's on a tmpfs install -o root -g root -m 755 -d $PIDDIR if ! start-stop-daemon --start --quiet --oknodo --exec /usr/sbin/samba -- -D; then log_end_msg 1 exit 1 fi log_end_msg 0 ;; stop) log_daemon_msg "Stopping Samba 4 daemon" "samba" start-stop-daemon --stop --quiet --name samba $SAMBAPID # Wait a little and remove stale PID file sleep 1 if [ -f $SAMBAPID ] && ! ps h `cat $SAMBAPID` > /dev/null then # Stale PID file (samba was succesfully stopped), # remove it (should be removed by samba itself IMHO.) rm -f $SAMBAPID fi log_end_msg 0 ;; restart|force-reload) $0 stop sleep 1 $0 start ;; *) echo "Usage: /etc/init.d/samba {start|stop|restart|force-reload}" exit 1 ;; esac exit 0
# chmod +x /etc/init.d/samba4
# update-rc.d samba4 defaults
Samba4 instalado e sistema ajustado. Segue alguns comandos que podem ser úteis na criação e configuração do domínio:
– Provision Domain
# samba-tool domain provision
– Join Domain
# samba-tool domain join teste.com DC -Uuser.adm –realm=teste.com –dns-backend=BIND9_DLZ –site=SITE –server=DC
– Retirar membro de domínio
# samba-tool domain demote –realm=TESTE.COM -Uuser.adm –password=xxxxxx –server=DC
– Teste DNS
# host -t SRV _ldap._tcp.teste.com.
# host -t A dc.teste.com
– Update Samba
* Compilar e instalar o novo pacote com as instruções anteriores.
* Alterar a permissão do arquivo key.pm
# chmod 0600 /var/lib/samba/private/tls/key.pem
Após os ajustes reiniciar os serviços do samba e bind.
Diferente da versao anterior desse post vi que voce nao compilou mais o bind. Na compilacao do bind antes usava bdb como backend, em vez do tradicional diretorio cheio de arquivos do bind 😀
No post atual ele faz o mesmo ou salva em arquivos texto?
elaborando um pouquinho na razao da minha primeira pergunta. meu objetivo final é replicar esse dns fora da maquina do samba.
como o AD é só ‘um pouquinho’ importante, e é meu dns interno, gostaria de ter uma replica do dns pra nao ter stresses desnecessarios caso precise reiniciar a maquina ou fazer alguma manutencao programada.
Olá Fernando. Neste último post utilizei o Bind disponível nos repositórios do Debian, para evitar muitas compilações e ajustes mesmo. Não entrei muito nestas questões, mas creio que segue o padrão do Bind de armazenamento em arquivos.
Sobre a replicação, você está configurando um DC apenas?
sim, estou com um DC somente. logo que saiu o samba 4 tentei fazer com DC + replica mas fui meio infeliz, porem como a infra é toda virtualizada e tem backup até dizer chega, a replicacao do DNS ja me salva a pátria.
creio que agora é ver como fazer pra migrar do dns atual pro mais simples pra poder fazer essa replica sem stresses.
Entendi… eu fiz a replicação seguindo as mesmas configurações sem problemas. Pelo vai ter que investir um tempo pra descobrir como alterar a maneira como o samba enxerga o dns…. Acha que não vale tentar a replicação do AD de novo? Aí teria réplica de todos os serviços nobres sem parada em caso de perda de um deles…
Valer a pena vale. mas e a paciencia? rs.
Triste do AD no linux é que ele herda a complicacao do AD original 🙂
Estava fucando ontem ainda na questao do dns e alem do bind ele enfia mais um monte de coisa no ldap.
Mas enfim, vou separar um tempo nessa semana ou na proxima e subir uma nova VM e colocar uma replica do samba pra rodar e ver como vai, numa dessas vira a replica pra master e atualiza a outra e, se deus quiser, todos os problemas resolvidos 🙂
A réplica já deixa dormir melhor, a chance de parada diminui bem… E nem é tão complicado assim fazer, muitos detalhes, mas nenhum bicho de 7 cabeças….só o kerberos mesmo rs.
Se precisar de um help tamo aí…
o kerberos eu até acho susse, meu medo é mais aquelas coisas bem windows, tipo as GPOs.
mas vamos ver 😀
Boa noite.
Talvez alguém passou por esta situação.
Estou com samba4 e bind9.9 em debian 7.2, pacotes instalados do repositório backports.
Ambiente esta funcionando bem, porém me deparei com o seguinte problema.
Este ambiente esta em LAB para eu simular ambiente real.
Então ingressei a maquina no samba4 e funcionou de boa.
O problema é quando desengresso a maquina e a mesma remove os registros no bind tanto na zona master como na reverse mas a mesma continua na base do samba4. Em seguida
eu removo a maquina no ou Computers do samba4
Quando eu removo a maquina do samba4 e tento ingressar a maquina novamente ela registra no samba4 mas não registra a maquina do dns, da erros conforme abaixo. m
samba_dlz: starting transaction on zone agrovale.intra
Apr 16 18:56:44 lobeira named[18097]: client 192.168.1.86#1079: update ‘agrovale.intra/IN’ denied
Apr 16 18:56:44 lobeira named[18097]: samba_dlz: cancelling transaction on zone agrovale.intra
Apr 16 18:56:45 lobeira named[18097]: samba_dlz: starting transaction on zone agrovale.intra
Apr 16 18:56:45 lobeira named[18097]: samba_dlz: disallowing update of signer=not-gavr07\$\@AGROVALE.INTRA name=not-gavr07.agrovale.intra type=A error=insufficient access rights
Apr 16 18:56:45 lobeira named[18097]: client 192.168.1.86#1082/key not-gavr07\$\@AGROVALE.INTRA: updating zone ‘agrovale.intra/NONE’: update failed: rejected by secure update (REFUSED)
Pelo que andei vendo o problema parece esta relacionado quando cria a zona reversa.
Caso alguém possui alguma ideia do que pode ser.
Desde já agradeço
Bom dia Gilmar. Não tive este problema quando fiz a instalação, acredito ser porque não criei as zonas reversas.
Entendi.
No seu caso de não utilizar zonas reversas.
Se vc desengressar a maquina do dominio e em seguida remover ela na base do AD do samba4 quando ingressar novamente a mesma maquina ela consegue criar normalmente os registro da maquina na zona master do bind?
Desde já agradeço
Sim, ingresso ele adiciona, excluo remove. Normalzim
Entendi.
Pelos testes realmente deve ser algo no reverso mesmo.
Quando mando reparar o IP da maquina da esta mensagem abaixo.
Posso remover o registro da zona master que ele adicona normal o registro no bind.
Vc tem alguma sugestão do que pode ser a causa do reverso esta negando o registro?
Agradeço novamente.
Apr 17 10:33:21 lobeira named[3796]: samba_dlz: disallowing update of signer=not-gavr07\$\@AGROVALE.INTRA name=86.1.168.192.in-addr.arpa type=PTR error=insufficient access rights
Apr 17 10:33:21 lobeira named[3796]: client 192.168.1.86#1191/key not-gavr07\$\@AGROVALE.INTRA: updating zone ‘1.168.192.in-addr.arpa/NONE’: update failed: rejected by secure update (REFUSED)
Natália Vaz realizei mais testes.
Reinstalei todo servidor samba4 sem o uso o DNS reverso porem o problema relado anteriormente onde eu desengresso a maquina do dominio a mesma é removida do bind automaticamente mas continua na base do AD do samba4 então removo a maquina do samba4 do AD e algum tempo tento ingressar a mesma maquina novamente no dominio.
E neste ponto que da o problema conforme abaixo.
Ela cria a entrada no AD do samba4 mas não cria no bind.
Apr 20 09:41:22 lobeira named[11793]: samba_dlz: starting transaction on zone agrovale.intra
Apr 20 09:41:22 lobeira named[11793]: client 192.168.1.86#1056: update ‘agrovale.intra/IN’ denied
Apr 20 09:41:22 lobeira named[11793]: samba_dlz: cancelling transaction on zone agrovale.intra
Apr 20 09:41:22 lobeira named[11793]: samba_dlz: starting transaction on zone agrovale.intra
Apr 20 09:41:22 lobeira named[11793]: samba_dlz: disallowing update of signer=not-gavr07\$\@AGROVALE.INTRA name=not-gavr07.agrovale.intra type=A error=insufficient access rights
Apr 20 09:41:22 lobeira named[11793]: client 192.168.1.86#1059: updating zone ‘agrovale.intra/NONE’: update failed: rejected by secure update (REFUSED)
Apr 20 09:41:22 lobeira named[11793]: samba_dlz: cancelling transaction on zone agrovale.intra