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.