Arquivo

Archive for agosto \08\America/Sao_Paulo 2014

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.

Categorias:Diversos