quinta-feira, 21 de janeiro de 2016

Samba4 + Dominio + AD Debian

Implementando um servidor de domínio com o poderoso Samba4

Amigos,
Já tem um certo tempo que eu não posto nada aqui, mas devido a minha labuta para implementar um servidor de domínio de maneira funcional, resolvi escrever esse artigo para documentar os procedimentos realizados e também para ajudar os colegas que tiverem essa mesma necessidade.
Para montar o ambiente utilizei o Debian Wheezy 7.7 devidamente atualizado e uma máquina com Windows 7 Ultimate para ser a estação de trabalho de testes.
Bom, agora chega de “bla, bla, bla” e vamos colocar a mão na massa!
Para facilitar o nosso trabalho, é altamente recomendável ter um servidor de DHCP na rede. Se você já tem, configure-o para distribuir os Ips, Gateway, DNS, WINS e Domain Search de acordo com o seu ambiente, de modo que o DNS primário e WINS devem ser SEMPRE o IP do Samba4 (no caso desse artigo, o 192.168.0.254). O Domain Search deve ser o domínio criado (no caso desse artigo, meudominio.com.br).
Se você não tem, vamos implementar no próprio servidor do Samba4:
1
# apt-get -y --force-yes install isc-dhcp-server
Agora, vamos editar o arquivo de configuração:
1
# vim /etc/dhcp/dhcpd.conf
Deixe-o de acordo com o seu ambiente! No caso desse artigo, fica assim:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
## DHCP
## Por Luiz Henrique M. Fagundes
## www.aprendendolinux.com
 
#nível de log
log-facility local7;
 
shared-network meudominio {
subnet 192.168.0.0 netmask 255.255.255.0 {
 
default-lease-time                600;
max-lease-time                    7200;
 
option subnet-mask                255.255.255.0;
option broadcast-address          192.168.0.255;
option routers                    192.168.0.1;
option domain-name-servers        192.168.0.254;
option netbios-name-servers       192.168.0.254;
option domain-name                "meudominio.com.br";
 
range 192.168.0.2 192.168.0.253;
    }
}
Agora, vamos instalar os os pacotes necessários para essa implementação antes de instalar o samba 4 via backports:
1
# apt-get install attr acl krb5-user ntp
Deixe as repostas padrão na configuração do Kerberos. Apenas atentando para a primeira pergunta “Reino por omissão do Kerberos”, informe seu domínio em letras maiúsculas.
Agora vamos configurar o repositório wheezy-backports para ter uma versão mais recente do samba4:
1
2
# echo "deb http://ftp.br.debian.org/debian wheezy-backports main" >> /etc/apt/sources.list.d/wheezy-backports.list
# apt-get update
Vamos agora instalar (usando o repositório wheezy-backports) os pacotes do samba4, o Bind 9.9 (será usado como DNS para o samba) e o pacote libnss-winbind que usaremos para fazer a integração de outras soluções, caso implementemos nessa mesma máquina:
1
# apt-get install -y -t wheezy-backports samba smbclient libnss-winbind bind9
Vamos então, fazer os ajustes necessários para preparar o sistemas para futuras integrações. Vamos editar o arquivo “/etc/nsswitch.conf”
1
# vim /etc/nsswitch.conf
Vamos alterar apenas as linhas iniciadas com passwd, group e shadow, deixando-as assim:
1
2
3
passwd: compat winbind
group:  compat winbind
shadow: compat winbind
Agora precisamos configurar o suporte a ACLs. Edite o arquivo “/etc/fstab”:
1
# vim /etc/fstab
ATENÇÃO! IMPORTANTE! Não copie e cole a linha abaixo, edite a entrada referente a partição desejada do disco.
1
UUID=2a7a876c-fe12-4945-ad66-b55e173435f2 / ext4 user_xattr,acl,barrier=1,errors=remount-ro 0 1
O disco utilizado não apresenta partições separadas, apenas o /. Ajuste se necessário. Os parâmetros user_xattr, acl e barrier devem ser definidos na partição onde os arquivos dos usuários serão alocados.
Agora, vamos aplicar as mudanças com o comando abaixo:
1
# mount -o remount,rw /
Agora precisamos ajustas as configurações de rede. Então, primeiro vamos configurar o arquivo hosts:
1
# vim /etc/hosts
Insira a linha abaixo, obviamente conforme as configurações do seu servidor:
1
192.168.0.254 nome-da-maquina.meudominio.com.br nome-da-maquina
Agora vamos configurar a interface de rede:
1
# vim /etc/network/interfaces
Obviamente, você deve configurar de acordo com a sua estrutura de rede. No meu caso ficou assim:
1
2
3
4
5
6
7
auto eth0
iface eth0 inet static
    address 192.168.0.254
    netmask 255.255.255.0
    gateway 192.168.0.1
    dns-nameserver 192.168.0.1
    dns-search meudominio.com.br
Agora precisamos reiniciar o serviço de rede:
1
# service networking stop ; sleep 2 ; service networking start
Agora vamos ajustas as configurações do DNS:
1
# vim /etc/resolv.conf
Configure de acordo com o seu ambiente:
1
2
3
4
domain meudominio.com.br
search meudominio.com.br
nameserver 192.168.0.254
nameserver 192.168.0.1
O nameserver 192.168.0.254 será utilizado pelo samba, enquanto o 192.168.0.1 é o serviço de DNS da rede local que está em vigor.
Precisamos também configurar serviço de NTP para a atualização de data/hora:
1
# vim /etc/ntp.conf
Deixe esse arquivo EXATAMENTE como nesse conteúdo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# /etc/ntp.conf, configuration for ntpd; see ntp.conf(5) for help
driftfile /var/lib/ntp/ntp.drift
 
# Enable this if you want statistics to be logged.
statsdir /var/log/ntpstats/
statistics loopstats peerstats clockstats
filegen loopstats file loopstats type day enable
filegen peerstats file peerstats type day enable
filegen clockstats file clockstats type day enable
 
# pool.ntp.org maps to about 1000 low-stratum NTP servers.  Your server will
# pick a different set every time it starts up.  Please consider joining the
server ntp.usp.br
server gps.ntp.br
 
# Access control configuration; see /usr/share/doc/ntp-doc/html/accopt.html for
# might also be helpful.
ntpsigndsocket /var/lib/samba/ntp_signd/
 
# Note that "restrict" applies to both servers and clients, so a configuration
# that might be intended to block requests from certain clients could also end
# up blocking replies from your own upstream servers.
# By default, exchange time with everybody, but don't allow configuration.
restrict -4 default kod notrap nomodify nopeer noquery
restrict -6 default kod notrap nomodify nopeer noquery
 
# Local users may interrogate the ntp server more closely.
restrict 127.0.0.1
restrict ::1
Agora precisamos reiniciar o serviço:
1
# service ntp restart
Enfim, chegou o momento de começarmos a configurar o Samba4. Por padrão, a instalação do samba4 instalada do repositório wheezy-backports está definida apenas para compartilhamento de arquivos e impressoras. Vamos então configurá-lo para trabalhar como servidor de domínio.
Primeiro devemos parar o serviço do samba. Usaremos o comando abaixo:
1
# service samba stop
Agora, vamos remover o arquivo de originar de configuração, mas vamos manter uma cópia de segurança:
1
# mv /etc/samba/smb.conf /etc/samba/smb.conf.default
E enfim, vamos rodar o comando que vai gerar as novas configurações:
1
samba-tool domain provision --option="interfaces=lo eth0" --option="bind interfaces only=yes" --use-rfc2307 --realm=MEUDOMINIO.COM.BR --domain=MEUDOMINIO --server-role=dc --dns-backend=BIND9_DLZ --adminpass='123Mudar'
Explicando as opções:
–option=”interfaces=lo eth0″ –option=”bind interfaces only=yes” – Se seu controlador de domínios tem mais de uma interface de rede essa opção é obrigatória. Isso força o samba escutar e resolver corretamente o DNS para a interface da sua rede local;
–use-rfc2307 – O uso dessa opção ativa o Samba Active Directory para armazenar atributos posix. É também criado informações NIS (Network Information Service) no AD, permitindo a administração de UIDs/GIDs e outras funções Unix;
–realm=MEUDOMINIO.COM.BR – É onde setamos o domínio completo, no caso prefixo mais sufixo;
–domain=DOMINIO – Nessa opção, devemos setar apenas o prefixo do domínio;
–dns-backend=BIND9_DLZ – Por padrão Samba4 utiliza o seu próprio DNS. Essa opção força o Samba4 utilizar o Bind como DNS Backend. Na minha opinião é o mais recomendado, pois se tratar da solução Open Source mais flexível disponível no momento;
–adminpass=’123Mudar’ – Aqui configuramos a senha do usuário “Administrator”, que será o administrator do sistema. Defini a senha para ‘123Mudar’.
Agora vamos preparar o bind para ser usado como DNS do Samba4. Edite primeiro o arquivo “/etc/bind/named.conf”
1
# vim /etc/bind/named.conf
Inclua no final do arquivo a seguinte linha:
1
include "/var/lib/samba/private/named.conf";
Agora precisamos editar o arquivo “/etc/bind/named.conf.options”.
1
# vim /etc/bind/named.conf.options
ATENÇÃO! Abaixo da linha “dnssec-validation auto;” insira a seguinte linha:
1
tkey-gssapi-keytab "/var/lib/samba/private/dns.keytab";
Agora como instalamos a versão 9.9 do Bind, precisamos ajustar isso no arquivo de configuração gerado pelo Samba4. Edite o arquivo “/var/lib/samba/private/named.conf”:
1
# vim /var/lib/samba/private/named.conf
COMENTE a linha referente ao Bind 9.8.0 e DESCOMENTE a linha referente ao Bind 9.9.0. Fica assim:
1
2
3
4
5
6
7
dlz "AD DNS Zone" {
    # For BIND 9.8.0
    # database "dlopen /usr/lib/i386-linux-gnu/samba/bind9/dlz_bind9.so";
 
    # For BIND 9.9.0
    database "dlopen /usr/lib/i386-linux-gnu/samba/bind9/dlz_bind9_9.so";
};
Agora, precisamos copiar as configurações do Kerberos geradas pelo samba para o diretório de configurações do sistema:
1
# cp /var/lib/samba/private/krb5.conf /etc/
Agora precisamos fazer o seguinte: Iniciar o samba para que ele prepare o arquivo “ dns.keytab” para o Bind, reiniciar o Bind para ativar essas configurações e restartar o samba para que ele passe a usar efetivamente o Bind como DNS. Faremos os comandos nessa sequencia:
1
2
3
# service samba start
# service bind9 restart
# service samba restart
Agora, vamos desativar a política de atualização de senha para o usuário administrador, para que a senha não expire nunca:
1
# samba-tool user setexpiry administrator --noexpiry
Agora vamos ajustar as configurações do samba conforme as nossas preferências.
No meu caso eu fiz assim… Primeiro eu criei as pastas:
1
# mkdir -p /srv/samba/home /srv/samba/profiles /srv/samba/trash
Então, vamos ajustar as configurações do samba conforme as necessidades:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
[global]
    workgroup = MEUDOMINIO
    realm = MEUDOMINIO.COM.BR
    netbios name = NOME-DA-MAQUINA
    interfaces = lo, eth0
    bind interfaces only = Yes
    server role = active directory domain controller
    server services = s3fs, rpc, nbt, wrepl, ldap, cldap, kdc, drepl, winbind, ntp_signd, kcc, dnsupdate
    idmap_ldb:use rfc2307 = yes
 
    ## Configura Lixeira para o Samba4
    vfs objects = recycle
    recycle:keeptree = yes
    recycle:versions = yes
    recycle:repository = /srv/samba/trash/%U
    recycle:exclude = *.tmp, *.log, *.obj, ~*.*, *.bak
    recycle:exclude_dir = tmp, cache, profiles
 
    ## Desabilita o compartilhamento de impressoras
    printcap name = /dev/null
    load printers = no
    disable spoolss = yes
    printing = bsd
 
[netlogon]
    path = /var/lib/samba/sysvol/aprendendolinux.com/scripts
    read only = No
    browseable = No
 
[sysvol]
    path = /var/lib/samba/sysvol
    read only = No
    browseable = No
 
[profiles]
    path = /srv/samba/profiles
    read only = No
    browseable = No
 
[home]
    path = /srv/samba/home
    read only = No
     
[Lixeira]
    comment = Lata de Lixo
    path = /srv/samba/trash/%U
    read only = No
    directory mask = 0777
Agora vamos aplicar as novas configurações:
1
# smbcontrol all reload-config
Agora precisamos testar as configurações.
Vamos testar se o PDC está asseitando autenticação:
1
# kinit administrator@MEUDOMINIO.COM.BR
Digite a senha. No caso 123MudarNada deve ser retornado nesse comando se tudo correu bem.
Vamos agora testar as configurações de DNS do samba:
1
2
3
host -t SRV _ldap._tcp.meudominio.com.br
host -t SRV _kerberos._udp.meudominio.com.br
host -t A nome-da-maquina.meudominio.com.br.
Testar a conectividade com o samba:
1
smbclient -k //nome-da-maquina.meudominio.com.br/netlogon -c 'ls'
Se tudo saiu bem, algo parecido com isso deve ser retornado:
1
2
3
4
Domain=[MEUDOMINIO] OS=[Unix] Server=[Samba 4.1.11-Debian]
  .                                   D        0  Tue Nov 18 19:14:27 2014
  ..                                  D        0  Tue Nov 18 19:14:40 2014
        36015 blocks of size 2097152. 33671 blocks available
Por favor, você deve respeitar essa ordem de testes.
Agora, para gerenciar o poderoso Samba4 através do Windows, você precisará do RSAT. Não vou abortar a instalação e configuração dessa ferramenta, até porque encontrei um artigo bem completo sobre isso do Marcelo Matias que você pode acessá-lo clicando aqui.
Para baixar o RSAT para Windows 7 SP1 i386, clique aqui.
Para baixar o RSAT para Windows 7 SP1 x64, clique aqui.
Agora segue um vídeo que ensina a integrar a máquina windows no domínio, configurar as permissões da pasta home e gerenciar o DNS:
Documentação oficial do samba sobre as permissões da pasta home:
http://bit.ly/1ACj9vJ
ALGUMAS DICAS ADICIONAIS:
Para cadastrar um usuário no domínio você terá que respeitar as regras de validação de senha do servidor. Para mudar essas regras utilize os seguintes comandos:
Desativar a verificação de complexidade de senha (por padrão a senha de qualquer usuário deve ter pelo menos três dos quatro ítens: Maiúsculas, Minusculas, Números, Simbolos):
1
# samba-tool domain passwordsettings set --complexity=off
Mudar o tamanho mínimo da senha (definindo como 4):
1
# samba-tool domain passwordsettings set --min-pwd-length=4
Mudar o prazo mínimo em que o usuário pode mudar a senha (usuário só vai poder mudar a senha após 4 dias da última mudança)
1
# samba-tool domain passwordsettings set --min-pwd-age=4
Mudar o tempo de vida máximo da senha do usuário (usuário terá que mudar a senha após 30 dias da última mudança)
1
# samba-tool domain passwordsettings set --max-pwd-age=30
Mudar o histórico de senhas que impede que o usuário utilize uma senha repetida (usuário não vai poder repetir nenhuma das últimas 5 senhas)
1
# samba-tool domain passwordsettings set --history-length=5

Fonte: http://www.aprendendolinux.com/implementando-um-servidor-de-dominio-com-o-poderoso-samba4/

Nenhum comentário: