Controlador de Domínio Samba4 - HOWTO

Primeiramente vamos deixar o arquivo /etc/hosts em ordem pois ele é essencial para o ambiente do samba4.

root@dc:~# vi /etc/hosts

127.0.0.1       localhost
192.168.0.1     dc.dominio.local      dc

Em seguida, vamos instalar algumas dependências necessárias.

root@dc:~# aptitude install acl attr autoconf bison build-essential debhelper dnsutils docbook-xml docbook-xsl flex \
                            gdb krb5-user libacl1-dev libaio-dev libattr1-dev libblkid-dev libbsd-dev libcap-dev \
                            libcups2-dev libgnutls-dev libjson-perl libldap2-dev libncurses5-dev libpam0g-dev \
                            libparse-yapp-perl libpopt-dev libreadline-dev perl perl-modules pkg-config python-all-dev \ 
                            python-dev python-dnspython python-crypto xsltproc zlib1g-dev -y

Durante o processo de instalação, serão solicitadas algumas informações do Kerberos.

Configuração da Autenticação Kerberos
Reino por omissão do Kerberos versão 5: DOMINIO.LOCAL
Servidores Kerberos para seu realm: dc.dominio.local
Servidor administrativo para seu realm Kerberos: dc.dominio.local

Nota: Não precisa dar muita atenção para essas configurações pois mais adiante iremos configurá-lo corretamente.

O próximo passo, é realizarmos o download da última versão do samba4 e descompactá-lo.

root@dc:~# wget https://www.samba.org/samba/ftp/samba-4.1.3.tar.gz
root@dc:~# tar xzf samba-4.1.3.tar.gz
root@dc:~# cd samba-4.1.3
root@dc:~/samba-4.1.3# 

Neste passo, vamos compilar o Samba4.

Primeiro vamos fazer a etapa de configuração.

root@dc:~/samba-4.1.3# ./configure --enable-debug --enable-selftest --enable-fhs --prefix=/usr --sysconfdir=/etc --localstatedir=/var

Se tudo foi configurado corretamente, a mensagem a seguir será mostrada.

[...]
'configure' finished successfully (1m45.487s)

O próximo passo é compilar.

root@dc:~/samba-4.1.3# make

Se tudo foi configurado corretamente, a mensagem a seguir será mostrada.

[...]
Waf: Leaving directory `/root/samba-4.1.3/bin'
'build' finished successfully (15m33.383s)

E por fim, instalar o samba4 no nosso sistema.

root@dc:~/samba-4.1.3# make install

Se tudo foi configurado corretamente, a mensagem a seguir será mostrada.

[...]
Waf: Leaving directory `/root/samba-4.1.3/bin'
'install' finished successfully (4m35.273s)

Agora vamos provisionar o samba4 para controlador mestre de domínio.

root@dc:~# samba-tool domain provision --use-rfc2307 --use-xattrs=yes --server-role=dc \
               --dns-backend=SAMBA_INTERNAL --function-level=2008_R2 --realm=DOMINIO.LOCAL \
                   --domain=DOMINIO --adminpass=senha_admin_samba --option="interfaces=lo eth0" \
                       --option="bind interfaces only=yes"

Em seguida vamos configurar o /etc/samba/smb.conf.

root@dc:~# vi /etc/samba/smb.conf

# Global parameters
[global]
        workgroup = DOMINIO
        realm = DOMINIO.LOCAL
        netbios name = DC
        interfaces = lo eth0
        bind interfaces only = Yes
        server role = active directory domain controller
        dns forwarder = 192.168.0.254
        idmap_ldb:use rfc2307 = yes

        # Alterando modo de autenticação do winbind
        server services = +winbind -winbindd

        # Responsavel permissao de adm discos remoto
        vfs objects = acl_xattr
        map acl inherit = yes
        store dos attributes = yes

        # Permitir usuario logar no shell do linux
        template shell = /bin/bash

        # Winbind Mapeamento de User
        winbind use default domain = yes
        winbind enum users  = yes
        winbind enum groups = yes

        # Parametro Pego no Site do Samba4
        kerberos method = system keytab
        client ldap sasl wrapping = sign
        allow dns updates = nonsecure and secure
        nsupdate command =  /usr/bin/nsupdate -g
        
        # Recycle bin
        ;vfs objects = recycle
        recycle:repository = .lixeira
        recycle:exclude = *.tmp *.TMP *.temp *.TEMP *.log *.o *.obj ~$*
        recycle:exclude_dir = tmp, temp, cache
        recycle:keeptree = yes
        recycle:touch = True
        recycle:versions = False

        # Audit
        ;vfs objects = full_audit
        full_audit:success = rmdir mkdir open write rename unlink
        full_audit:failure = rmdir mkdir open write rename unlink
        full_audit:prefix = %U|%I|%m|%S
        full_audit:failure = none
        full_audit:facility = LOCAL5
        full_audit:priority = NOTICE
        dos filemode = yes

[netlogon]
        path = /var/lib/samba/sysvol/dominio.local/scripts
        read only = No

[sysvol]
        path = /var/lib/samba/sysvol
        read only = No

Um passo importante é a configuração do script de inicialização do Samba4. Vamos criá-lo para que possamos usar o recurso de stop/start do serviço.

root@dc:~# vi /etc/init.d/samba4


#!/bin/sh
### BEGIN INIT INFO
# Provides:          samba-ad-dc
# 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 for the AD DC
### 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)
                SERVER_ROLE=`samba-tool testparm --parameter-name="server role"  2>/dev/null | tail -1`
                if [ "$SERVER_ROLE" != "active directory domain controller" ]; then
                    exit 0
                fi

                if init_is_upstart; then
                        exit 1
                fi

                # CVE-2013-4475
                KEYFILE=/var/lib/samba/private/tls/key.pem
                if [ -e $KEYFILE ]
                then
                        KEYPERMS=`stat -c %a $KEYFILE`
                        if [ "$KEYPERMS" != "600" ]
                        then
                                echo "wrong permission on $KEYFILE, must be 600"
                                echo "samba will not start (CVE-2013-4475)"
                                echo "Removing all tls .pem files will cause an auto-regeneration with the correct permissions."
                                exit 1
                        fi
                fi

                log_daemon_msg "Starting Samba AD DC 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)
                if init_is_upstart; then
                        exit 0
                fi
                log_daemon_msg "Stopping Samba AD DC daemon" "samba"

                start-stop-daemon --stop --quiet --pidfile $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)
                if init_is_upstart; then
                        exit 1
                fi
                $0 stop
                sleep 1
                $0 start
                ;;
        status)
                status_of_proc -p $SAMBAPID /usr/sbin/samba samba
                exit $?
                ;;
        *)
                echo "Usage: /etc/init.d/samba-ad-dc {start|stop|restart|force-reload|status}"
                exit 1
                ;;
esac

exit 0

Não podemos esquecer de setar a permissão de execução no arquivo.

root@dc:~# chmod u+x /etc/init.d/samba4

Não esqueça de configurar o sistema para iniciar o script do samba4 na inicialização.

root@dc:~# update-rc.d samba4 defaults

E por fim, vamos restartar o serviço e iniciar o samba4 pela primeira vez.

root@dc:~# /etc/init.d/samba4 restart

[ ok ] Stopping Samba AD DC daemon: samba.
[ ok ] Starting Samba AD DC daemon: samba.

Neste momento, o samba4 já deverá estar sendo executado no sistema. Vamos usar o comando smbclient para executar alguns testes conferindo se tudo está em ordem até o momento.

root@dc:~# smbclient -L localhost -U%

Domain=[DOMINIO] OS=[Windows 6.1] Server=[Samba 4.X.X]

	Sharename       Type      Comment
	---------       ----      -------
	netlogon        Disk      
	sysvol          Disk      
	IPC$            IPC       IPC Service (Samba 4.X.X)
Domain=[DOMINIO] OS=[Windows 6.1] Server=[Samba 4.X.X]

	Server               Comment
	---------            -------

	Workgroup            Master
	---------            -------

Também podemos testar se a autenticação está funcionando.

root@dc:~# smbclient //localhost/netlogon -UAdministrator -c 'ls'
Enter Administrator's password: **********
Domain=[DOMINIO] OS=[Windows 6.1] Server=[Samba 4.X.X]
  .                                   D        0  Tue Sep 15 16:50:03 2015
  ..                                  D        0  Tue Sep 15 16:50:08 2015

		10269624 blocks of size 1024. 7502744 blocks available

Em seguida vamos ajustar o /etc/resolv.conf.

root@dc:~# vi /etc/resolv.conf

domain dominio.local
search dominio.local
nameserver 127.0.0.1

Vamos fazer alguns testes no serviço de DNS para conferir se está tudo OK.

root@dc:~# host -t SRV _ldap._tcp.dominio.local

_ldap._tcp.dominio.local has SRV record 0 100 389 dc.dominio.local.
root@dc:~# host -t SRV _kerberos._udp.dominio.local

_kerberos._udp.dominio.local has SRV record 0 100 88 dc.dominio.local.
root@dc:~# host -t A dc.dominio.local.

dc.dominio.local has address 192.168.0.1

Como comentado anteriormente, vamos ajustar o arquivo /etc/krb5.conf apenas criando um link para o arquivo que o samba gera automaticamente.

root@dc:~# ln -sf /var/lib/samba/private/krb5.conf /etc/krb5.conf

E em seguida, criar o ticket do kerberos, que será usado em nosso ambiente.

root@dc:~# kinit Administrator@DOMINIO.LOCAL

kinit Administrator@DOMINIO.LOCAL
Password for Administrator@DOMINIO.LOCAL: ******
Warning: Your password will expire in 41 days on Tue Oct 27 18:08:15 2015

Não esqueça de verificar se o ticket kerberos foi criado corretamente.

root@dc:~# klist 
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: Administrator@DOMINIO.LOCAL

Valid starting       Expires              Service principal
15-09-2015 17:58:39  16-09-2015 03:58:39  krbtgt/DOMINIO.LOCAL@DOMINIO.LOCAL
	renew until 16-09-2015 17:58:36

A próxima etapa é instalar o servidor de horário …

root@dc:~# aptitude install ntp -y

… e depois configurá-lo.

root@dc:~# vi /etc/ntp.conf

[...]
# You do need to talk to an NTP server or two (or three).
#server ntp.your-provider.example
server pool.ntp.br
[...]

Em seguida, edite o crontab e configura se existe algum agendamento de ntpdate. Se tiver, remova-o.

root@dc:~# crontab -e

#
# System Rules
0       */8     *       *       *       /usr/bin/aptitude update
0       */6     *       *       *       /usr/sbin/ntpdate pool.ntp.br <= REMOVER
0       */12    *       *       *       /usr/bin/updatedb

Em para finalizar, vamos reiniciar o serviço NTP.

root@dc:~# /etc/init.d/ntp restart

Em seguida, vamos fazer alguns ajustes no sistema. Primeiro vamos configurar o /etc/nsswitch.conf.

root@dc:~# vi /etc/nsswitch.conf

passwd: compat winbind
group:  compat winbind
shadow: compat

Copiar Biblioteca do winbind do samba para o sistema

root@dc:~# cd /lib/x86_64-linux-gnu/
root@dc:~# ln /usr/lib/libnss_winbind.so.2

Vamos recarregar bibliotecas…

root@dc:~# ldconfig

… econferir se a biblioteca carregou.

root@dc:~# ldconfig -v | grep winbind

libnss_winbind.so.2 -> libnss_winbind.so.2

Agora vamos criar o link simbolico para biblioteca de autenticacao.

root@dc:~# ln -s /usr/lib/security/pam_winbind.so /lib/x86_64-linux-gnu/security/

Também precisamos configurar a PAM.

root@dc:~# vim /etc/pam.d/common-auth

[...]
# here are the per-package modules (the "Primary" block)
auth    sufficient                      pam_winbind.so
auth    [success=1 default=ignore]      pam_unix.so nullok_secure use_first_pass
[...]
root@dc:~# vim /etc/pam.d/common-account

[...]
# here are the per-package modules (the "Primary" block)
account sufficient                      pam_winbind.so
account [success=1 new_authtok_reqd=done default=ignore]        pam_unix.so
[...]
root@dc:~# vim /etc/pam.d/common-session

[...]
# here are the per-package modules (the "Primary" block)
session required                        pam_mkhomedir.so
session required                        pam_winbind.so
session [default=1]                     pam_permit.so
[...]

Agora vamos consultar o usuário Administrator para ver se a PAM está consultando o Winbind corretamente.

root@dc:~# id Administrator

uid=0(root) gid=100(users) grupos=0(root),100(users),3000004(group policy creator owners),3000006(enterprise admins),3000008(domain admins),3000007(schema admins),3000005(denied rodc password replication group),3000009(BUILTIN\users),3000000(BUILTIN\administrators)

Caminhando para o final das configurações, vamos confirmar se as consultas de winbind estão todas OK.

root@dc:~# getent passwd

[...]
DOMINIO\Administrator:*:0:100::/home/DOMINIO/Administrator:/bin/bash
DOMINIO\Guest:*:3000011:3000012::/home/DOMINIO/Guest:/bin/bash
DOMINIO\krbtgt:*:3000016:100::/home/DOMINIO/krbtgt:/bin/bash

Não podemos esquecer de criar a árvore do diretório $HOME, caso seja necessário.

root@dc:~# mkdir -p /home/DOMINIO

Teste também se o os grupos estão sendo buscados.

root@dc:~# getent group

[...]
DOMINIO\Enterprise Read-Only Domain Controllers:*:3000017:
DOMINIO\Domain Admins:*:3000008:
DOMINIO\Domain Users:*:100:
DOMINIO\Domain Guests:*:3000012:
DOMINIO\Domain Computers:*:3000018:
DOMINIO\Domain Controllers:*:3000019:
DOMINIO\Schema Admins:*:3000007:
DOMINIO\Enterprise Admins:*:3000006:
DOMINIO\Group Policy Creator Owners:*:3000004:
DOMINIO\Read-Only Domain Controllers:*:3000020:
DOMINIO\DnsUpdateProxy:*:3000021:

Para ter certeza que está tudo OK, teste a autenticação do GNU/Linux via PAM.

root@dc:~# ssh Administrator@192.168.0.1

Administrator@192.168.0.1's password: 
Creating directory '/home/DOMINIO/Administrator'.
Linux dc.mdominio.local 3.2.0-4-amd64 #1 SMP Debian 3.2.68-1+deb7u2 x86_64

Para ter certeza que o diretório do usuário foi criado corretamente, execute:

root@dc:~# pwd

/home/DOMINIO/Administrator

Para finalizarmos, vamos editar o arquivo /etc/fstab e configurar as opções de attr e acl.

root@dc:~# vi /etc/fstab

[...]
# <file system>                           <mount point> <type> <options>                                  <dump>  <pass>
# / was on /dev/xvda3 during installation
UUID=c0d92814-a968-4391-8163-226477ef1e23 /             ext4   user_xattr,acl,barrier=1,errors=remount-ro 0       1
[...]

Alterado o arquivo, não podemos esquecer de remontar a partição raiz.

root@dc:~# mount -o remount,rw /

Administração via Windows

Para que possamos administrar o Samba4, precisamos das Ferramentas de Administração de Servidor Remoto para Windows 7, que podem ser baixadas em http://www.microsoft.com/pt-BR/download/details.aspx?id=7887 .

Depois de instalado, ative as opções em:

> Painel de controle
> Programas e recursos
> Ativar ou desativar recurso do windows

Comando Úteis

Realizando checagem na base.

root@dc:~# samba-tool dbcheck --cross-ncs --fix

Alterando política de senhas.

root@dc:~# samba-tool domain passwordsettings set --complexity=off --history-length=0 --min-pwd-length=0 --min-pwd-age=0

Exibindo políticas de senhas

root@dc:~# samba-tool domain passwordsettings show

Alguns Comandos Úteis

Remover Registro de DNS da base

root@dc:~# ldbdel -H /var/lib/samba/private/sam.ldb "DC=PC,DC=dominio.local,CN=MicrosoftDNS,DC=DomainDnsZones,DC=dominio,DC=local"

Remover Entrada DNS zona reversa.

root@dc:~# samba-tool dns delete 192.168.0.21 0.168.192.in-addr.arpa 21 PTR PC.dominio.local -U Administrator

Remover Entrada DNS zona reversa.

root@dc:~# samba-tool dns add 92.168.0.21 0.168.192.in-addr.arpa 21 PTR PC.dominio.local -U Administrator

Problemas Conhecidos

TODO

  • Tirar o avahi o DNS lookup no krb5.conf - funciona e não será necessário alterá-lo.
  • Experimentar o SSSD no lugar do Winbind. Tem um bom desempenho e estabilidade dele.

Dica importante do amigo André Santos.

Agradeço pelo apoio, ajuda e parceria do amigo Gilmar Cabral [gilmarjcabral@gmail.com], que enviou seu manual para estudo e baseado neste, pude criar este.

Tutorial atualizado em 15/09/2015 usando como base o manual oficial do Samba em https://wiki.samba.org/index.php/Samba4/HOWTO.


Voltar

linux/artigos/samba4.txt · Última modificação: 26/02/2016 13:24 por fabriciovc