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
Links oficiais para consulta
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.
Copyright
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.